LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 06-07-18, 10:51 第 1 帖
wpyh
 
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 57
  精华: 1
 

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


大家知道,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,一般的运行方法是
代码:
./mb2org ~/.fcitx/pyusrphrase.mb | LESSCHARSET=utf-8 less
这样,mb2org将把你的用户词库转化为词表,然后用less预览。
3、如果你没有发现问题的话,你可以把它的结果放到一个文件里:
代码:
./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]儿童节快乐!我上传了新的版本,看来这个贴子有点安静,可能是因为我没上来。。。
上传的附件
文件类型: bz2 3tools.tar.bz2 (24.1 KB, 28 次查看)
文件类型: bz2 fcitx-phrase-20070529.tar.bz2 (27.9 KB, 29 次查看)

此帖于 07-07-14 12:48 被 wpyh 编辑. 原因: 邮箱
  wpyh 当前离线   回复时引用此帖
旧 06-07-18, 13:08 第 2 帖
FangQ
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 74
  精华: 0
 

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有这个想法,我想我们可以共同来完成这个工作。我想听听你的想法和要求。
  FangQ 当前离线   回复时引用此帖
旧 06-07-18, 13:22 第 3 帖
ylam
 
 
 
注册会员  
  注册日期: Jul 2006
  帖子: 23
  精华: 1
 

我认为输入法,只需要一些简单的词库,再配合从 一些巨型的搜索引擎拿些比较薪的词就可以了。靠自己储存薪词,是非常费劲的工作。靠搜索引擎的工程师为你提供词是比较可行的方法。

看了 FangQ兄 的词库,老实说,里面的词质量的确不高,
  ylam 当前离线   回复时引用此帖
旧 06-07-18, 13:26 第 4 帖
FangQ
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 74
  精华: 0
 

事实上,如果你知道搜索引擎的关键字列表在哪里的话,一个拷贝粘贴就可以添加进wordzilla了。
baidu/google好像没有这样的页面 :(

另外你所说的“词质量”是指什么?

此帖于 06-07-18 13:52 被 FangQ 编辑.
  FangQ 当前离线   回复时引用此帖
旧 06-07-18, 14:36 第 5 帖
ylam
 
 
 
注册会员  
  注册日期: Jul 2006
  帖子: 23
  精华: 1
 

我个人认为,输入法里面的词组,越短越好,例如:
奔走呼号 不如 只收 奔走、呼号 算了。
又例如:不知深浅 不如只收 不知、深浅 算了。

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

我看了 Fang Q 的词裤,里面太多质量不太好的长词,所以说质量不高。
对不起。
  ylam 当前离线   回复时引用此帖
旧 06-07-18, 14:39 第 6 帖
ylam
 
 
 
注册会员  
  注册日期: Jul 2006
  帖子: 23
  精华: 1
 

我个人认为,输入法里面的词组,越短越好,例如:
奔走呼号 不如 只收 奔走、呼号 算了。
又例如:不知深浅 不如只收 不知、深浅 算了。

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

我看了 Fang Q 的词裤,里面太多质量不太好的长词,所以说质量不高。
对不起。
  ylam 当前离线   回复时引用此帖
旧 06-07-18, 21:57 第 7 帖
FangQ
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 74
  精华: 0
 

这个好办,首先把词频高的先选出来,在剩下的词组中作冗余性分析,即如果词组A是以词组B开头或者结尾,A就修改为A-B,反复几次即可。
  FangQ 当前离线   回复时引用此帖
旧 06-07-19, 12:51 第 8 帖
wpyh
 
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 57
  精华: 1
 

刚上来,看到那么多回复^_^
好的,我晚上下载那些词库吧,这样做一个大的词库比较好。

关于词库,我觉得一起做比较好吧,这样大家都不浪费时间了。我刚才看了看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的话大家(包括商业软件开发者)都可以用。
  wpyh 当前离线   回复时引用此帖
旧 06-07-19, 14:23 第 9 帖
windrose
 
windrose 的头像
 
 
★☆★督导☆★☆  
  注册日期: Oct 2002
  帖子: 6,296
  精华: 38
 

不一定大家都希望把东西放到public domain,那样子完全放弃版权,其实还可以考虑 creative common。







__________________
Free as in freedom, slack as in Slackware.
欢迎访问 http://slack.linuxsir.org
个人blog:http://blog.tuxfans.com/
RSS:http://feeds.feedburner.com/windroseblog
  windrose 当前离线   回复时引用此帖
旧 06-07-19, 23:36 第 10 帖
james_su
 
 
 
注册会员  
  注册日期: Oct 2002
  帖子: 2,369
  精华: 18
 

一个好的输入法,不光是要有一个好的词库。关键是要有一个好的算法。算法决定了词库里面要包含的信息。比如为了支持基于语义分析的整句输入法,词库里面就要包含词语的词性信息。
如果用基于统计的整句算法,词库里面可能还有包含词与词之间的同现概率。

另外,完全自动标注拼音是基本不可行的,因为多音字太多了。必须手工剔除那些错误的拼音组合。举例来说,“便宜”读作 pian2yi2, 但是 “方便”却读作 fang1bian4。bian4yi2 和 fang1pian2 都不对。这样的问题是自动标注最大的障碍。
  james_su 当前离线   回复时引用此帖
旧 06-07-19, 23:38 第 11 帖
james_su
 
 
 
注册会员  
  注册日期: Oct 2002
  帖子: 2,369
  精华: 18
 

引用:
作者: ylam
我个人认为,输入法里面的词组,越短越好,例如:
奔走呼号 不如 只收 奔走、呼号 算了。
又例如:不知深浅 不如只收 不知、深浅 算了。

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

我看了 Fang Q 的词裤,里面太多质量不太好的长词,所以说质量不高。
对不起。
对于基于词语的输入法,从搜索引擎中抓取数据也许可行。但是对于整句输入法,这绝对是不可行的。
  james_su 当前离线   回复时引用此帖
旧 06-07-19, 23:46 第 12 帖
wpyh
 
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 57
  精华: 1
 

嗯,我看了CC的Attribution License。我觉得没必要用这个,直接用BSD得了。但是,我有一个更好的方法:如果怕有人(比如说商业开发者,或者某某人),那么我们可以采取一个自己的协议:

Copyright (c) 2006 xxx

This is a copyrighted work. You are free to do anything with this work, provided that you meet all the following requirements:
1. You choose an Open Source license approved by the OSI (www.opensource.org), and
2. You adhere to all its terms and conditions.
  wpyh 当前离线   回复时引用此帖
旧 06-07-20, 11:56 第 13 帖
FangQ
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 74
  精华: 0
 

授权我还没有决定,不过肯定是开放的。如果需要很多劳动的话(比如分类和词频),我倾向于把那些部分使用GPL或者BSD。其他简单的词汇部分,CC,BSD或者public domain应该都可以吧。

自动注音对于一字多音的问题只能是后面进行词组匹配,统一替换了,先用最常见的读音生成底稿。好在这些常见容易读错的汉字google一下应该能找到不少(比如http://www.zgma.com/wenxuebaoku/yongcuozi.htm),这样统一整理几次就应该至少"可用"了。

开发一个自动注音的程序其实也是很有用的,每个汉字指定一个默认读音,然后再添加一组修订规则,每个规则包括一个特征串,特征串的位置(在这个汉字的前面或者后面),该汉字的读音和声调。
  FangQ 当前离线   回复时引用此帖
旧 06-07-20, 12:00 第 14 帖
FangQ
 
 
 
注册会员  
  注册日期: Jun 2005
  帖子: 74
  精华: 0
 

引用:
作者: wpyh
因为我个人喜欢简单的文本文件,呵呵。不知道你觉得哪一个好?我是觉得mysql有点overkill了……
mysql只是一个数据的在线存储方式,真正操作还是要dump成文本后才来做。perl+mysql只提供在线录入、搜索的界面。
  FangQ 当前离线   回复时引用此帖
旧 06-07-20, 20:39 第 15 帖
wpyh
 
 
 
注册会员  
  注册日期: Dec 2004
  帖子: 57
  精华: 1
 

哦,这样,我以为最后的词库也是mysql数据库格式的……如果可以dump成text好:)

开发那种自动拼音的程序我觉得不是很容易(做完整的难,往往是10%的bug占了90%的开发时间,但是做简单的不是很难),不如直接输出所有可能的拼音,然后手工整理。

你是说,简单的.org格式的可以Public Domain,然后“加工”后的是BSD/GPL?这个可以啊,我没意见,因为我一般也用的是GPL软件。但是,我觉得可能有些人觉得GPL束缚性太强了,如果是GPL的话,空怕很多人都没有得到利益。或者,可以这样:GPL+exception,exception是让使用者可以随意使用该词库,商业软件也可以,但是必须提供源代码(也就是说原形的词库),类似arphic font的协议吧。
  wpyh 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [禁用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:04


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org