关于建立网上开放式共享词库的一些设想

[b]下面的文章是我一晚上头脑过热后成果,本来贴在scim python的google讨论组里:
http://groups.google.com/group/scim-python/browse_thread/thread/74109486acd43fe6[/b]

说实话,我接触LINUX的时间并不长,大概也就一个月左右。而接触编程的时间也不过半年(大一,计算机专业,学校教的)
在Linux下,输入法一直是一个令人头疼的问题,无意中看到Huang大大开发的scim-python输入法让我很兴奋。
但是这个输入法的词库奇缺确实令人惋惜。在经过一夜的思考后,我有了建立网上共享词库的想法。
具体的细节如下:

词库来源:
网上共享词库首先应该先收集现有的免费词库,并且最好能够有比较好的词频,这应该是基础。
然后可以由网民们自行添加词汇到词库里,借助广大网民的力量拓展词库。
细节:
这个词库要使用网络编程语言。PHP+MYSQL应该是个不错的选择。
数据库中,最简单的情况下,应该有三列。
词汇,拼音,词频。
当用户提交单词的时候,先查询词库中是否有这个词汇,如果有的话,则自动在词频上+1(自增词频功能可选,可由用户决定是否开启。),没有的话就新建一
行,加入这个词汇。
应该要支持批量加入词汇,例如从txt或者dic文档读取,这样用户就可以省去一个个手动输入的麻烦。
文档的规范:
我研究过主流输入法的用户词库导出文本的格式:

搜狗拼音输入法2.0的导出文本为以下格式:
‘a’bi’di’yu 阿鼻地狱 1 0.000000
[上引号]拼音[空格]中文[空格]词频[空格]0.0000000(不知道是干什么的。)
搜狗拼音在其多音字的处理上有些小问题,详细会在后面说明

google拼音输入法的格式为:
阿鼻地狱    126     a bi di yu
中文[Tab]词频[Tab]拼音(拼音间用空格隔开,最后也有空格)

紫光拼音输入法
紫光拼音输入法的导出词库和scim-python的词库是最像的。
阿鼻地狱    a’bi’di’yu      126
中文[Tab]拼音[Tab]词频(拼音间以’分割)

无拼音有词频文本
有中文,有词频但是没有拼音,搜狗拼音的互联网词库就这个模式。
如:
我     8000841
中文[Tab]词频

无拼音无词频文本
仅仅有中文,没有拼音和词频
如:
我们
我们的
他们

网上共享词库应该可以导入和导出以上格式的文本。
并且能对不同格式的文本进行整理,使其符合网上词库的标准模式。前期的话主要是靠用户来分辨自己要上传的词库属于那种,后期最好能做成自动识别的。

关于词频:
词频在输入法中占有举足轻重的地位,因此建立好的词频也是关键。
用户在添加新词的时候,先查询词库内是否有此词汇,有则自动在词频上加一。
管理员有权限更改词频
对于一般用户上传的批量增加单词的txt文档,忽略批量增加单词的txt文档中的词频一项。如果遇到有重复的单词,仅仅是在原始词频上+1(可选)。

关于多音字
上面说过搜狗拼音输入法对多音字的处理不同于其他输入法。
他会将这个单词的所有发音组合都罗列一遍。
例如:
‘dan’yu 单于 1 0.000000
‘chan’yu 单于 1 0.000000
‘shan’yu 单于 1 0.000000
而其他的输入法规定每隔单词只能有一个固定的发音(例如紫光)。
关于数据库中如何处理多音字,我也有想法,增添一列来确定那个是正确的发音。即:
中文,拼音,词频,是否正确发音
例如:
好人 hao’ren 120 1
单于 dan’yu 120 0
单于 chan’yu 120 1
单于 shan’yu 120 0
这样对于某些只能有一个固定的发音的输入法,输出时仅输出正确发音的哪一项。
上面的就只输出
好人 hao’ren 120 1
单于 chan’yu 120 1
多音词的词频是否应该一样,这个问题有待探讨。

关于自动生成拼音
导入程序应该可以自动生成拼音(多音字则罗列),这样可减轻用户的劳动。且对于“无拼音有词频文本”和“无拼音无词频文本”的导入,这项功能也是必须
的。
对于多音字来说,如果词库表中已经存在了用户那就和普通词汇一样处理
如果尚不存在,那么就由用户选择正确读音并提交。
自动拼音不适用于:
特殊拼音
有拼音的导入文件(可由用户或者管理员决定。)

关于特殊拼音
某些特殊拼音例如:
o(∩_∩)o… ha’ha
对于这部分单词,不使用自动拼音生成,而是由用户决定其读音并提交。

关于词汇长度
这个暂时还没有什么好的想法,主要还是看大家的意见,是否要支持超长词汇功能。但一般情况下不应超过255个字(可变)

关于分类词库
这个问题早期并不需要考虑太多,但程序完善后,我希望能够加入这个功能。使用类似于tag的技术应该可以解决一个词有多个类别的问题。

关于修正词汇
由于种种原因而导致的词汇拼音错误,或者多音词正确读音标注有误,可以申请修改词汇。经管理员认可后,由管理员进行修改,应支持批量修改及文件导入。

关于删除词汇
可能用户不小心添加或着因为种种原因需要删除词汇的,可以向管理员发出申请。(有一个专门的删除词汇申请页面),可以是一个词,也可以是一组词,甚至可
以直接提交要删除词的txt文件列表
删除词的txt文件列表应采用无词频无拼音的格式。
经过管理员批准审核后,由管理员删除(批量删除词汇页面,仅管理员可见)

关于和scim-python的关系
这个问题很麻烦,因为涉及到用户隐私和词频等问题。
用户可以选择只共享词频,即只上传每周词汇词频的增量,对于数据库中没有的词,则忽略,而不作为新词添加到数据库。
或者用户可以开启共享词库,每周的词频增量和新词都上传,数据库中没有的词则作为新词添加。
为了维护用户的隐私,可以由用户设定共享词库黑名单,黑名单内的词不会被上传到网上词库。

关于输出
为了减轻服务器压力,减少流量,不支持用户实时生成词库文本。
由系统每周自动(或管理员手动)生成一次词库(各种输入法版本的),提供给用户下载。
词库可以有
完整版(所有单词)
精华版(仅词库中词频靠前的词)
本周新词(这一周以来提交的新词)
本月新词(这一月以来提交的新词)

关于服务器
最好能够使用独立的服务器或者至少是合租的服务器。
因为可能在批量添加新词的时候,处理器占用率可能会比较高
至于服务器的来源和资金来源还有待探讨。不过,最主要的是先把程序写出来。

关于版权
版权方面我不是很懂,免费适用于非商业用途,对于商业用途的适当收取费作为维持服务器和网站的资金?

关于防广告和恶意添加
可以采用会员制模式,只有注册成为会员才能提交新词,且应有验证码
未注册会员可下载,但不可提交新词。
对于恶意添加的用户可以采用封号或者封IP的方法。

暂时就先想这么多了,希望有能力的网络编程人员可以加入。
我学习PHP+MYSQL的时间不过一个星期,仅靠自己很难完成如此大的计划。

1 comment — post a comment

guanjunz

sp
另外一方面,我觉得开放词库的缺失是国内科研机构失职的表现。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注