LinuxSir.cn,穿越时空的Linuxsir!

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

为fcitx开发词库,征网友的帮助:)

[复制链接]
发表于 2006-7-18 10:51:51 | 显示全部楼层 |阅读模式
大家知道,fcitx目前使用的拼音佳佳词库,其协议的限制性很高。fcitx附带的拼音佳佳的词库只允许用于fcitx本身,而且不允许修改。对于第一个限制,我觉得不是很大的问题,但是对于第二个限制,这个严重地限制了我们的词库。而且,在自由/开放/开源软件世界里,很重要的一个权利是修改和发布权,这样大家刻有共同协作,最后做出来的产品远远比原来的东西好多了。

我犹豫了一段时间,因为制作一个拼音词库工作量极大,自己一个人做可能要很长时间才可以完成,到完成的时候,可能人类都已经飞到火星去了……(有点夸张哦,呵呵)但是,我还是自己开始写了,虽然写得不多,但是有一定的基础了。

后来,我是想,如果我能把我打过的词取出来,然后加到我的词库里,那很好啊:)于是我就开始写了一个小程序,用来读取用户词库里的内容,这就是readPYMB。然后,我想把这个数据转化为一个拼音词表,在fcitx里是以.org后缀表示的。我在这个过程中,写了readPYBase(用来读取pybase.mb的内容)和mb2org(用来转化的)。

后来,我又想了,有这些工具,为什么不收集网友们的用户词库呢?所以我现在就征了:)

大家可以看我的附件里的fcitx-phrase.tar.bz2文件,里面是我自己写的词表,用mb2org转化的结果差不多也是那样,虽然没有排序和注释。而3tools.tar.bz2是readPYMB、readPYBase、mb2org三个工具的代码,大家可以用mb2org转化你们的用户词库。

我只需要大家的一点点时间,做以下几个东西:
1、下载3tools.tar.bz2,在生成的3tools/目录下运行make,这样就可以编译了。注意,你要有x的devel头文件才可以编译。
2、运行mb2org,一般的运行方法是
  1. ./mb2org ~/.fcitx/pyusrphrase.mb | LESSCHARSET=utf-8 less
复制代码

这样,mb2org将把你的用户词库转化为词表,然后用less预览。
3、如果你没有发现问题的话,你可以把它的结果放到一个文件里:
  1. ./mb2org ~/.fcitx/pyusrphrase.mb > my_user_phrase.org
复制代码

4、然后,你可以把my_user_phrase.org文件压缩,发到我的邮箱,我的邮箱是<williampoetra@gmail.com>

目前,很多软件都有这个协议,那个协议,这类的。所以,我们要玩得安全,注明这些词表的协议。请大家在你发给我的压缩文件里,注明改数据为Public Domain(写在README文件或者COPYING文件),意思是每个人都有权利对这个数据干任何事情。我也会把最后的词库放在Public Domain里,大家要用它干什么都可以。

关于拼音佳佳的协议,大家不用怕,因为拼音佳佳当作系统词库的时候,用户词库里不会有拼音佳佳的内容。所以,大家发给我的词表不会侵犯拼音佳佳的产权。

另外,大家在预览自己的词表里,如果有某些词可能不愿意公开(比如你写一个比较长的词,“亲爱的,我爱你……”,等等),你们可以先把他放在my_user_phrase.org文件里,然后手工编辑那个文件,把那一行删除。确人没有那中词了,然后发给我。

[edit 2007/06/01]儿童节快乐!我上传了新的版本,看来这个贴子有点安静,可能是因为我没上来。。。

本帖子中包含更多资源

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

x
发表于 2006-7-18 13:08:39 | 显示全部楼层
wpyh你好

开发开源词库也是我以前的一个想法(参见http://wenq.org/forum/viewtopic.php?t=207 )。前一段曾经自己写了一个小的perl+DBI+mysql的代码,做了一个开放式词库录入的页面,这个页面参见:

http://wenq.org/dict/index.cgi

这个界面支持用户输入单个的词语,或者一次输入多个词语(每行一个),并且自动删除重复的词汇。用户还可以通过关键字搜索现有的词组。

我已经把几个public domain的汉语词汇表导入了,主要来源为
http://kamares.ucsd.edu/~arobert/hanziData.html

现在wordzilla中已经有95588个汉语词组。我还打算今后也像我们的文泉驿点阵字体一样,每天dump一个最新的词语列表,提供给需要的项目使用。

另外有两个工作我认为还需要花费一些脑筋。一个是词频。词库可以弄得很多很全,但显示时最好按照词频顺序显示,这样才用户才不会费眼神。这方面可能需要用户来帮忙找出常用词并提高优先级别;另外一方面是将词语转换为对应的拼音,这个倒可以实现自动化,可以通过unicode的unihan数据库进行转换,这方面可能需要写一些代码。

这个项目在此之前我没有正式公布,不过既然wpyh有这个想法,我想我们可以共同来完成这个工作。我想听听你的想法和要求。
回复 支持 反对

使用道具 举报

发表于 2006-7-18 13:22:43 | 显示全部楼层
我认为输入法,只需要一些简单的词库,再配合从 一些巨型的搜索引擎拿些比较薪的词就可以了。靠自己储存薪词,是非常费劲的工作。靠搜索引擎的工程师为你提供词是比较可行的方法。

看了 FangQ兄 的词库,老实说,里面的词质量的确不高,
回复 支持 反对

使用道具 举报

发表于 2006-7-18 13:26:12 | 显示全部楼层
事实上,如果你知道搜索引擎的关键字列表在哪里的话,一个拷贝粘贴就可以添加进wordzilla了。
baidu/google好像没有这样的页面

另外你所说的“词质量”是指什么?
回复 支持 反对

使用道具 举报

发表于 2006-7-18 14:36:52 | 显示全部楼层
我个人认为,输入法里面的词组,越短越好,例如:
奔走呼号  不如 只收 奔走、呼号 算了。
又例如:不知深浅  不如只收 不知、深浅 算了。

但又不能一概而论:例如 百业萧条 ,就当然要 百业萧条, 百业, 萧条都收。

我看了 Fang Q 的词裤,里面太多质量不太好的长词,所以说质量不高。
对不起。
回复 支持 反对

使用道具 举报

发表于 2006-7-18 14:39:05 | 显示全部楼层
我个人认为,输入法里面的词组,越短越好,例如:
奔走呼号  不如 只收 奔走、呼号 算了。
又例如:不知深浅  不如只收 不知、深浅 算了。

但又不能一概而论:例如 百业萧条 ,就当然要 百业萧条, 百业, 萧条都收。

我看了 Fang Q 的词裤,里面太多质量不太好的长词,所以说质量不高。
对不起。
回复 支持 反对

使用道具 举报

发表于 2006-7-18 21:57:34 | 显示全部楼层
这个好办,首先把词频高的先选出来,在剩下的词组中作冗余性分析,即如果词组A是以词组B开头或者结尾,A就修改为A-B,反复几次即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-19 12:51:27 | 显示全部楼层
刚上来,看到那么多回复^_^
好的,我晚上下载那些词库吧,这样做一个大的词库比较好。

关于词库,我觉得一起做比较好吧,这样大家都不浪费时间了。我刚才看了看FangQ的词库,我觉得如果可以分类(像我那样分类)的话,效果比较好,这样我们一想到某个词的时候就可以直接分类,而且某些输入法不是有分类的词库嘛(希望fcitx将来也有这个功能,呵呵)。一个词可以属于两种或更多类中。

我原来的想法是用find+grep+sort+uniq实现各类的合并,就是这样:
grep `find -name \*.org` -v -e '^$' -e '^#' | sort | uniq > pyPhrase.org
这样就可以有注释的。而我还没想过用mysql这样的(db)来保存这些词,因为我个人喜欢简单的文本文件,呵呵。不知道你觉得哪一个好?我是觉得mysql有点overkill了……

词频的问题,我没想过,我觉得这是词库转向人性化的部分,这两个东西分开处理吧。

词语转化为拼音,这必须手工做的,因为很多字都有很多音的。我的mb2org程序原来也是这样,不能明确地确定一个词第一个字的拼音(是因为我没好好读Yuking的代码……)。后来可以了,但是这是因为pyusrphrase.mb里面的数据,所以光有词语一般情况下是无法得到唯一的拼音。

关于长词短词的问题,我觉得无所谓,但是有些词还是会出现这种现像:
1、计算
2、计算机
如果我们只存“计算”的话,打“jisuanji”的时候就未必得到“计算机”了……

对了,关于协议,FangQ的词库是Public Domain的吗?我觉得PD比较好,因为PD的话大家都可以用。我个人写的软件一般是GPL的,但是词库是数据嘛,PD的话大家(包括商业软件开发者)都可以用。
回复 支持 反对

使用道具 举报

发表于 2006-7-19 14:23:44 | 显示全部楼层
不一定大家都希望把东西放到public domain,那样子完全放弃版权,其实还可以考虑 creative common。
回复 支持 反对

使用道具 举报

发表于 2006-7-19 23:36:38 | 显示全部楼层
一个好的输入法,不光是要有一个好的词库。关键是要有一个好的算法。算法决定了词库里面要包含的信息。比如为了支持基于语义分析的整句输入法,词库里面就要包含词语的词性信息。
如果用基于统计的整句算法,词库里面可能还有包含词与词之间的同现概率。

另外,完全自动标注拼音是基本不可行的,因为多音字太多了。必须手工剔除那些错误的拼音组合。举例来说,“便宜”读作 pian2yi2, 但是 “方便”却读作 fang1bian4。bian4yi2 和 fang1pian2 都不对。这样的问题是自动标注最大的障碍。
回复 支持 反对

使用道具 举报

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

本版积分规则

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