ksqsf / rime-moran

自然碼雙拼+輔助碼 Rime 配置
Creative Commons Attribution 4.0 International
127 stars 18 forks source link

自定義雙拼方案 #41

Closed RomaYun323 closed 6 months ago

RomaYun323 commented 7 months ago

您好,感謝製作魔然方案 想請教若是想將自然碼雙拼轉為小鶴雙拼要如何修改呢?謝謝。

ksqsf commented 7 months ago

您好,這個操作比較複雜,下面給出簡單的說明:

方案有兩部分:

  1. 整句詞庫: moran.extended.dict.yaml 及其所引用的 dict.yaml
  2. 簡碼詞庫: moran_fixed.dict.yaml 和 moran_fixed_simp.dict.yaml

「魔然」方案使用了這兩種詞庫,「整句」「輔篩」僅使用前者,「字詞」僅使用後者。

這兩種詞庫格式不同,因此操作流程不同。

整句詞庫

打開 moran.yaml,修改 user_sentence_top 處的 algebra 即可。

下面是一個例子:

  user_sentence_top:
    __append: # 注意這一行必須保留
      - xform/^([a-z]+);/\U$1;/   # 雙拼編碼轉大寫以避免衝突,如 vd;yd -> VD;yd

      # ...下面需要一一把自然碼雙拼替換成小鶴雙拼
      - xform/^VL/vd/  # zhai: 把自然碼雙拼 vl 替換成小鶴雙拼 vd
      - xform/^VD/vl/  # zhuang: 把自然碼雙拼 vd 替換成小鶴雙拼 vl
      - xform/^BN/bb/  # bin: 把自然碼雙拼 bn 替換成小鶴雙拼 bb
      - xform/^SB/sz/  # sou: 把自然碼雙拼 sb 替換成小鶴雙拼 sz
      # ......

      - xlit/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/  # 大寫轉回小寫

只需要補全其中的雙拼替換即可,第一行和最後一行可不變。

做完這一步後,整句詞庫雙拼就已經全部轉換爲小鶴雙拼了。

簡碼詞庫

簡碼由於存在壓縮情況,無法使用 algebra 統一處理,因而需要重新製作。可參考 #30 中的描述。

從頭生成詞庫

本方案依靠大量 Python 腳本進行自動化維護。如果您有一定的 Python 技能,也可以考慮使用本方案所提供的 tools/schemagen.py 從頭生成一份配置。該工具可以生成單字碼表、詞庫碼表、簡碼碼表(自動安排簡碼位)、更新詞條雙拼、更新詞條輔助碼等。

其他配置

最後,如果沒有特殊需求,也可以考慮使用現成的小鶴雙拼的類似配置: https://github.com/gaboolic/rime-shuangpin-fuzhuma

RomaYun323 commented 7 months ago

您好,感謝回覆 目前使用魔然·整句,將自然碼雙拼替換成小鶴雙拼,但在輸入某些單字時會同時有自然碼的音出現 我不太確定這樣改是不是正確的。 例如: 輸入YB會同時有小鶴的yin和自然碼的you 輸入MZ會同時有小鶴的mou和自然碼的mei 輸入QP會同時有小鶴的qie和自然碼的qun imageimageimage

因為是繁體使用者(輸繁得繁),主要依賴繁體詞庫,雾凇拼音的詞庫是經過簡化字優化過的詞庫,是輸簡經轉換得繁,有些發音輸入習慣不適用臺灣地區,所以想偷懶直接直接拿大佬做的詞庫。

雖然從來沒接觸過代碼,但多虧了詳細的備註,總算是把環境搞好了。有嘗試用tools/schemagen.py生成小鶴雙拼的單字表,是有成功生出來(覺得感動🥹 想請問有辦法透過schemagen.py將您製作的詞庫轉成小鶴雙拼+zrm輔助碼嗎?想向您確認一下(還在努力理解tools/schemagen.py中,我怕我在作白日夢😂)

  user_sentence_top:
    __append: # 注意這一行必須保留
      - derive/^([a-z]+);/\U$1;/   # 雙拼編碼轉大寫以避免衝突,如 vd;yd -> VD;yd

      # ...下面需要一一把自然碼雙拼替換成小鶴雙拼
      - xform/^BZ/bw/
      - xform/^DZ/dw/
      - xform/^FZ/fw/
      - xform/^GZ/gw/
      - xform/^HZ/hw/
      - xform/^KZ/kw/
      - xform/^LZ/lw/
      - xform/^MZ/mw/
      - xform/^NZ/nw/
      - xform/^PZ/pw/
      - xform/^SZ/sw/
      - xform/^UZ/uw/
      - xform/^TZ/tw/
      - xform/^WZ/ww/
      - xform/^ZZ/zw/
      - xform/^VZ/vw/
      - xform/^IP/iy/
      - xform/^CP/cy/
      - xform/^DP/dy/
      - xform/^GP/gy/
      - xform/^HP/hy/
      - xform/^JP/jy/
      - xform/^KP/ky/
      - xform/^LP/ly/
      - xform/^NP/ny/
      - xform/^QP/qy/
      - xform/^RP/ry/
      - xform/^UP/uy/
      - xform/^SP/sy/
      - xform/^TP/ty/
      - xform/^XP/xy/
      - xform/^YP/yy/
      - xform/^VP/vy/
      - xform/^ZP/zy/
      - xform/^BX/bp/
      - xform/^DX/dp/
      - xform/^JX/jp/
      - xform/^LX/lp/
      - xform/^MX/mp/
      - xform/^NX/np/
      - xform/^PX/pp/
      - xform/^QX/qp/
      - xform/^TX/tp/
      - xform/^XX/xp/
      - xform/^BL/bd/
      - xform/^CL/cd/
      - xform/^IL/id/
      - xform/^DL/dd/
      - xform/^GL/gd/
      - xform/^HL/hd/
      - xform/^KL/kd/
      - xform/^LL/ld/
      - xform/^ML/md/
      - xform/^NL/nd/
      - xform/^PL/pd/
      - xform/^SL/sd/
      - xform/^UL/ud/
      - xform/^TL/td/
      - xform/^WL/wd/
      - xform/^ZL/zd/
      - xform/^VL/vd/
      - xform/^BY/bk/
      - xform/^DY/dk/
      - xform/^JY/jk/
      - xform/^LY/lk/
      - xform/^MY/mk/
      - xform/^NY/nk/
      - xform/^PY/pk/
      - xform/^QY/qk/
      - xform/^TY/tk/
      - xform/^XY/xk/
      - xform/^YY/yk/
      - xform/^IY/ik/
      - xform/^GY/gk/
      - xform/^HY/hk/
      - xform/^KY/kk/
      - xform/^UY/uk/
      - xform/^VY/vk/
      - xform/^DD/dl/
      - xform/^JD/jl/
      - xform/^LD/ll/
      - xform/^ND/nl/
      - xform/^QD/ql/
      - xform/^XD/xl/
      - xform/^ID/il/
      - xform/^GD/gl/
      - xform/^HD/hl/
      - xform/^KD/kl/
      - xform/^UD/ul/
      - xform/^VD/vl/
      - xform/^IB/iz/
      - xform/^CB/cz/
      - xform/^DB/dz/
      - xform/^FB/fz/
      - xform/^GB/gz/
      - xform/^HB/hz/
      - xform/^KB/kz/
      - xform/^LB/lz/
      - xform/^MB/mz/
      - xform/^NB/nz/
      - xform/^PB/pz/
      - xform/^RB/rz/
      - xform/^UB/uz/
      - xform/^SB/sz/
      - xform/^TB/tz/
      - xform/^YB/yz/
      - xform/^VB/vz/
      - xform/^ZB/zz/
      - xform/^JW/jx/
      - xform/^LW/lx/
      - xform/^NW/nx/
      - xform/^QW/qx/
      - xform/^XW/xx/
      - xform/^IW/ix/
      - xform/^GW/gx/
      - xform/^HW/hx/
      - xform/^KW/kx/
      - xform/^UW/ux/
      - xform/^VW/vx/
      - xform/^BK/bc/
      - xform/^CK/cc/
      - xform/^IK/ic/
      - xform/^DK/dc/
      - xform/^GK/gc/
      - xform/^HK/hc/
      - xform/^KK/kc/
      - xform/^LK/lc/
      - xform/^MK/mc/
      - xform/^NK/nc/
      - xform/^PK/pc/
      - xform/^RK/rc/
      - xform/^SK/sc/
      - xform/^UK/uc/
      - xform/^TK/tc/
      - xform/^YK/yc/
      - xform/^ZK/zc/
      - xform/^VK/vc/
      - xform/^BN/bb/
      - xform/^JN/jb/
      - xform/^LN/lb/
      - xform/^MN/mb/
      - xform/^NN/nb/
      - xform/^PN/pb/
      - xform/^QN/qb/
      - xform/^XN/xb/
      - xform/^YN/yb/
      - xform/^BC/bn/
      - xform/^DC/dn/
      - xform/^JC/jn/
      - xform/^LC/ln/
      - xform/^MC/mn/
      - xform/^NC/nn/
      - xform/^PC/pn/
      - xform/^QC/qn/
      - xform/^TC/tn/
      - xform/^XC/xn/
      - xform/^AN/aj/
      - xform/^EN/ef/
      - xlit/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/  # 大寫轉回小寫
ksqsf commented 7 months ago

@RomaYun323 第一行的 derive 應該改成 xform,也就是:

      - xform/^([a-z]+);/\U$1;/   # 雙拼編碼轉大寫以避免衝突,如 vd;yd -> VD;yd

之前寫錯了,抱歉!

另外現在也可以直接使用 schemagen.py 轉換詞庫的雙拼了 (d327325393520fa24dfff3e188c785263532ada6),用法:

python3 schemagen.py convert-sp --to=flypy --rime-dict=../moran.essay.dict.yaml
bosbyj commented 7 months ago

有幸结识各位码友,全世界这个时候就我们3个在研究这个问题,感动啊。发下心路历程。

诉求: 小鹤装机量在双拼群体中挺高的,像我这种超过10年的用户,只能使用【小鹤音】搭配【自然形】了,改键位太费脑。希望能出个小鹤+自然形的搭配,或者脚本一键生成小鹤版的【魔然】【字词】【整句】所有dict。

bosbyj commented 7 months ago

看到昨天更新工具了 flypyify.py 学习中 感谢!

整句输入,打上面的algebra补丁即可搞定

字词输入,fixed码表,我直接用 schemagen转换成小鹤

convert_sp = subparsers.add_parser('convert-sp', help='轉換雙拼') convert_sp.add_argument('--rime-dict', help='輸入rime格式詞庫', required=True) convert_sp.add_argument('--from', choices=double_pinyin_choices, help='來源雙拼方案', default='zrm') convert_sp.add_argument('--to', choices=double_pinyin_choices, help='目的雙拼方案', required=True)

两步完成后,就可以使用 魔然 完整体了吗?不知道schemagen能不能搞定简码。

ksqsf commented 7 months ago

@bosbyj convert_sp命令目前不能操作fixed码表,只能用于转换 yy;xx 格式的词库。

建议使用gen-fixed命令重新生成fixed码表,需要的参数有:

  1. --pinyin-table=./data/pinyin.txt 传入词音和词频数据(pinyin.txt为繁体,pinyin_simp.txt为简体)
  2. --double-pinyin=flypy 设定为小鹤双拼
  3. --charset=./data/trad_chars.txt 设定字集,仅对这些字编码(trad_chars.txt为繁体,simp_chars.txt为简体)
  4. --input-dict=./data/pinyin.txt 设定词集,仅对这些词语编码(pinyin.txt为繁体,pinyin_simp.txt为简体)
  5. --format=code-word 适用于当前 moran_fixed.dict.yaml 的「码先词后,一行一词」格式

注意上面的参数需要对应:

调用方式为:

# 繁体:
python3 schemagen.py --double-pinyin=flypy --pinyin-table=./data/pinyin.txt gen-fixed --charset=./data/trad_chars.txt --input-dict=./data/pinyin.txt  --format=code-word
# 简体:
python3 schemagen.py --double-pinyin=flypy --pinyin-table=./data/pinyin_simp.txt gen-fixed --charset=./data/simp_chars.txt --input-dict=./data/pinyin_simp.txt  --format=code-word

说明:

当然,把所有词库都替换之后就是完全体了 :-) 方案功能对词库没有特殊要求。

RomaYun323 commented 7 months ago

您好,請問moran.chars.dict.yaml也可以用schemagen.py轉換嗎? 我轉換完碼表沒有被轉換為小鶴的碼表,其他詞庫除了moran_fixed.dict.yaml都有轉換成功

python3 ./schemagen.py convert-sp --to=flypy --rime-dict=data/moran.chars.dict.yaml > moran.chars.dict.yaml

另外我測試了一下,當只修改algebra時,整句輸入沒問題,但輔篩還是維持自然碼的碼表 image imageimage

ksqsf commented 7 months ago

@RomaYun323 可以,chars也可以用convert-sp命令轉換。

edit: 不行,目前的convert-sp只能轉換二字以上的詞。我馬上修改一下。

edit2: 已經推送了 (773f7a5b67cf4f4497be39ac8fab0928e800c20f)

RomaYun323 commented 7 months ago

@ksqsf 感謝,已成功轉換moran.chars.dict.yaml

@bosbyj 您好,請問您有成功將魔然完全轉換成小鶴輸入嗎? 我這裡一直無法成功(沒修改測試魔然·字詞)

我大概記錄一下測試的結果如下:

修改algebra
魔然      自然碼 小鶴混合
魔然·整句   小鶴(轉換成功)
魔然·輔篩   自然碼

轉換moran.extended.dict用到的詞典為小鶴碼表
魔然      自然碼 小鶴混合
魔然·整句   小鶴(轉換成功)
魔然·輔篩   小鶴(轉換成功)

修改algebra + 轉換moran.extended.dict用到的詞典為小鶴碼表
魔然      顯示混亂(輸kk顯示kun拼音的字)大部分字詞輸入無顯示,部分字詞同時或分別出現自然碼小鶴碼表(輸yb只顯示「有」;輸pp得pie;輸yp只顯示「雲」)
魔然·整句   同上
魔然·輔篩   小鶴(轉換成功)
bosbyj commented 7 months ago

@ksqsf 感謝,已成功轉換moran.chars.dict.yaml

@bosbyj 您好,請問您有成功將魔然完全轉換成小鶴輸入嗎? 我這裡一直無法成功(沒修改測試魔然·字詞)

我大概記錄一下測試的結果如下:

修改algebra
魔然        自然碼 小鶴混合
魔然·整句     小鶴(轉換成功)
魔然·輔篩     自然碼

轉換moran.extended.dict用到的詞典為小鶴碼表
魔然        自然碼 小鶴混合
魔然·整句     小鶴(轉換成功)
魔然·輔篩     小鶴(轉換成功)

修改algebra + 轉換moran.extended.dict用到的詞典為小鶴碼表
魔然        顯示混亂(輸kk顯示kun拼音的字)大部分字詞輸入無顯示,部分字詞同時或分別出現自然碼小鶴碼表(輸yb只顯示「有」;輸pp得pie;輸yp只顯示「雲」)
魔然·整句     同上
魔然·輔篩     小鶴(轉換成功)

第四种情形是可以的,而且适合繁体用户

修改algebra + 轉換moran_fixed.dict.yaml 至小鹤

我生成了一份txt,你贴到yaml下面码表部分就应该可以用了 fixed簡碼轉小鹤.txt

RomaYun323 commented 6 months ago

看到昨天更新了convert-fixed-sp,可以直接轉換moran_fixed.dict.yaml,感謝作者,目前完美使用中。

dec32 commented 6 months ago

小鹤补丁,包括拼写运算和翻译后的简码词库

flypy_patch.zip

jack2game commented 6 months ago

这里有一份转码脚本,总结了一下大佬们提供的转换思路

如果想要直接用现成的【鹤音码+魔然形码】方案,可以去下载这个已经转换好的文件夹

@bosbyj 现在有一个Moflice项目可以下载即用,方案是小鹤双拼+魔然形码+雾凇词库,并且保留了魔然的全部功能。 https://github.com/jack2game/rime-moflice

bosbyj commented 6 months ago

同门师兄弟好多啊。小鹤就是自然码的分支门派,零声母都一个套路。

我喜欢自然码的辅助码规则。

自然码专利过期了,利好开源。 自然码有大字符集编码,repo主f大还贡献了好多编码。 自然码拆大字根,好多字还可以用两分法拆字,舒服。弱点是形声字编码不够离散,所以后续的很多辅助码都选择拆小部件。

jack2game commented 6 months ago

@RomaYun323 ~可以,chars也可以用convert-sp命令轉換。~

edit: 不行,目前的convert-sp只能轉換二字以上的詞。我馬上修改一下。

edit2: 已經推送了 (773f7a5)

@ksqsf 請問是否可以讓convert-sp同時支持zrlf.dict的轉換?

ksqsf commented 6 months ago

@jack2game 不是不行,但是用convert-sp轉換不是最優做法。建議直接從官方的兩分碼表轉換。

ksqsf commented 5 months ago

自 commit ca35b6d 起,在 algebra 部分引入了部分自然码特有的优化,对应的行均有 ZRM-SPECIFIC 标记。如果有人在使用脚本自动转换自然码为其他双拼,请务必先用 grep -v ZRM-SPECIFIC 去除这些行。

bosbyj commented 5 months ago

自 commit ca35b6d 起,在 algebra 部分引入了部分自然码特有的优化,对应的行均有 ZRM-SPECIFIC 标记。如果有人在使用脚本自动转换自然码为其他双拼,请务必先用 grep -v ZRM-SPECIFIC 去除这些行。

收到,谢谢!

gaboolic commented 5 months ago

同门师兄弟好多啊。小鹤就是自然码的分支门派,零声母都一个套路。

我喜欢自然码的辅助码规则。

自然码专利过期了,利好开源。 自然码有大字符集编码,repo主f大还贡献了好多编码。 自然码拆大字根,好多字还可以用两分法拆字,舒服。弱点是形声字编码不够离散,所以后续的很多辅助码都选择拆小部件。

我现在搞了拆分和码表都开源的墨奇音形

ksqsf commented 5 months ago

魔然也是开源的 :) 拆分

bosbyj commented 5 months ago

魔然的辅助码,建议规范化,并区分

ksqsf commented 5 months ago

目前对辅助码的规定是,一个字若有多种辅助码,则第一个码被视为「正码」(推荐拆法),并参与 compact dictionary 的构建。容错一般只用于单字输入。

(该话题已脱离本issue范畴,如需进一步讨论请另开issue。)