iDvel / rime-ice

Rime 配置:雾凇拼音 | 长期维护的简体词库
https://dvel.me/posts/rime-ice/
GNU General Public License v3.0
9.44k stars 631 forks source link

中英混输词库不支持双拼方案 #230

Closed Nicked639 closed 1 year ago

Nicked639 commented 1 year ago

中英混输词库目前只支持全拼方案,如输入 qqhao 可以得到 QQ号,但在双拼方案(小鹤)中,输入 qqhc 无法得到QQ号,而是秋毫。 请问作者是否可以添加支持?

iDvel commented 1 year ago

本意是想支持的,但执行的时候出了点问题。

比如创建一个 melt_eng.custom.yaml 写入英文和小鹤的拼写规则:

patch:
  speller/algebra:
    - derive/['\-_+,.]+//
    - derive/^(.+)$/\L$1/
    - derive/^([a-z].+)$/\U$1/
    - derive/^([a-zA-Z])/\U$1/
    - derive/^([a-z][a-z])/\U$1/

    - derive/^([jqxy])u$/$1v/
    - derive/^([aoe])([ioun])$/$1$1$2/
    - xform/^([aoe])(ng)?$/$1$1$2/
    - xform/iu$/Q/
    - xform/(.)ei$/$1W/
    - xform/uan$/R/
    - xform/[uv]e$/T/
    - xform/un$/Y/
    - xform/^sh/U/
    - xform/^ch/I/
    - xform/^zh/V/
    - xform/uo$/O/
    - xform/ie$/P/
    - xform/i?ong$/S/
    - xform/ing$|uai$/K/
    - xform/(.)ai$/$1D/
    - xform/(.)en$/$1F/
    - xform/(.)eng$/$1G/
    - xform/[iu]ang$/L/
    - xform/(.)ang$/$1H/
    - xform/ian$/M/
    - xform/(.)an$/$1J/
    - xform/(.)ou$/$1Z/
    - xform/[iu]a$/X/
    - xform/iao$/N/
    - xform/(.)ao$/$1C/
    - xform/ui$/V/
    - xform/in$/B/
    - xlit/QWRTYUIOPSDFGHJKLZXCVBNM/qwrtyuiopsdfghjklzxcvbnm/

然后有些小问题: 输入 qqhc 可以得到「QQ号」,但输入 qqhcma 却得不到「QQ号码」; 输入 xgl 可以得到「X光」,但输入 xglpm 却得不到「X光片」。 挺迷的,谁知道怎么回事。。。

wxyzh commented 1 year ago

大概和简拼,韵母转换,权重有关。

我用的智能ABC的双拼方案。 大部分英文开头的混拼都无法匹配, X光,实际输入xgt,预览结果为x guang, X光的候选一样很靠后。 X光片,实际输入xgtpw,预览结果为x g t pian,X光片 由于权重原因在候选的靠后位置。

ps 我是用的第一版的实现

wxyzh commented 1 year ago

如果能单独做个字典,并且提高初始权重,或许会有些效果

hoofcushion commented 1 year ago

本意是想支持的,但执行的时候出了点问题。

比如创建一个 melt_eng.custom.yaml 写入英文和小鹤的拼写规则:

patch:
  speller/algebra:
    - derive/['\-_+,.]+//
    - derive/^(.+)$/\L$1/
    - derive/^([a-z].+)$/\U$1/
    - derive/^([a-zA-Z])/\U$1/
    - derive/^([a-z][a-z])/\U$1/

    - derive/^([jqxy])u$/$1v/
    - derive/^([aoe])([ioun])$/$1$1$2/
    - xform/^([aoe])(ng)?$/$1$1$2/
    - xform/iu$/Q/
    - xform/(.)ei$/$1W/
    - xform/uan$/R/
    - xform/[uv]e$/T/
    - xform/un$/Y/
    - xform/^sh/U/
    - xform/^ch/I/
    - xform/^zh/V/
    - xform/uo$/O/
    - xform/ie$/P/
    - xform/i?ong$/S/
    - xform/ing$|uai$/K/
    - xform/(.)ai$/$1D/
    - xform/(.)en$/$1F/
    - xform/(.)eng$/$1G/
    - xform/[iu]ang$/L/
    - xform/(.)ang$/$1H/
    - xform/ian$/M/
    - xform/(.)an$/$1J/
    - xform/(.)ou$/$1Z/
    - xform/[iu]a$/X/
    - xform/iao$/N/
    - xform/(.)ao$/$1C/
    - xform/ui$/V/
    - xform/in$/B/
    - xlit/QWRTYUIOPSDFGHJKLZXCVBNM/qwrtyuiopsdfghjklzxcvbnm/

然后有些小问题: 输入 qqhc 可以得到「QQ号」,但输入 qqhcma 却得不到「QQ号码」; 输入 xgl 可以得到「X光」,但输入 xglpm 却得不到「X光片」。 挺迷的,谁知道怎么回事。。。

cn_en.dict.yaml:
---
name: cn_en
version: "2023-04-11"
sort: by_weight

QQ号 QQhao
QQ号码    QQhaoma
X光  xguang
X光片 xguangpian
...
melt_eng.schema.yaml:
---
schema:
  schema_id: melt_eng
  name: Easy English Nano
speller:
 algebra:
  - xform/(.)ao$/$1C/ #这个正则式会将末尾的ao替换为C,于是qqhao顺利转换为qqhc

  - xform/[iu]ang$/L/ #这个正则式会将末尾的uang或iang替换为L,于是xguang顺利转换为xgl

  - xform/ian$/M/ #这个正则式会将末尾的ian替换为m,于是xguangpian顺利转换为xguangpm
...

qqhao可以转换为qqhc,但是qqhaoma中间的hao,并不在末尾,于是无法转换,x光片同理,如果你输入xguangpm,就可以打出x光片了。

hoofcushion commented 1 year ago

image image

如果对双拼混输感兴趣,有需求,可以尝试这个小技巧:在词库中用""包裹住编码,再在拼运的最后一行加上

speller:
 algebra:
  -…………
  -…………
  -…………
  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法 我还制作了一个一件生成拼运的emeditor脚本https://github.com/rime/home/discussions/1274

另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。

附件: 处理好的词库 _dic_cn_en.dict.yaml.txt

wxyzh commented 1 year ago
speller:
 algebra:
  -…………
  -…………
  -…………
  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法 我还制作了一个一件生成拼运的emeditor脚本rime/home#1274

另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。

附件: 处理好的词库 _dic_cn_en.dict.yaml.txt

这个方法真棒。 Snipaste_2023-05-01_09-53-15 Snipaste_2023-05-01_09-53-42 Snipaste_2023-05-01_09-54-09

hoofcushion commented 1 year ago
speller:
 algebra:
  -…………
  -…………
  -…………
  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法 我还制作了一个一件生成拼运的emeditor脚本rime/home#1274 另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。 附件: 处理好的词库 _dic_cn_en.dict.yaml.txt

这个方法真棒。 Snipaste_2023-05-01_09-53-15 Snipaste_2023-05-01_09-53-42 Snipaste_2023-05-01_09-54-09

注释掉translator下的preedit format,或者使用外挂词库,输入码显示就会正常了

Nicked639 commented 1 year ago

image

image

如果对双拼混输感兴趣,有需求,可以尝试这个小技巧:在词库中用""包裹住编码,再在拼运的最后一行加上


speller:

 algebra:

  -…………

  -…………

  -…………

  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法

我还制作了一个一件生成拼运的emeditor脚本https://github.com/rime/home/discussions/1274

另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。

附件:

处理好的词库

_dic_cn_en.dict.yaml.txt

我试了一下,挺好的,谢谢大佬分享。就是目前遇到一个问题,我用的小鹤双拼,按下面的字典在输入ads的时候照理说会出来「A栋」这个候选词,但不知为何就是出不来。

A栋 "a" dong

hoofcushion commented 1 year ago

image image 如果对双拼混输感兴趣,有需求,可以尝试这个小技巧:在词库中用""包裹住编码,再在拼运的最后一行加上

speller:

 algebra:

  -…………

  -…………

  -…………

  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法 我还制作了一个一件生成拼运的emeditor脚本rime/home#1274 另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。 附件: 处理好的词库 _dic_cn_en.dict.yaml.txt

我试了一下,挺好的,谢谢大佬分享。就是目前遇到一个问题,我用的小鹤双拼,按下面的字典在输入ads的时候照理说会出来「A栋」这个候选词,但不知为何就是出不来。

A栋 "a" dong

可能是词频太低,被其他候选顶下去了。

wxyzh commented 1 year ago

image

image

如果对双拼混输感兴趣,有需求,可以尝试这个小技巧:在词库中用""包裹住编码,再在拼运的最后一行加上


speller:

 algebra:

  -…………

  -…………

  -…………

  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法

我还制作了一个一件生成拼运的emeditor脚本https://github.com/rime/home/discussions/1274

另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。

附件:

处理好的词库

_dic_cn_en.dict.yaml.txt

我试了一下,挺好的,谢谢大佬分享。就是目前遇到一个问题,我用的小鹤双拼,按下面的字典在输入ads的时候照理说会出来「A栋」这个候选词,但不知为何就是出不来。

A栋 "a" dong

把这个字典放在中文字典的最上面。

name: rime_ice
version: "1"
use_preset_vocabulary: true
import_tables:
  - cn_dicts/cn_en   # 中英混输词库
  - cn_dicts/8105    # 字表
  - cn_dicts/41448   # 大字表(按需启用)
  - cn_dicts/base    # 基础词库
  - cn_dicts/sogou   # 搜狗流行词,与 main 没有重复
  #- cn_dicts/moegirl  # 萌娘百科
  - cn_dicts/ext     # 扩展词库,与 main sogou 没有重复
  - cn_dicts/tencent # 腾讯词向量,与 main sogou ext 没有重复,大词库,部署时间较长。
  - cn_dicts/others  # 一些杂项
Nicked639 commented 1 year ago

image

image

如果对双拼混输感兴趣,有需求,可以尝试这个小技巧:在词库中用""包裹住编码,再在拼运的最后一行加上


speller:

 algebra:

  -…………

  -…………

  -…………

  - xform/"// #这个正则式会删除 "

在这个#70 issue里,我也有提及这种方法

我还制作了一个一件生成拼运的emeditor脚本https://github.com/rime/home/discussions/1274

另外,双拼拼运不要用大写字母搭桥,我不喜欢,浪费编码空间,是制作方案的下下下下策。

附件:

处理好的词库

_dic_cn_en.dict.yaml.txt

我试了一下,挺好的,谢谢大佬分享。就是目前遇到一个问题,我用的小鹤双拼,按下面的字典在输入ads的时候照理说会出来「A栋」这个候选词,但不知为何就是出不来。

A栋 "a" dong

把这个字典放在中文字典的最上面。

name: rime_ice
version: "1"
use_preset_vocabulary: true
import_tables:
  - cn_dicts/cn_en   # 中英混输词库
  - cn_dicts/8105    # 字表
  - cn_dicts/41448   # 大字表(按需启用)
  - cn_dicts/base    # 基础词库
  - cn_dicts/sogou   # 搜狗流行词,与 main 没有重复
  #- cn_dicts/moegirl  # 萌娘百科
  - cn_dicts/ext     # 扩展词库,与 main sogou 没有重复
  - cn_dicts/tencent # 腾讯词向量,与 main sogou ext 没有重复,大词库,部署时间较长。
  - cn_dicts/others  # 一些杂项

我用的是你在另外一个issue提到的挂载方法:

tidm_cn_en:
  dictionary: tidic_cn_en
  enable_sentence: false
  enable_user_dict: false
  initial_quality: 1

是将上面这段直接放在了我的双拼输入方案里,这样的话该如何给这个字典提权呢? 刚接触Rime,还不太了解。

hoofcushion commented 1 year ago

  initial_quality: 1

initial_quality的大小会影响权重,另外,translators中的排序也会影响谁排在前面

Nicked639 commented 1 year ago

  initial_quality: 1

initial_quality的大小会影响权重,另外,translators中的排序也会影响谁排在前面

再请教一下,可以让中英文混输支持联想吗,现在需要全部完整的输入才会在候选词里看到中英文混合的结果。

hoofcushion commented 1 year ago

再请教一下,可以让中英文混输支持联想吗,现在需要全部完整的输入才会在候选词里看到中英文混合的结果。

不行,不动源码弄不了联想

iDvel commented 1 year ago

把目前的中英混输词库分成 N 份,一份全拼、一份小鹤、一份自然码。。。

- cn_en_pinyin.dict.yaml
- cn_en_double_pinyin.dict.yaml
- cn_en_double_pinyin_flypy.dict.yaml

例如:
# 全拼 cn_en_pinyin.dict.yaml
哆啦A梦    duolaameng
# 小鹤 cn_en_double_pinyin_flypy.dict.yaml
哆啦A梦    dolaamg

这样是不是就行了,谁用哪个就解开哪个注释。

Nicked639 commented 1 year ago

把目前的中英混输词库分成 N 份,一份全拼、一份小鹤、一份自然码。。。


- cn_en_pinyin.dict.yaml

- cn_en_double_pinyin.dict.yaml

- cn_en_double_pinyin_flypy.dict.yaml

例如:

# 全拼 cn_en_pinyin.dict.yaml

哆啦A梦  duolaameng

# 小鹤 cn_en_double_pinyin_flypy.dict.yaml

哆啦A梦  dolaamg

这样是不是就行了,谁用哪个就解开哪个注释。

用这种方案是不是还能支持联想?

iDvel commented 1 year ago

用这种方案是不是还能支持联想?

和现在的英文行为模式一样。

Nicked639 commented 1 year ago

用这种方案是不是还能支持联想?

和现在的英文行为模式一样。

佬是准备在repo添加这几个yaml了吗?

WithdewHua commented 1 year ago

把目前的中英混输词库分成 N 份,一份全拼、一份小鹤、一份自然码。。。

- cn_en_pinyin.dict.yaml
- cn_en_double_pinyin.dict.yaml
- cn_en_double_pinyin_flypy.dict.yaml

例如:
# 全拼 cn_en_pinyin.dict.yaml
哆啦A梦  duolaameng
# 小鹤 cn_en_double_pinyin_flypy.dict.yaml
哆啦A梦  dolaamg

这样是不是就行了,谁用哪个就解开哪个注释。

这维护成本有点高啊,感觉还是 @abcdefg233 佬的方案比较好啊

wxyzh commented 1 year ago

把目前的中英混输词库分成 N 份,一份全拼、一份小鹤、一份自然码。。。

- cn_en_pinyin.dict.yaml
- cn_en_double_pinyin.dict.yaml
- cn_en_double_pinyin_flypy.dict.yaml

例如:
# 全拼 cn_en_pinyin.dict.yaml
哆啦A梦    duolaameng
# 小鹤 cn_en_double_pinyin_flypy.dict.yaml
哆啦A梦    dolaamg

这样是不是就行了,谁用哪个就解开哪个注释。

这维护成本有点高啊,感觉还是 @abcdefg233 佬的方案比较好啊

直接放在中文字典里就行了,不用维护这么多方案和字典

WithdewHua commented 1 year ago

把目前的中英混输词库分成 N 份,一份全拼、一份小鹤、一份自然码。。。

- cn_en_pinyin.dict.yaml
- cn_en_double_pinyin.dict.yaml
- cn_en_double_pinyin_flypy.dict.yaml

例如:
# 全拼 cn_en_pinyin.dict.yaml
哆啦A梦  duolaameng
# 小鹤 cn_en_double_pinyin_flypy.dict.yaml
哆啦A梦  dolaamg

这样是不是就行了,谁用哪个就解开哪个注释。

这维护成本有点高啊,感觉还是 @abcdefg233 佬的方案比较好啊

直接放在中文字典里就行了,不用维护这么多方案和字典

嗯嗯,目前我是挂在了中文字典里,用了 @abcdefg233 的方案

iDvel commented 1 year ago

直接放中文字典不行的,会让简拼失效,输入 hah 的时候得不到「哈哈」。

wxyzh commented 1 year ago

@iDvel 我在cn_en.go 中添加了智能ABC双拼的字典,麻烦看下是否可以合并。 https://github.com/iDvel/rime-ice/pull/259 rime_cn_en.zip