home
home copied to clipboard
双拼输入时如何实现用五笔反查词语
用双拼输入时五笔反查只能查单字,词语虽然可以打出来,从但不会显示提示,如何解决?用五笔输入时双拼反查可以查词。
需要雙拼詞典中直接為該詞標註有編碼
maybe related to https://github.com/rime/librime/issues/822#issuecomment-1951628000
同问,求解
@LEOYoon-Tsaw 你好,
我想令所有詞語不須標註編碼而可被反查,見你在 https://github.com/rime/home/issues/1095#issuecomment-1181270800 提到得改代碼,因此嘗試並成功實現了——須使reverse_lookup_dictionary.cc中構建rev_table
的邏輯針對vocabulary
而不只是syllabary
。
請問這功能是未有人實現,還是不計劃實現呢?見你更久之前在 https://github.com/rime/rime-cantonese/pull/80#issuecomment-666597210 說過希望有人能修補,但這似乎又不是個很大的改動。如果開發者願意添加此功能,我很樂意作出貢獻。
@LEOYoon-Tsaw 你好,
我想令所有詞語不須標註編碼而可被反查,見你在 https://github.com/rime/home/issues/1095#issuecomment-1181270800 提到得改代碼,因此嘗試並成功實現了——須使reverse_lookup_dictionary.cc中構建
rev_table
的邏輯針對vocabulary
而不只是syllabary
。請問這功能是未有人實現,還是不計劃實現呢?見你更久之前在 https://github.com/rime/rime-cantonese/pull/80#issuecomment-666597210 說過希望有人能修補,但這似乎又不是個很大的改動。如果開發者願意添加此功能,我很樂意作出貢獻。
感覺你研究,我沒有太鑽研這部分,只是覺得這應該是一個有用的增強,我不覺得是刻意不做的,也許@lotem 有更多信息
不支持是因为形码的编码是一串字符,而拼音码与之对应的是一个拼音音节。拼音词典不用连串的输入码查询——那样要为简拼、双拼编码存储重复的内容。输入拼音码时,先要切分成音节,对每个音节做必要的转换如全拼—双拼转换,最后按照音节序列查字典。
要支持用拼音反查任意词组的形码,上策是配置一个全功能的拼音翻译器script_translator
,配合一个reverse_lookup_filter
为用拼音查得的候选词标注形码的编码。
中策是专门制作一个反查词典,将词的拼音码处理为一串字符。这样的词典无法用于拼音输入法,所以要专门制作。
下策就是利用拼音方案的反查词典反查单字,不支持用拼音反查词。好处是配置方法简单。
谢谢佛振先生的回答。我看懂了第一段,与我的理解一致;但后面的不太明白,原因如下:
据我测试,用拼音码反查词组的形码是可以的:比如选择仓颉方案,输入`nihao
(拼音反查), 你好
旁会显示人火女弓木
提示码。楼主也提到五笔输入时双拼反查可以查词。似乎只要选择形码输入法,用拼音码或其他形码都能反查词组的形码。
但用形码反查词组的拼音码就不能实现:比如选择粤拼方案,输入vofvnd
(仓颉反查),你好
旁不会显示粤拼提示码。楼主也提到用双拼输入时五笔反查不可以查词。此外,用其他拼音码反查词组的拼音码也不能实现:比如选择粤拼方案,输入`nihao
(普通话拼音反查),你好
旁也不会显示粤拼提示码。似乎只要选择拼音码输入法,用形码或其他拼音码都不能反查词组的拼音码。
要解决这个问题,我参考以往讨论,试过如你所说专门制作反查词典,将词的拼音码处理为一串字符(如 https://github.com/rime/rime-cantonese/pull/80/ 的做法)。但这策略较复杂且麻烦。
所以我成功靠改librime代码解决了——在reverse_lookup_dictionary.cc中更改构建rev_table
的逻辑,不只把vocabulary
中每个单音节词(即每个字)映射到其编码,而是给所有词都如此映射。这样要选择拼音码输入法就也能反查词组的拼音码。
请问这个策略有没有什么弊处?此改动的一个代价就是反查词典文件会更大。如果可行的话,会否计划添加此功能到librime?过往似乎有不少用户对此有提问(如 https://github.com/rime/home/issues/298 ),所以我认为或许有其价值。
好吧。我把兩個問題搞混了。我回答中的「上策」實現的是輸入拼音反查形碼。
形碼中,詞組與單字的編碼形式沒有區別,都是一串編碼字符。事實上 Rime 不區分單字和詞組。 音碼的編碼由多個音節組成,每個音節又是由一串字符得出。這種二維結構是支持簡拼、雙拼等功能的關鍵。
我不知怎樣等價地將拼音碼在反查結果中表示。反查結果是一個空格分隔的列表,用來列出多音字的各個讀音,這與拼音詞典編碼中用空格表示音節邊界衝突。要解決衝突,大概需要另行定義一種格式。隨之要實現一組邏輯,將反查出來的結果解析出來,做雙拼等格式轉換。我覺得實現可能有些複雜。
我的理解與你第二段所說的一致。
你提到的衝突我在改代碼時也發現了;所以我用空格表示音節邊界,多音反查結果改用豎線字符分隔讀音,如下(用普通話拼音反查中古全拼):
請問這個解決方法可否採納?
實現此功能有一個問題:如果詞語包含多個多音字,反查提示碼會很長(但確實符合設計),如下:
不知這個問題算不算嚴重。
至於將反查結果做雙拼等格式轉換,這是否已經可以通過定製拼寫運算實現?
@lotem 不好意思 提醒一下
不行吧。实现有成本,结果还有缺陷。我看还是先别做。
自动推导的词组编码,排列组合随着多音字数目指数增长;排列组合出来的编码用来提示也有误导的嫌疑。反观单字,在词典里都有明确的注音。词组也按照这个标准提示才稳妥。
之前举例错了,不过两者的问题类似。用拼音反查,要准备回答用户这个问题:为什么有些拼音词组能用反查方式输入,另一些不行?用其他编码反查拼音,用户也会问:为什么一些词组能反查出拼音,另一些没有显示拼音?如果反查的是形码,那么回答是:形码输入法里没有这个词,所以不能反查。但拼音输入法作为主词典时,词组可以临时拼造,用户感知不到词典里没有,就会发现,一些词明明可以用拼音输入,却不能反查拼音。这是个次要问题。
明白了,谢谢解答。
自动推导编码问题应该可以靠定制更完整的词典文件来解决:比如中古拼音词典有给中行
一词提供标准注音,反查时就不会出现以上中华
一词一般的情况。使用中古拼音打字时,以上六种编码都能用来输入中华
,而用来输入中行
的只有一种编码。但输入法词典注音难以齐全,所以确实难免出现有误导嫌疑的排列组合出来的编码。
次要问题也确实存在,也许只能让用户了解反查功能的缺陷。
所以如此实现并不完美,选择不做也有道理。
我的想法:詞組只有一條編碼,可以利用單字的編碼推導,不必存入反查詞典; 多音字中,只有一種常用讀音參與自動造詞的,在反查詞典裏添加一條大概率編碼的數據,也可以用來推導詞組的編碼,但在提示中加入一個問號表示可能誤讀。
等等嘛,在 R²ime 裏做?
有意思,這樣能在避免非必要地擴大反查詞典的情況下實現反查詞語。
請問什麼是R²ime?
R²ime
librime 的下一個大版本
期待!