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

自定義雙拼方案 #41

Closed
RomaYun323 opened this issue Apr 8, 2024 · 22 comments
Closed

自定義雙拼方案 #41

RomaYun323 opened this issue Apr 8, 2024 · 22 comments
Labels
question 用戶疑問

Comments

@RomaYun323
Copy link

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

@ksqsf
Copy link
Collaborator

ksqsf commented Apr 8, 2024

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

方案有兩部分:

  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

@ksqsf ksqsf added the question 用戶疑問 label Apr 8, 2024
@RomaYun323
Copy link
Author

您好,感謝回覆
目前使用魔然·整句,將自然碼雙拼替換成小鶴雙拼,但在輸入某些單字時會同時有自然碼的音出現
我不太確定這樣改是不是正確的。
例如:
輸入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
Copy link
Collaborator

ksqsf commented Apr 10, 2024

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

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

之前寫錯了,抱歉!

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

python3 schemagen.py convert-sp --to=flypy --rime-dict=../moran.essay.dict.yaml

@bosbyj
Copy link

bosbyj commented Apr 10, 2024

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

  • 10多年小鹤双拼【仅音】用户,第一是因为我左撇子小鹤手感较好,第二是因为当年小鹤营销推广做的更好,所以入坑了。
  • 加形码辅助,之前一直用的是搜狗/qq等商业输入法+tab过滤。进入win10后改用系统自带的了。现在想返回形码状态。
  • 自然码的辅助码是最符合我思维的,拆大字,拆字典部首。
  • 本repo是自然码辅助码最完善的。简体ok,而且有容错码;正体编码在不断更新,可以打古文。

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

@bosbyj
Copy link

bosbyj commented Apr 11, 2024

看到昨天更新工具了 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
Copy link
Collaborator

ksqsf commented Apr 11, 2024

@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 的「码先词后,一行一词」格式

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

  • 繁体需要使用 pinyin.txt, trad_chars.txt
  • 简体需要使用 pinyin_simp.txt, simp_chars.txt

调用方式为:

# 繁体:
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
Copy link
Author

RomaYun323 commented Apr 11, 2024

您好,請問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
Copy link
Collaborator

ksqsf commented Apr 11, 2024

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

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

edit2: 已經推送了 (773f7a5)

@RomaYun323
Copy link
Author

RomaYun323 commented Apr 11, 2024

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

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

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

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

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

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

@bosbyj
Copy link

bosbyj commented Apr 13, 2024

@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
Copy link
Author

RomaYun323 commented Apr 16, 2024

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

@dec32
Copy link
Contributor

dec32 commented Apr 16, 2024

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

flypy_patch.zip

@ksqsf ksqsf pinned this issue Apr 16, 2024
@jack2game
Copy link
Contributor

jack2game commented Apr 16, 2024

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

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

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

@bosbyj
Copy link

bosbyj commented Apr 17, 2024

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

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

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

@jack2game
Copy link
Contributor

jack2game commented May 5, 2024

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

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

edit2: 已經推送了 (773f7a5)

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

@ksqsf
Copy link
Collaborator

ksqsf commented May 5, 2024

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

@ksqsf
Copy link
Collaborator

ksqsf commented May 24, 2024

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

@bosbyj
Copy link

bosbyj commented May 24, 2024

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

收到,谢谢!

@gaboolic
Copy link
Contributor

gaboolic commented Jun 4, 2024

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

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

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

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

@ksqsf
Copy link
Collaborator

ksqsf commented Jun 4, 2024

魔然也是开源的 :) 拆分

@bosbyj
Copy link

bosbyj commented Jun 5, 2024

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

  • 推荐拆法,即构词时的拆法,方便encoder用。推荐拆法有且只有一种,无歧义。是否考虑小雨点辅助码的红色部首优先方案?贝/心 这类强制优先。应该是和自然码完全兼容的。
  • 容错拆法,兼容自然码容错码

@ksqsf
Copy link
Collaborator

ksqsf commented Jun 5, 2024

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

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

@ksqsf ksqsf unpinned this issue Jun 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question 用戶疑問
Projects
None yet
Development

No branches or pull requests

6 participants