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

五笔:加入自造词的同时,固定原来的字词顺序的解法 #9

Closed
lotem opened this issue May 19, 2015 · 30 comments
Closed

Comments

@lotem
Copy link
Member

lotem commented May 19, 2015

From @viogus on May 17, 2015 16:42

使用的wubi86词库,想在能快捷的加入一些自造词的同时,可以固定原来的字词顺序,
所以同时加上
default.yaml: switcher/fix_schema_list_order: true
translator:enable_user_dict: true
发现fix_schema_list_order无效,在关闭user_dict时则可以,
请问有办法实现我要的功能么?

Copied from original issue: rime/squirrel#53

@lotem
Copy link
Member Author

lotem commented May 19, 2015

fix_schema_list_order 不是控制候選字順序用的選項。

目前不支持所求的行爲。(雖然也不是完全不可能,要運用大量技巧才能做到。)
用戶詞典用來支持調頻及記錄新詞,因爲新造的詞與固有詞是顯示在同一個候選詞列表中,他們之間的順序是由用戶詞典決定的。目前的策略是多用的、最近用過的先出。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

如果需求是保持候選字列表的順序固定,那麼允許加入自造詞的合理性可能要受到質疑。
加入新的自造詞會使得候選詞的順序改變,從這個角度看,這兩項需求似乎是有衝突的。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @viogus on May 18, 2015 9:34

應該不是衝突的吧,自造詞只是作爲相關碼表的補充,
不去影響原有的詞序,只等待手動去調整的時候再改變順序。
對於形碼來說,固定順序是對提高打字速度的必要條件。
但是,能夠方便的自定義詞條也是輸入法的易用性的體現啊。

當然,對於五筆等形碼來說,固定詞序比自定義詞庫要重要得多,
所以我都是關了用戶詞典在用。雖然可以用碼表依賴來解決自定義詞條,
但是對比自動造詞,易用性上差了非常多。

所以,固定詞庫順序還是很有必要的,當然,最好在其實現的基礎上,
再加個快捷鍵手動調整某個詞條的功能,這樣子,wubi輸入法在squirrel上應該就完美了。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @jakwings on May 18, 2015 11:58

我想 @lotem 的意思是,暂时不明白自造词应该被插入到什么位置,也还没有实现简单的手动添加自造词功能。

输入法配置文件中的 translator/enable_user_dict 才直接和自动调频有关,translator/enable_encoder 是自动造词。即使关闭了自动造词和自动调频,也没有明确指定插入顺序。

又要加词又想调整顺序,我想只有这样才最方便:添加新功能,手动添加自造词,並以自动造词的方式排序(不知道要不要重新部署输入法),再提供快捷键选中候选词并排序。

手动添加自造词的过程:

  1. 将词语复制至剪贴板。
  2. 以快捷键触发造词,弹出编码框,按界面提示,输入对应编码,按回车。

手动调整候选词顺序:

  1. 用相关快捷键选中候选词。
  2. 用上下方向键调整顺序,有必要时自动翻页。
  3. 按回车结束操作。(没 ESC 后悔药?)

@lotem
Copy link
Member Author

lotem commented May 19, 2015

我提出的問題是:
如果在已有候選詞的前面加入新詞,那麼勢必改變同碼的候選詞順序,這就與「固定順序」的策略衝突了。
如果只把新造的詞加在最末,可以不破壞已有候選詞的固定順序,但是從實用的角度,這是個不夠友好的策略。因爲任何一個詞庫都有侷限,很可能從來不用的詞收入了詞庫而排在前面,自己常用的重碼詞反而因爲是自造的排在最後了。
一個我認爲比較合理的辦法是「單字優先」並且允許自動調頻,這可以通過添加 single_char_filter 做到。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @jakwings on May 18, 2015 16:33

嗯,我之前想要不要重新部署输入法就是在想「固定顺序」是不是一個不零活的限制。但是既然插入位置这么不好决定,干脆添加手动调整功能更好了(仅仅是建议),不知这种临时操作是否依然受限于「固定顺序」,假如是的话就太可惜了。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

可惜完全手動管理詞序的功能在 Rime 裏面沒有現成的實現。現有的詞典都是針對快速檢索及計算動態詞頻設計的。手動管理詞條的話適合採用數據庫來存儲,Windows 上似乎有這樣的輸入法平臺。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @jakwings on May 18, 2015 17:21

那么看来手动调频暂时是没多少希望了,不记得是不是 Windows 上的「极点五笔」有这个功能了,Mac 的话还有清歌输入法,也不知楼主喜欢不。依我个人看法,五笔是尽量打单字和双字词比较好,所以不妨先尝试从别的大词库抽取一份双字的词表试试效率再考虑下是否真的有必要经常添加新词。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @viogus on May 18, 2015 17:34

@lotem
仅对于新造的词附于最后的情况,如果一个码表的重码率很低(对于形码的码表来说很正常,一个码通常只映射到两三个词,甚至很多都是空码),则完全没有您所提及的顾虑。
单字优先的话,也并不能改变词条顺序会变动的情况,甚至相关的单字顺序也会变动。

只有音码才更多的需要去根据词频来自动调整,形码基本就是一个萝卜一个坑,
自动调整顺序相当于只是让其最后一码在变化(无论是数字选择或者是其他自定义选择),
特别是常用字,基本是手指直接反射打出去,如果改变最后一码,
对于五笔之流的形码的打字体验实在是不舒服。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @viogus on May 18, 2015 17:46

@jakwings
导入词库不是很大的问题,我现在就是用的windows下以前的五笔词库。
打单字或者打词组,只不过是词库的问题而已,看个人习惯。
现在的问题在于“固定词序”和“舒服的自动添加词条”,这二者不能兼得。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @viogus on May 18, 2015 17:56

@lotem

fix_schema_list_order 不是控制候選字順序用的選項。

目前不支持所求的行爲。(雖然也不是完全不可能,要運用大量技巧才能做到。)
用戶詞典用來支持調頻及記錄新詞,因爲新造的詞與固有詞是顯示在同一個候選詞列表中,他們之間的順序是由用戶詞典決定的。目前的策略是多用的、最近用過的先出。

可不可以增加选项,只记录新词,不调频。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

只記錄新詞,不調頻。那麼記錄下來的新詞怎麼用呢?

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @jakwings on May 18, 2015 18:22

打单字或者打词组,只不过是词库的问题而已,看个人习惯。

用双字词还好吧,大多数多字词都很好拆分。显然你不是只打单字。小建议而已。

现在的问题在于“固定词序”和“舒服的自动添加词条”,这二者不能兼得。

貌似我之前误以为你要手动加词了……一看到「快捷」我就想到手动了。囧

可不可以增加选项,只记录新词,不调频。

讨论又回到了原点。新词该摆哪里?按 lotem 的说法,在无法手动调频的情况下,难免会出现词序不理想的问题,到时候又要亲自修改码表文件了。

@lotem
Copy link
Member Author

lotem commented May 19, 2015

我覺得既然沒有更好的辦法,不如就用技巧做吧:
要固定在前幾位的常用字詞,由另一個前置的 table_translator 提供,掛相同的字典並且設置 enable_user_dict: false, initial_quality: 設一個極大值,新詞怎麼調都無法超過,比如設爲 1000。
寫法大概是:

engine:
  translators:
    - table_translator@fixed
    - table_translator
  filter:
    - uniquifier
fixed:
  dictionary: the_same_dictionary
  enable_user_dict: false
  enable_completion: false
  initial_quality: 1000

@lotem
Copy link
Member Author

lotem commented May 19, 2015

From @viogus on May 19, 2015 13:53

也只能是暂时这样解决了,多谢 @lotem , @jakwings
现在的五笔已经接近完美。

@ghost
Copy link

ghost commented May 19, 2015

-_- 我還以爲 GitHub 有這種轉運功能呢……我覺得下次直接在一樓放上原文連結就好了,免得收到一堆被 @ 的提醒電郵。

@lotem
Copy link
Member Author

lotem commented May 20, 2015

抱歉,没想到会@。
应该在开始讨论前,而不是结案时搬运。

@7nights
Copy link

7nights commented Jun 17, 2015

……看来这个特性是没希望实现了……

@lotem
Copy link
Member Author

lotem commented Jun 17, 2015

@7nights 已解決。解法見上文討論。

@7nights
Copy link

7nights commented Jun 17, 2015

@lotem 尝试了一下,是否还是需要先开启用户词典,把新词输入完后再关闭掉?因为我发现就不会记录新词了……

@lotem
Copy link
Member Author

lotem commented Jun 17, 2015

第二個 table_translator 開啓用戶詞典

@7nights
Copy link

7nights commented Jun 17, 2015

@lotem 发现没有效果……想确认一下,拼音能用这样的方式吗?

@zaqzrh
Copy link

zaqzrh commented Jul 15, 2015

@lotem @7nights 是的,拼音也需要這個功能!因為現在的語句流輸入時,組詞時以用戶詞優先,這比不上系統高頻詞組合更合理。即自動調序反而干擾了打字的正確性。搜狗拼音輸入法有「固定首選」、「不動態調頻記憶新詞」等智能輸入功能,Rime沒有,能加上就好了!

@twz915
Copy link

twz915 commented Mar 8, 2016

为什么我用了 uniquifier 并没有去重呢?

@chowhoyin
Copy link

我也是寫了uniquifier也無法去重

@omgredfog
Copy link

經實踐,這種辦法是無效的。

按這個辦法實施以後,發現「用戶詞典」無法記錄用戶近期的輸入。表現爲文本格式的「用戶詞典」裏記錄爲空,導致不能「自動造詞」。

於是,我嘗試着將「去重」的參數(filters / uniquifier)注釋掉,重新部署之後,候選窗體中,便有了「雙份候選」。

我嘗試着每次都用「數字鍵選重」,專挑「排後」的那一份候選詞——進而發現此時「文本格式的用戶詞典」裏,成功記錄下了「近期輸入」。進一步嘗試以詞組編碼的方式對「近期輸入」鍵入時,陰陽魚給出了正確的「建議」。

因此,我明白了,之所以用您的辦法無法記錄「近期輸入」,導致陰陽魚不能給出理想的「建議」的原因,便在於「去重參數」(filters / uniquifier)合並或過濾掉了那個「後排」的候選詞,而「優先顯示」的「侯選詞」是禁用調頻參數的,自然不被「用戶詞典」收錄,陰陽魚無從給出「建議」。

我想,那就將兩份碼表次序調調個兒吧,可依然徒勞,可見排序時,並不是按着碼表優先序來的,而是取決於碼表中,詞條所屬的詞頻。禁用調頻的這份,是被優選排前的,它在去重參數的支配下,吞掉了後排那一份可被調頻的碼表詞條,進而使用戶典詞無法接收到近期輸入。

給「單字」調頻,對形碼用戶實是一大困擾,請佛振先生考慮一下,能否讓調頻只針對詞組?

@lotem
Copy link
Member Author

lotem commented Mar 9, 2018

完全可以實現固定順序及去重。

# wubi86.custom.yaml
patch:
  engine/translators:
    - punctuator
    - reverse_lookup_translator
    - table_translator@fixed
    - table_translator
  engine/filters:
    - uniquifier
  fixed:
    __include: wubi86.schema:/translator
    enable_user_dict: false
    enable_completion: false
    initial_quality: 1000

在此基礎上實現造詞還需要解決 rime/librime#184

@seozed
Copy link

seozed commented Sep 5, 2019

完全可以實現固定順序及去重。

# wubi86.custom.yaml
patch:
  engine/translators:
    - punctuator
    - reverse_lookup_translator
    - table_translator@fixed
    - table_translator
  engine/filters:
    - uniquifier
  fixed:
    __include: wubi86.schema:/translator
    enable_user_dict: false
    enable_completion: false
    initial_quality: 1000

在此基礎上實現造詞還需要解決 rime/librime#184

问下这个功能在最新的0.14.3中支持了吗

@Ace-Who
Copy link

Ace-Who commented Sep 5, 2019

@seozed 支持很久了。只是最近某个版本似乎权重计算有变,需要增加 fixed 的权重。

# <schema_id>.custom.yaml
patch:
  engine/translators:
    - punctuator
    - reverse_lookup_translator
    - table_translator@fixed
    - table_translator
  fixed:
    __include: translator
    enable_user_dict: false
    initial_quality: 100000
  translator:
    dictionary: <dict_name>
    enable_user_dict: true
    enable_encoder: true

@TomatoFryEggs
Copy link

完全可以實現固定順序及去重。

# wubi86.custom.yaml
patch:
  engine/translators:
    - punctuator
    - reverse_lookup_translator
    - table_translator@fixed
    - table_translator
  engine/filters:
    - uniquifier
  fixed:
    __include: wubi86.schema:/translator
    enable_user_dict: false
    enable_completion: false
    initial_quality: 1000

在此基礎上實現造詞還需要解決 rime/librime#184

请问五笔拼音如何实现?

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

9 participants