Skip to content

fix(lyrics): 修复三行歌词组中纯汉字日文行被错误归类为翻译行#55

Open
silver-wolf-little-wife wants to merge 2 commits into
Billy636:devfrom
silver-wolf-little-wife:fix/lyrics-role-classification
Open

fix(lyrics): 修复三行歌词组中纯汉字日文行被错误归类为翻译行#55
silver-wolf-little-wife wants to merge 2 commits into
Billy636:devfrom
silver-wolf-little-wife:fix/lyrics-role-classification

Conversation

@silver-wolf-little-wife

Copy link
Copy Markdown
Contributor

概述

修复 build_three_line_semantic 中,当三行歌词组包含不含假名的纯汉字日文行(如「大丈夫」)时,classify_line_role 将其错误归类为 Translation,导致回退逻辑选择错误的主行。修复后按组内出现顺序决定主行和翻译行。

变更类型

  • 缺陷修复

详情

  • 新增 classify_line_role 函数,基于字符脚本特征和显式角色标记判断行角色
  • 新增 build_two_line_semantic / build_three_line_semantic,替代原 build_hard_role_semantic_line_from_cluster 中硬编码的 [roman, main, translation] 三行模式
  • 新增 resolve_two_line_script_heuristic 处理两行情况下的分类回退
  • build_three_line_semantic:当所有非罗马字行无法通过角色分类区分时,按组内顺序决定主行/翻译行
  • 新增 5 个单元测试,覆盖三行主-翻-罗马、两行主-罗马、顺序交换等场景

测试

  • 本地 Rust 测试全部通过(96 单元 + 27 集成 = 123 tests)
  • 前端测试全部通过(480 tests)
  • TypeScript 类型检查通过

相关 Issue

Billy636 and others added 2 commits June 14, 2026 12:07
`classify_line_role` 将不含假名的纯汉字日文(如「大丈夫」)错误归类为
Translation,导致 `build_three_line_semantic` 在回退时选择了错误的
主行。修复后的逻辑:当所有非罗马字行无法通过角色分类区分时,按组内
出现顺序决定——第一个非罗马字行为主行,第二个为翻译行。
@Billy636

Copy link
Copy Markdown
Owner

三行歌词我采取一刀切的方式,这是我经过多次尝试后的最终选择,按照顺序固定为罗马音 原文 翻译进行匹配 。
原因是我尝试过使用其他方法去识别歌词相关文字(保证识别准确性就在于识别逻辑),包括不限于符号文字判断加评分系统,但是实际识别效果并不好,歌词总会有奇奇怪怪的语言搭配,很难做到百分百识别正确,你在本次pr中改为利用字符类型特征(script_profile)判断行角色,也是一样,要达到 100% 的绝对准确率,唯一完美的解决办法是在歌词制作源头规范格式。所以针对三行歌词,只需要让用户的使用固定顺序为罗马音 原文 翻译,软件就可以正常显示。
当然,如果有显式标记,可以优先使用显式标记,这样不用根据歌词行数进行分别判断,我自己也有其他想法,不过这不在本次讨论范围内,当前显式标记有bug,后续会进行迭代优化。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants