Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

无法直接输入「药」字 #26

Open
YueHua2008 opened this issue Feb 28, 2024 · 6 comments
Open

无法直接输入「药」字 #26

YueHua2008 opened this issue Feb 28, 2024 · 6 comments

Comments

@YueHua2008
Copy link
Contributor

YueHua2008 commented Feb 28, 2024

「药」字的仓颉码是「廿女一戈」或「TVMI」,其重码字还有「蔣」、「薅」、「荮」。在 cangjie5.dict.yaml 中,这些字的顺序为:

蔣	tvmi
薅	tvmi
药	tvmi
荮	tvmi

因此,可以推导,如果在 Ctrl + ` 菜单中勾选了「漢字」与「增廣」,并且想要在不选字的情况下直接输入这组重码字,那么理论上可以输入:

蔣	tvmi
薅	xtvmi
药	xxtvm
荮	xxxtv

其中「蔣」、「薅」、「荮」都可以这样直接输入,但只有「药」没能成功。输入「xxtvm」时,实际显示的是「薅」,与输入「xtvmi」是一样的。

怎样才能在勾选了「漢字」与「增廣」并且不选字的情况下直接输入「药」这个字呢?

@lotem
Copy link
Member

lotem commented Feb 28, 2024

重碼字的編碼是由朱邦復在原版裏制訂的,是寫在碼表裏的固定編碼。
本品的候選字按照統計的字頻排序,且支持按照用戶使用頻率調整。重碼字的編碼不會隨之動態調整。

@lotem lotem closed this as completed Feb 28, 2024
@lotem
Copy link
Member

lotem commented Feb 28, 2024

應是碼表有錯。

@lotem lotem reopened this Feb 28, 2024
@YueHua2008
Copy link
Contributor Author

應是碼表有錯。

多谢提醒,我尝试在 cangjie5.dict.yaml 中分别搜索之前推导的这四个仓颉码:

蔣	tvmi
薅	xtvmi
药	xxtvm
荮	xxxtv

可以分别找到:

蔣	tvmi
薅	tvmi
药	tvmi
荮	tvmi
薅	xtvmi
薅	xxtvm
荮	xxxtv

看起来「xtvmi」和「xxtvm」两者都分配给了「薅」。如果我上面的推导正确,那么只需要修改 薅 xxtvm药 xxtvm 就可以解决「药」字的问题了。

不过,我在想也许还有其它的重码字存在类似的问题,所以我好奇 cangjie5.dict.yaml 中的每个词条最初是怎样确定下来的。如果能找出「xtvmi」和「xxtvm」两者都表示「薅」的起因所在,那么就可以解决这一问题的根源,并且确保其它重码字不会出现类似的问题。

@lotem
Copy link
Member

lotem commented Feb 29, 2024

歡迎 Pull Request。

碼表是從其他輸入法項目借來的。最初應該是人工編碼。
如果有能力,不妨幫忙寫個腳本來檢測類似錯誤。

@YueHua2008
Copy link
Contributor Author

歡迎 Pull Request。

碼表是從其他輸入法項目借來的。最初應該是人工編碼。 如果有能力,不妨幫忙寫個腳本來檢測類似錯誤。

我制作了一个程序,首先读取 cangjie5.dict.yaml 并记录重码字的字、码、行号,然后根据行号的先后顺序推导出每个重码字前面应该有几个字母「x」,最后将推导出的字码与实际上的字码进行比较,如果发现不一致,那么就记录在日志里。

因为我的编程不太好,所以我只制作到这里,并想手动做完剩下的部分。

在我手动工作时,发现这样一种情况:

第 3575 至 3577 行是:

叉	ei	ei
叉	ei	e'i
戏	ei

第 25016 至 25017 行是:

㲿	ei
㳀	ei

第 37033 行是:

𠬟	ei

这五个字「叉」「戏」「㲿」「㳀」「𠬟」的仓颉码都是「ei」。但是只有「叉」字一者具有一个以「x」开头的码,位于第 21960 行:

叉	xei

其它四个字「戏」「㲿」「㳀」「𠬟」都没有任何以「x」开头的码,所以它们都无法在不用选字的情况下直接输入。

而另一方面,在第 24005 行,字码还是以「y」开头,但在第 24006 行,字码就以「a」开头了。同样的情况也出现在第 30801 行和第 30802 行。我猜测这可能表示 cangjie5.dict.yaml 最初是由多个不同的词典合并而成的。

如果这种猜测是正确的,那么也许就不能简单地根据行号的先后顺序来推导字码前面应该加上几个「x」了,因为很难确定多个词典合并时的排列顺序是否和仓颉输入法的官方顺序一致。

于是我查了查维基词典,结果发现维基词典上同样也是只有「叉」字才有一个以「x」开头的码「xei」,其它四个字「戏」「㲿」「㳀」「𠬟」都找不到任何以「x」开头的码,尽管它们全都有「ei」这个码。我猜测这可能表示仓颉输入法官方预设的以「x」开头的字码其实没有涵盖这四个字。

不过,我暂时还不知道怎样验证这种猜测。我尝试寻找一个官方的仓颉输入法词典,但没能成功,所以我好奇是否有一个比维基词典更加全面的数据库可以找到这些字的仓颉码。

如果这种猜测确实是正确的,那么是否还有方法能够比手动选字更方便、更快捷地输入类似于这种情况的重码字呢?

@lotem
Copy link
Member

lotem commented Mar 1, 2024

感謝你花時間研究, 驗證.

以我的理解, X 開始的編碼不求覆蓋所有的重碼字 (因爲最長五碼的限制, 而重碼可以不止五個, 所以不可能做到).
這類編碼應該以朱邦復的設計爲準, 否則民間流傳的倉頡碼表收字數量不同, 字頻統計不同, 如果各自任意制定編碼, 這些編碼就會變得無法在全社會通行. 目前比較全面的帶有倉頡碼的數據庫是 Unihan 數據庫.

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

No branches or pull requests

2 participants