Skip to content

Move 喫茶小舖/純喫茶 to TWPhrases/HKPhrases - #1027

Merged
frankslin merged 1 commit into
BYVoid:masterfrom
danny0838:fix-喫
May 28, 2026

Hidden character warning

The head ref may contain hidden characters: "fix-\u55ab"
Merged

frankslin merged 1 commit into
BYVoid:masterfrom
danny0838:fix-喫

Conversation

@danny0838

@danny0838 danny0838 commented Jan 23, 2026 •

Copy link
Copy Markdown
Contributor

#447 當時加到 TWPhrases 只在 s2twp 有作用,應該加到另一組和 TWVariants 合併的詞典,才會在 s2tw/t2tw 有作用。

另外補上 s2hk/t2hk。

@danny0838
danny0838 force-pushed the fix-喫 branch 3 times, most recently from 7c115bd to 2b90022 Compare January 25, 2026 04:44
@danny0838 danny0838 changed the title Fix 喫茶小舖/純喫茶 for t2tw/t2hk Move 喫茶小舖/純喫茶 to TWPhrases/HKPhrases Jan 25, 2026
@frankslin

Copy link
Copy Markdown
Collaborator

PR 中实际的改动似乎远比标题中所说的复杂,不仅移动了两个词条,而且调整了它们所属的词典层级、改变了 s2tw / t2tw / s2hk / t2hk 配置的语义。想确认一下:如果直接将这两个词加入「STPhrases.txt」,是不是也可以达到效果?

另外,我理解 t2tw、t2hk 配置并非是为「规范化繁体字输入为香港、台湾繁体」而设计,而只是将「OpenCC 標準繁體」(t) 的序列按 tw/hk variant 用字习惯进行转换。若输入的序列不符合「OpenCC 標準繁體」,转换结果可能并非用户所预期。

@danny0838

danny0838 commented Apr 4, 2026 •

Copy link
Copy Markdown
Contributor Author

這個在 #447 就說過了。

加入這些詞條是為了防止 t2tw/t2hk 的階段出錯(因為 喫=>吃)。

s2t 本來就會把「纯吃茶」轉換成「純喫茶」,所以改「STPhrases.txt」毫無意義。

@frankslin

Copy link
Copy Markdown
Collaborator

https://opencc.js.org/compare?t=%E5%90%83%E8%8C%B6%E5%B0%8F%E9%93%BA/%E7%BA%AF%E5%90%83%E8%8C%B6

  • 输入:吃茶小铺/纯吃茶
  • s2t输出:喫茶小鋪/純喫茶
  • s2tw输出:吃茶小鋪/純吃茶
  • s2twp输出:吃茶小鋪/純吃茶
  • s2hk输出:吃茶小鋪/純吃茶

s2t 的转换正确是因为该规则中「吃」转换为「喫」。

因为缺少了 STPhrases.txt 的词组规则,s2twp 输出并未如 #447 的预期修复,否则 s2twp 应该已经能正确转成「喫茶小鋪/純喫茶」了。

@danny0838

danny0838 commented Apr 5, 2026 •

Copy link
Copy Markdown
Contributor Author

好吧,我忘了 #475 這個萬年 BUG 還沒修,所以有必要在 STPhrases.txt 也加入「纯吃茶=>純喫茶」和「吃茶小舖=>喫茶小舖」。但這個 PR 的修正還是有必要存在,否則 t2tw 會因為「喫=>吃」的規則把「純喫茶」轉為「純吃茶」。

然後目前 PR 還沒更正 STPhrases.txt,測試卻全部通過,這表示測試引擎有問題,以致於和實際執行的情況有出入,請大大們修正。

@danny0838

danny0838 commented May 27, 2026 •

Copy link
Copy Markdown
Contributor Author

rebase 修正缺失了(但之前 STPhrases 未加詞仍通過測試的問題可能仍需要檢查及處理)。

如果沒問題希望能盡快合併,因為之後還有其他地區詞轉換問題可能會涉及 TWVariantsPhrases、HKVariantsPhrases 層級的轉換,例如 #1252, #1253。

@frankslin

Copy link
Copy Markdown
Collaborator

空的 TWVariantsPhrases、HKVariantsPhrases 文件已经另行添加,此 PR 不会成为 blocker。

@frankslin
frankslin merged commit 32c4b7b into BYVoid:master May 28, 2026
31 checks passed
@danny0838
danny0838 deleted the fix-喫 branch May 28, 2026 15:07
@frankslin

Copy link
Copy Markdown
Collaborator

之前 STPhrases 未加詞仍通過測試的問題可能仍需要檢查及處理

这个问题搞清楚了。

当「吃茶小铺」及「纯吃茶」没有加到 STPhrases 中时,不一定总是有分词错误的问题。
如果字典里有该字符串的子串(例如「吃茶」、「茶小」、「小铺」、「纯吃」),或输入的句子恰好能在这个词的边界匹配一个其他字典中的字符串(如「X吃」、「铺X」、「X纯」、「茶X」等),才会出现分词错误。
如果不属于上述情况,则这一段内容会出现在分词间隔中,这种情况是不会有分词问题的。这就是为什么测试能通过。

一旦字典后续加入了上述子串,就会触发分词错误。所以在现有程序框架下,为保证地区词转换的确定性,还是建议给 TWPhrases key 的简体字版加入 STPhrases,如 #1193 所做。

之前 #1027 (comment) 提出的问题,不是因为没加 STPhrases,而是因为此前从未有 HKVariantsPhrases、TWVariantsPhrases 的 overrides 文件,导致第一层转换「喫茶小舖」后又被 variants 字表中的「喫 -> 吃」规则转回「吃茶小舖」。

@danny0838

Copy link
Copy Markdown
Contributor Author

之前 #1027 (comment) 提出的问题,不是因为没加 STPhrases,而是因为此前从未有 HKVariantsPhrases、TWVariantsPhrases 的 overrides 文件,导致第一层转换「喫茶小舖」后又被 variants 字表中的「喫 -> 吃」规则转回「吃茶小舖」。

我沒注意到 s2twp 是三層轉換:

  1. STPhrases.ocd2, STCharacters.ocd2
  2. TWPhrases.ocd2
  3. (TWVariantsPhrases.ocd2), TWVariants.ocd2

而 tw2sp 是二層:

  1. TWPhrasesRev.ocd2, TWVariantsRevPhrases.ocd2, TWVariantsRev.ocd2
  2. TSPhrases.ocd2, TSCharacters.ocd2

後者似乎比較合理,s2twp 應該可以改成第二層轉換用 TWPhrases.ocd2, (TWVariantsPhrases.ocd2), TWVariants.ocd2

@frankslin

Copy link
Copy Markdown
Collaborator

tw2sp 原本也是三层,变成两层是在 #366 修改的,解决了一个因次序错误导致转换失效的问题;s2twp 没有遇到过类似问题,于是还是维持三层。

理论上只要 TWPhrases 输出里不出现 TWVariantsPhrases / TWVariants 的输入,TWPhrases 和 TWVariantsPhrases 的输入不重叠,大体上应该是没有问题的。

@danny0838

Copy link
Copy Markdown
Contributor Author

出問題的機率不低吧,假如之後有某個專名在 TWPhrases 輸出「蔘」「鍼」等字,都可能再被 TWVariants 誤轉。既然現在已經發現邏輯漏洞及與其他方案的不一致,趁沒出問題前先修正比較好吧?

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