Re: 仓颉编码问题,请教

188 views
Skip to first unread message

弓辰

unread,
Dec 11, 2012, 9:37:58 PM12/11/12
to Devin, rime-...@googlegroups.com
討論下倉頡輸入法的詞組編碼

倉頡單字取碼方法:
http://zh.wikipedia.org/wiki/%E5%80%89%E9%A0%A1%E8%BC%B8%E5%85%A5%E6%B3%95#.E5.8F.96.E7.A2.BC.E6.96.B9.E6.B3.95

其中的要點是:
「凭视觉(非字义或笔顺)把汉字分割为字首及字身,若字身可以再分,则分为次字首和次字身。各部份再分拆为有限个字码。字首最多取二码,字身最多取三码。」
以上是就單字編碼而言。

劃分字首、字身的思維習慣延伸到詞組編碼中,把詞組中前幾字看作字首、後幾字看作字身,分別取碼。於是有:
內置圖片 1

基於以上規則,在單字碼表基礎上,爲一些字加入了構詞碼:
https://raw.github.com/lotem/brise/master/preset/cangjie5.dict.yaml

TAB分隔的第二列爲單字碼,第三列爲構詞碼。缺少第三列時,構詞碼同單字碼。
中	l
國	wirm	w'irm

詞組「中國」的編碼爲「lwim」,「中」取完,「國」取首、次、尾碼。

爪 hlo 哇 rgg 國 wirm w'irm

詞組「爪哇國」,「爪」取首、尾二碼,「哇國」取三碼,又分爲「哇」取首、尾二碼,「國」取一個尾碼。得編碼「horgw」。
這個例子裏,特殊的是「國」字尾碼的取法。應用了「包含省略」原則( http://cbflabs.com/book/5cjbook/06.htm ):
「國」字爲包含結構,只取一碼的情況下,尾碼取外框「田」而不是裏面的「一」,即「w」。
然而,「國」字取首、尾二碼的情況下,則首碼取外框「田」、尾碼取「一」,即「wm」。如:

中 l 國 wirm w'irm
人 o

「中國人」取「lwmo」。

在碼表的構詞碼中,我用「'」標記包含結構,從而正確地取得尾碼。
算法是:如果該字所需的取碼數大於一,依次從構詞碼中取前一、二碼,然後取剩餘構詞碼中最近的「'」之前一碼作尾碼,若不再有「'」,取最末一碼。

再看一例:

夙 hnmni hn'mn'i
「夙」在詞組中,視詞組的字數和在詞中出現的位置,有幾種可能的取碼:
取一首碼「h」——h=撇
取一尾碼「n」——取至第一個「'」,n=橫折鉤
取首、碼二碼「hn」——取至第一個「'」,n=橫折鉤
取首、次、尾三碼「hnn」——取至第二個「'」,hn=外框,n=𠂊(包圍一點)

這就是倉頡的詞組編碼難於五筆、鄭碼之處。

需要說明的是,倉頡輸入法並沒有官方的詞組編碼規則。以上討論的「快趣」編碼規則是一種較流行的方案,亦爲「倉頡平臺」採用。
RIME輸入法尚未實現按此規則生成詞組編碼的功能。但計劃在 cangjie5.dict.yaml 裏這樣描述組詞規則:
encoding_rules:
  - length_equal: 2
    formula: "AaAzBaBbBz"
  - length_equal: 3
    formula: "AaAzBaBzCz"
  - length_in_range: [4, 10]
    formula: "AaBzCaYzZz"
大寫字母ABC...等代表詞組中的漢字,ZYX...從詞組末端引用單字;小寫字母abc...代表字的編碼字元,zyx...取尾碼。

自動編碼器有兩個用途,一是批量生成詞組編碼,製作成 cangjie5.{prism,table}.bin;
二是從用戶上屏的字、詞序列中構造新詞組,記入 cangjie5.userdb.kct 。

謝謝


2012/12/12 Devin <stu...@gmail.com>
你才是真正的高手啊,做了一个这么广受好评而且扩展性极强的输入法,万分佩服。我那个小工具说白了主要是把各种格式的文本转换下格式罢了,没有太大的技术含量。现在要扩展功能,在只给出汉字词语的情况下,生成各种输入法的词库,没想到做起来这么麻烦,目前仅实现了拼音词库和五笔词库生成,其他词库的生成算法都还没有写好。
我对台湾、香港所使用的注音、仓颉等输入法并不熟悉,以后还希望能够多向你请教学习。


在 2012年12月11日 下午11:51,弓辰 <chen...@gmail.com>写道:

高手,我可佩服你啦,想不到都要支持仓颉啦!仓颉的“快趣”词组编码规则比五笔和郑码复杂,可我已有思路,并收集了一份含构词码的码表,只等编程。今晚已经关了电脑,明天发给你,再合计合计。

2012-12-11 下午11:29,"Devin" <stu...@gmail.com>写道:

佛振,你好。
我是“深蓝词库转换”的作者,这个软件是个开源软件,实现了各个平台各个输入法的词库转换,项目网站:

我希望能够在新版本的程序中能够集成Rime的仓颉词库和仓颉平台的词库。主要遇到一个问题是,我能拿到每个单字的仓颉码。如何用程序实现:给出任意一个词,得到这个词的仓颉码呢?

不知道你那里有没有好的办法或者可供参考的程序、文献呢?

期待您的回复。


image.jpeg

弓辰

unread,
Dec 11, 2012, 10:01:53 PM12/11/12
to Devin, rime-...@googlegroups.com
《倉頡平臺》的安裝目錄下可以找到網友製作的詞組碼表:
http://www.chinesecj.com/forum/viewthread.php?tid=2596&extra=page%3D1


Devin <stu...@gmail.com> 於 2012年12月12日上午10:56 寫道:
非常感谢。我研究下你说的这个算法。
另外还有一个问题,就是我怎么知道我生成编码是正确的编码呢?
有没有这样一个数据库,记录了大量词汇所对应的仓颉码。



2012/12/12 弓辰 <chen...@gmail.com>
image.jpeg
Reply all
Reply to author
Forward
0 new messages