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

更換或重製輔助碼 #1

Closed
ksqsf opened this issue Feb 12, 2023 · 6 comments
Closed

更換或重製輔助碼 #1

ksqsf opened this issue Feb 12, 2023 · 6 comments
Assignees
Labels
enhancement 新功能 priority:low 短期內無計劃

Comments

@ksqsf
Copy link
Collaborator

ksqsf commented Feb 12, 2023

在設定簡碼的過程中,已經發現了自然碼輔碼的不少缺陷:

  • 有些字母鍵利用率太高,造成結構性重碼,如 a、m、y 等;有些字母鍵利用率太低,造成編碼空間浪費,如 t、p、s 等。
  • 所用自然碼底表收錄太多容錯码,影響 Rime 詞庫管理——每個字若有 n 個音、m 個拆分,則會有 n*m 個編碼。編碼不唯一也讓簡碼和詞表更難做。
  • 取大字導致第四碼和聲母往往是重複的,如「噝嘶」,這一點需要修改。

此外,詞語和單字的離散不佳,導致四碼往往無法利用,只能塞入三簡空間中,更加劇了重碼問題。

有一些替代的輔助碼,也許可以調研一下(資料真難找啊 😵‍💫)

@ksqsf ksqsf self-assigned this Feb 12, 2023
@ksqsf
Copy link
Collaborator Author

ksqsf commented Feb 12, 2023

計劃:首先以自然碼輔碼爲底本製作完魔然方案,使用一段時間再考慮是否换碼。目前的使用體驗其實還可以。

@ksqsf
Copy link
Collaborator Author

ksqsf commented Feb 12, 2023

備忘,簡碼選取方法:

在目前底表的 2 萬字中,對每個三碼 xyz,

  • 若 xyz 只對應一個字,那麼徑設該字簡碼爲 xyz。
  • 若 xyz 對應若干字,
    • 若不存在高頻字(所有字我都根本不認識),簡碼 xyz 留空。
    • 若只存在唯一的高頻字,設其簡碼爲 xyz。
    • 若存在若干高頻字,
      1. 按可能被「單用」的頻率順序排序,依次賦予簡碼 xyz 給這些高頻字
      2. 然後嘗試尋找不與詞衝突的四碼打法,賦予其中高頻字一個唯一四碼編碼

例如,uiu 對應許多高頻字:士 視 屍 飾 屎 蝕 弒 …… 等等

  1. 「視」可以找到一個更好的分配 uij,故不再參與 uiu 的分配
  2. 按字頻和可能單用頻率排序,「士」最高,uiu 分配給「士」
  3. 「屍」「屎」「飾」分別可以找到唯一且不衝突的的四碼 uius uium uiuj
  4. 「弒」uiuu 和詞語重碼,但還有另一個編碼 uiiu,可以分配 uii。
  5. 「蝕」實在沒辦法了,只能重着或者使用 uiuio 的打法了。

有的時候可能會通過調整二簡來讓出重碼。例如,若 gb → 狗,則 gbd 有「溝」「夠」重碼,gbj 有「鉤」「够」重碼,但 gbq 是空的。此時若把 gb 分配給「夠」,則有

  • gb → 夠
  • gbq → 狗
  • gbd → 溝
  • gbj → 鉤

完美解決了問題。

@Elflare
Copy link

Elflare commented May 12, 2023

我之前发现了个汉心码,看似还行,有无兴趣试试?
http://www.ziranyixue.homes/

@ksqsf
Copy link
Collaborator Author

ksqsf commented May 12, 2023

@Elflare 感谢推荐,已加入调研列表

@ksqsf
Copy link
Collaborator Author

ksqsf commented Jul 15, 2023

目前比較偏好自然快手碼

  1. 拆分很簡單, 規則就是二分取首,可以寫個程序自動編碼,編到超集都行
  2. 重碼率比小鶴還低

編碼規則大概就是這樣:

字根 = {
  '丆': 'e',
  '口': 'k',
  '馬': 'm',
  '木': 'a',
  '甘': 'g',
  '千': 'q',
  ...
}

def 編碼(, 第一層=True):
  if  in 字根 and not 第一層:
    return 字根[]

  match 拆分():
    case 獨體字:
      return ...
    case 二分(, ):
      return 編碼(,False)[0] + 編碼(,False)[0]

#   編碼("甜") 
# = 編碼("舌")[0] + 編碼("甘")[0]
# = (編碼("千") + 編碼("口"))[0] + 字根["甘"]
# = 字根["千"] + 字根["甘"]
# = "qg"

#   編碼("碼") 
# = 編碼("石")[0] + 編碼("馬")[0]
# = (編碼("丆")[0] + 編碼("口")[0])[0] + 編碼("馬")[0]
# = (字根["丆"][0] + 字根["口"][0])[0] + 字根["馬"][0]
# = 字根["丆"] + 字根["馬"]
# = "em"

不過可能直觀性欠缺了一點,並且要特殊記憶一批字根,反過來說不是字根的也要記住(比如「石」不是字根,要拆分成「丆e+口k」),還是挺難的。

(這種硬拆的做法雖然解決了拆分歧義的問題,但是又缺少了一些字形上的樂趣。比如「爪」「采」「爬」,其中自然快手把「采」上部規定爲 a,而「爪」本身拆成「pu」,於是「爬」就是pb;但是很明顯,「采」和「爬」的部首都應該是「爪」,自然碼正確地歸類到了「爪」,「采」和「爬」分別是vm和vb。)

@ksqsf
Copy link
Collaborator Author

ksqsf commented Aug 24, 2023

目前的一些對自然碼輔碼改進的想法:

  1. 分離 y 上的字根,特別是「雨」、「言」、「魚」三者
  2. 分離「口」「囗」,解決類似「味圍」的重碼;這兩個部首合併是原版自然碼中少數的「沒文化」設計

規則上,需要明確一些結構的拆分。(包夾的「衣」究竟用 w 還是用 y、;「𢦏」結構的拆分究竟取內還是取外等。)

但總的來說是一些小問題,不怎麼影響日常使用(本來就有兼容;可以打詞句規避),甚至對字詞模式的影響也很小(取碼基本是統一且一致的;重碼數量並不多)。

因此, 在短期內我不會對自然碼輔碼本身作出任何改動。 [1] 這個方案的「魔改」之处,也因而僅限於輸入模式的修改,而非對方案本身有什麼修改。

漢心碼作者基於魔然方案也製作了類似的 RIME 方案,這裏留個鏈接,供有需要者使用:https://zhuanlan.zhihu.com/p/650978565

[1] 若想要修改,可隨時調取 autozrm 程序,十分便捷。

@ksqsf ksqsf added the priority:low 短期內無計劃 label Aug 24, 2023
@ksqsf ksqsf closed this as not planned Won't fix, can't repro, duplicate, stale Aug 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement 新功能 priority:low 短期內無計劃
Projects
None yet
Development

No branches or pull requests

2 participants