home icon indicating copy to clipboard operation
home copied to clipboard

双拼输入时如何实现用五笔反查词语

Open wwssxx opened this issue 9 months ago • 16 comments

用双拼输入时五笔反查只能查单字,词语虽然可以打出来,从但不会显示提示,如何解决?用五笔输入时双拼反查可以查词。

wwssxx avatar Apr 28 '24 08:04 wwssxx

需要雙拼詞典中直接為該詞標註有編碼

LEOYoon-Tsaw avatar Apr 29 '24 17:04 LEOYoon-Tsaw

maybe related to https://github.com/rime/librime/issues/822#issuecomment-1951628000

ksqsf avatar Apr 29 '24 19:04 ksqsf

同问,求解

songxianjun0315 avatar Aug 17 '24 10:08 songxianjun0315

@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 說過希望有人能修補,但這似乎又不是個很大的改動。如果開發者願意添加此功能,我很樂意作出貢獻。

russell-liu avatar Oct 01 '24 21:10 russell-liu

@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 有更多信息

LEOYoon-Tsaw avatar Oct 01 '24 22:10 LEOYoon-Tsaw

不支持是因为形码的编码是一串字符,而拼音码与之对应的是一个拼音音节。拼音词典不用连串的输入码查询——那样要为简拼、双拼编码存储重复的内容。输入拼音码时,先要切分成音节,对每个音节做必要的转换如全拼—双拼转换,最后按照音节序列查字典。

要支持用拼音反查任意词组的形码,上策是配置一个全功能的拼音翻译器script_translator,配合一个reverse_lookup_filter为用拼音查得的候选词标注形码的编码。

中策是专门制作一个反查词典,将词的拼音码处理为一串字符。这样的词典无法用于拼音输入法,所以要专门制作。

下策就是利用拼音方案的反查词典反查单字,不支持用拼音反查词。好处是配置方法简单。

lotem avatar Oct 02 '24 04:10 lotem

谢谢佛振先生的回答。我看懂了第一段,与我的理解一致;但后面的不太明白,原因如下:

据我测试,用拼音码反查词组的形码是可以的:比如选择仓颉方案,输入`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 ),所以我认为或许有其价值。

russell-liu avatar Oct 02 '24 07:10 russell-liu

好吧。我把兩個問題搞混了。我回答中的「上策」實現的是輸入拼音反查形碼。

形碼中,詞組與單字的編碼形式沒有區別,都是一串編碼字符。事實上 Rime 不區分單字和詞組。 音碼的編碼由多個音節組成,每個音節又是由一串字符得出。這種二維結構是支持簡拼、雙拼等功能的關鍵。

我不知怎樣等價地將拼音碼在反查結果中表示。反查結果是一個空格分隔的列表,用來列出多音字的各個讀音,這與拼音詞典編碼中用空格表示音節邊界衝突。要解決衝突,大概需要另行定義一種格式。隨之要實現一組邏輯,將反查出來的結果解析出來,做雙拼等格式轉換。我覺得實現可能有些複雜。

lotem avatar Oct 02 '24 10:10 lotem

我的理解與你第二段所說的一致。

你提到的衝突我在改代碼時也發現了;所以我用空格表示音節邊界,多音反查結果改用豎線字符分隔讀音,如下(用普通話拼音反查中古全拼): image 請問這個解決方法可否採納?

實現此功能有一個問題:如果詞語包含多個多音字,反查提示碼會很長(但確實符合設計),如下: image 不知這個問題算不算嚴重。

至於將反查結果做雙拼等格式轉換,這是否已經可以通過定製拼寫運算實現?

russell-liu avatar Oct 02 '24 19:10 russell-liu

@lotem 不好意思 提醒一下

russell-liu avatar Oct 17 '24 19:10 russell-liu

不行吧。实现有成本,结果还有缺陷。我看还是先别做。

自动推导的词组编码,排列组合随着多音字数目指数增长;排列组合出来的编码用来提示也有误导的嫌疑。反观单字,在词典里都有明确的注音。词组也按照这个标准提示才稳妥。

之前举例错了,不过两者的问题类似。用拼音反查,要准备回答用户这个问题:为什么有些拼音词组能用反查方式输入,另一些不行?用其他编码反查拼音,用户也会问:为什么一些词组能反查出拼音,另一些没有显示拼音?如果反查的是形码,那么回答是:形码输入法里没有这个词,所以不能反查。但拼音输入法作为主词典时,词组可以临时拼造,用户感知不到词典里没有,就会发现,一些词明明可以用拼音输入,却不能反查拼音。这是个次要问题。

lotem avatar Oct 18 '24 00:10 lotem

明白了,谢谢解答。

自动推导编码问题应该可以靠定制更完整的词典文件来解决:比如中古拼音词典有给中行一词提供标准注音,反查时就不会出现以上中华一词一般的情况。使用中古拼音打字时,以上六种编码都能用来输入中华,而用来输入中行的只有一种编码。但输入法词典注音难以齐全,所以确实难免出现有误导嫌疑的排列组合出来的编码。

次要问题也确实存在,也许只能让用户了解反查功能的缺陷。

所以如此实现并不完美,选择不做也有道理。

russell-liu avatar Oct 18 '24 23:10 russell-liu

我的想法:詞組只有一條編碼,可以利用單字的編碼推導,不必存入反查詞典; 多音字中,只有一種常用讀音參與自動造詞的,在反查詞典裏添加一條大概率編碼的數據,也可以用來推導詞組的編碼,但在提示中加入一個問號表示可能誤讀。

等等嘛,在 R²ime 裏做?

lotem avatar Oct 19 '24 00:10 lotem

有意思,這樣能在避免非必要地擴大反查詞典的情況下實現反查詞語。

請問什麼是R²ime?

russell-liu avatar Oct 19 '24 22:10 russell-liu

R²ime

librime 的下一個大版本

lotem avatar Oct 20 '24 10:10 lotem

期待!

russell-liu avatar Oct 20 '24 17:10 russell-liu