LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3507|回复: 13

转换大字集郑码的码表给fcitx(3楼海峰五笔转scim,4楼文渊郑码转scim)

[复制链接]
发表于 2009-6-8 18:11:20 | 显示全部楼层 |阅读模式
中易官方有郑码教材和配套光盘iso下载,里面有轻松学郑码软件,多种郑码的码表
我把大字集郑码的码表转换给fcitx用

Windows XP:
输入法生成器Imegen.exe打开zmgb18j.mb,逆转成txt

Linux:
$vim zmgb18j.txt
去头,只留词条编码
:set fileformat=unix
:set fenc=gb18030
:wq
以gb18030编码保存,Imegen生成的是utf-16le,fcitx的txt2mb要用gb18030
$HOME/.vimrc里要有类似这样一行自动检测编码:
set fileencodings=utf-8,gbk,big5,gb18030,utf-16,utf-16le

$cut -f1 -d' ' zmgb18j.txt > mb.txt
这个本来没想到,结果生成的码表很多重码,如打cs‘玉’被排到第二页,不懂Imegen在很多行后面+空格+两字母是什么作用,一个字两种编码本来已经在两行的(如 是k 是kaii),在win里用没那些重码字
结果win2fcitx又把它分作两条编码,造成很多重码,要去掉那些奇怪的东西

$win2fcitx mb.txt > zm.txt
转成fcitx要的码表格式
再加上些信息
$vim zm.txt
键码=abcdefghijklmnopqrstuvwxyz
码长=4
[组词规则]
e2=p11+p12+p21+p22
e3=p11+p21+p22+p31
a4=p11+p21+p31+p41
[数据]

$txt2mb zm.txt zm.mb
#cp zm.mb /usr/share/fcitx/data/

参照/usr/share/fcitx/data/tables.conf,加上郑码码表设置
$vim $HOME/.fcitx/tables.conf
中文输入状态按Ctrl+5,可以用了


自动造词不一定合编码,如‘鼠标’各取单字前两码nbfb,但郑码二字词是要首根次根的区码nzfb(词库已经有了)
干脆修改$HOME/.fcitx/tables.conf,不开自动词组了

中易官方网址怎么打不开了。。。出来个114该页无法显示
http://www.china-e.com.cn
现在可以访问了

补个郑码字根表,用网上找到的那个,对照郑码教材里的简繁通用《郑码》基本字根表进行修改,加点颜色
献给郑码初学者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2009-6-10 14:07:06 | 显示全部楼层
海峰五笔的增强版输入法生成器用来逆转大字集郑码不会有那些奇怪的重码,不用cut
diff比较,和前面cut后的结果一致

海峰五笔可打unicode 7万多字,可惜转成gb18030不行
vim以gb18030保存不了
iconv -c -f utf-16 -t gb18030忽略无效字符,结果很多字都丢了,没多大意义了
GB18030应该是可以覆盖Unicode编码空间的,只是不知道iconv对gb18030支持到什么程度,
现在linux能支持到什么程度

"1993年推出GB13000.1-1993标准,即Unicode中的CJK基本集,共收录2.1万汉字。但当时只有unicode编码,无GB编码。
微软在开发中文Win95时觉得GB2312-1980只有6千字不够用,所以对GB2312-1980进行扩充,加入GB13000.1字集,形成所谓的GBK编码。GBK本来只是厂家私自编码,而不是国家/国际标准,但由于微软强势,业内逐渐认同了GBK。
后来微软又逐渐在GBK中增加(Unicode中的)CJK兼容集,使其收录2.7万汉字。但由于这些汉字很多加在用户自定义区,造成了编码混乱。
为了解决混乱状况,国家推出了GB18030-2000标准,承认GBK编码规则,并且提出4字节编码规则,使编码空间增加260万。全面收录(Unicode中的)CJK基本集、CJK扩充集A、CJK扩充集B、CJK兼容集、CJK兼容集扩充等,共收录7万汉字,并修正了GBK中的混乱编码。
2005年推出GB18030-2005标准,只是GB18030-2000一个小补丁,将Unicode空间的编码均映射到GB18030空间。注意不仅是汉字,其他语言字符也都映射,使得GB18030空间等同于Unicode空间。"

海峰的中日韩汉字超大字符集(SuperCJK)通用字体Sun-ExtA.ttf,Sun-ExtB.ttf可以直接拿来用

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-11 00:38:57 | 显示全部楼层
海峰五笔码表转给scim用可以,用utf-8编码
装上scim,换输入法
#im-switch -s scim -z zh_CN

win里imegen输入法生成器逆转成txt
$vim sun86.txt
:set fileformat=unix
:set fenc=utf-8
:wq
去头,只留词条编码,以utf-8编码保存
再用vim打开会看到开头有<feff>,按x删掉重新保存,这是windows里产生的,之前以dos格式打开没显示
$HOME/.vimrc里要有类似这样一行自动检测编码:
set fileencodings=utf-8,gbk,big5,gb18030,utf-16,utf-16le
海峰五笔码表用它带的增强版输入法生成器逆转得到的txt,一个字多种编码是在一行的,如:是j jghu,都要保留且分开,每行一条编码,和fcitx要的txt格式是一样的
win2fcitx转换不行,gb18030的可以正常转换,utf-8不行
工a aaaa变成了aaa 工a a
上网找半天,找不到现成好用的程序,找awk教程,看得云里雾里
直接啃awk manpage,好歹写出个能正常用的脚本,第一次用awk
这程序怎么看起来那么像C,汗。。。本来差点想写C的,觉得太麻烦

win2lin
  1. #!/bin/bash
  2. awk '{
  3.         match($1,"[a-z]");
  4.         if (RLENGTH > 0) {
  5.                 WORD = substr($1,1,RSTART-1);
  6.                 print  substr($1,RSTART)"\t"WORD;
  7.                 for (i=2;i<=NF;i++)
  8.                         print $i"\t"WORD
  9.         }
  10. }' $1
复制代码

$win2lin sun86.txt > scim.txt
[color="Blue"]修正:
$win2lin sun86.txt | sort | uniq > scim.txt
排序然后去掉重复行(修改win2lin脚本也行),fcitx的txt2mb会自动去掉重复,scim不会
[color="Red"]再次更正:uniq会造成很多相似行被当成重复的而错误地丢掉,不能用uniq,直接改程序,在下面
[color="Magenta"]再次更正...sort排序也不对,部分重复行没排到一起
sort,uniq的错误是因为环境变量LC_ALL不对,更正程序在最下面
$vim scim.txt #根据scim的格式要求,头尾加上些信息(见本贴附件sun86_info.txt,码表加在BEGIN_TABLE和END_TABLE之间,ICON图标路径自己改)
#scim-make-table scim.txt -b -o /usr/share/scim/tables/sun86.bin
重启X,可以用了

能支持7w汉字超大字符集的文泉郑码找不到,郑码爱好者网站都上不了,不知怎么了,中易中标网站总算能上了

五笔转到郑码还真是有些难适应,经常用五笔的字根键位打郑码。。。
还是要继续坚持,郑老的郑码还是更加科学些
继续,把郑码码表转给scim用,比较下到底是fcitx还是scim用得更舒服

[color="Red"]win2lin,带排序,去除重复行
  1. #!/bin/bash
  2. awk '{
  3.         match($1,"[a-z]");
  4.         if (RLENGTH > 0) {
  5.                 WORD = substr($1,1,RSTART-1);
  6.                 print substr($1,RSTART)"\t"WORD;
  7.                 for (i=2;i<=NF;i++)
  8.                         print $i"\t"WORD
  9.         }
  10. }' $1 | sort |
  11. awk '{
  12.         if ($0 != pre) {
  13.                 print $0;
  14.                 pre = $0
  15.         }
  16. }'
复制代码
[color="Magenta"]win2lin,正确的排序,去除重复行,上面不对
  1. #!/bin/bash
  2. [color="Red"]export LC_ALL=C[/color]
  3. awk '{
  4.         match($1,"[a-z]");
  5.         if (RLENGTH > 0) {
  6.                 WORD = substr($1,1,RSTART-1);
  7.                 print substr($1,RSTART)"\t"WORD;
  8.                 for (i=2;i<=NF;i++)
  9.                         print $i"\t"WORD
  10.         }
  11. }' $1 | sort -u
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-12 23:47:00 | 显示全部楼层
好不容易找到个文渊郑码,支持超大字集
同样地用imegen逆转成txt,去头,只留词条编码,以unix格式utf-8编码保存
一a av
呵a`jaj ja
部分有拼音: ` 前是拼音
终于明白,郑码码表的后面两字母应该是用于自动造词
fcitx,scim可能用不上,都是要一条编码一行
awk要改改,每行只取一条郑码编码,拼音不留了

wyzm2lin
  1. #!/bin/bash
  2. if [ ! -r "$1" ];then
  3.         exec echo Can not read file: "$1"
  4. fi
  5. export LC_ALL=C
  6. awk '{
  7.         N0 = match($1,"[a-z]");
  8.         if (RLENGTH > 0) {
  9.                 WORD = substr($1,1,RSTART-1);
  10.                 N1 = match($1,"`");
  11.                 if (RLENGTH > 0)
  12.                         print substr($1,N1+1)"\t"WORD
  13.                 else
  14.                         print substr($1,N0)"\t"WORD
  15.         }
  16. }' "$1" | sort -u
复制代码
  1. $wyzm2lin wyzm.txt >scim.txt
  2. $vim scim.txt              #头尾加上必要信息
  3. # scim-make-table scim.txt -b -o /usr/share/scim/tables/wyzm.bin
  4. Invalid line in content: 敻
复制代码
查看原码表文件
敻xiong`
原来只有拼音,下面还有个非常相似的字
夐xiong`rllr rl
上面那个按字型郑码编码应该是rllm,太相似了。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2009-6-15 09:20:13 | 显示全部楼层
上面用ibus-table-zhengma可以直接打出来的

如果你要utf8的郑码码表,直接从ibus-table-zhengma里的zhengma.txt拿就好了,码表已经支持到CJK-C了,构词码则支持到CJK-A。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-15 10:23:29 | 显示全部楼层
Post by acevery;1997983
上面用ibus-table-zhengma可以直接打出来的

如果你要utf8的郑码码表,直接从ibus-table-zhengma里的zhengma.txt拿就好了,码表已经支持到CJK-C了,构词码则支持到CJK-A。

不错啊,
Debian lenny里还没有ibus
squeeze (testing)里有了

发现个问题,部分字只显示一半,要在前面加个空格才能显示完整
如:
UniCode:CJK 统一汉字扩充-C U+2AAFD
不知道其它linux发行版怎样,
海峰五笔V9.4:在hhhhwwww兄的天才努力下,实现了Vista系统IE7保护模式下的直接正常使用,从此告别怪字符和插空格之苦!

还有,这个字的郑码编码竟然是ugbi,文渊郑码和ibus的zhengma.txt都是
应该是ykwz吧,是我的字体错吗?www.zdic.net查也是这个字型
还是因为官方修订CJK-ExtC集?
海峰五笔V9.5:根据官方修订CJK-ExtC集的正式版修订了相应的五笔编码,成为第一个正式支持CJK-ExtC集的五笔软件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2009-6-15 12:24:38 | 显示全部楼层
用郑码的飘过。
我现在暂时用yong输入加上自己從极点转出的大字集郑码。
回复 支持 反对

使用道具 举报

发表于 2009-6-15 22:56:46 | 显示全部楼层
Post by kgnn;1998013
不错啊,
Debian lenny里还没有ibus
squeeze (testing)里有了

发现个问题,部分字只显示一半,要在前面加个空格才能显示完整
如:
UniCode:CJK 统一汉字扩充-C U+2AAFD
不知道其它linux发行版怎样,
海峰五笔V9.4:在hhhhwwww兄的天才努力下,实现了Vista系统IE7保护模式下的直接正常使用,从此告别怪字符和插空格之苦!

还有,这个字的郑码编码竟然是ugbi,文渊郑码和ibus的zhengma.txt都是
应该是ykwz吧,是我的字体错吗?www.zdic.net查也是这个字型
还是因为官方修订CJK-ExtC集?
海峰五笔V9.5:根据官方修订CJK-ExtC集的正式版修订了相应的五笔编码,成为第一个正式支持CJK-ExtC集的五笔软件。


是字体问题,你可以用我修正过的Sun-ExtB.ttf: http://files.getdropbox.com/u/857066/Sun-ExtB.ttf.7z

ibus-table-zhengma里是ykwz呀:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-16 00:12:25 | 显示全部楼层
Post by acevery;1998244
是字体问题,你可以用我修正过的Sun-ExtB.ttf: http://files.getdropbox.com/u/857066/Sun-ExtB.ttf.7z

ibus-table-zhengma里是ykwz呀:


原来都是字体惹的祸
用你的字体后,不用补空格了

但是你的字型和http://www.zdic.net查到的字型不一致
海峰网站的unicode5.4字体有半字的问题,但是和http://www.zdic.net查到的字型是一致的

闹不清楚了,是哪个的字体不对
猜测是因为UniCode的修订,没有全部跟进,所以造成字体不符

图中,大字是zdic网站的图片,右边小字是你的字体显示效果,不一致

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-6-16 00:54:07 | 显示全部楼层
你对字体的修正是不是有点投机取巧的?
这个图中,左边是rxvt-unicode,用X核心字体,没有Sun ExtB,不能支持显示的汉字,都是框框,有半字问题的汉字是半框(一个英文字符位),如果以后修正了,都是一个完整汉字字符位了,还用你这个字体
是不是又会出现往右偏的问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表