好久没写点什么了:(
鉴于目前很多分词组件不开源,本人决定自行编写中文分词组件。
以下为 ----Klion 原创
首先贴个项目设计概要:
从没有接触过中文分词,以前觉得很高深(可能的确很高深),自己只会汉语说话、写点小文章,没有研究过汉语 现在要用了,前天开始,初步研究了下,设想如下。
我一直喜欢简洁,下面的话就用问答形式来说明下我的分词程序设计的要点:
1、 首先,中文词典的结构如何设计?
词库的保存格式:采用二叉树结构(最简单的格式是:根、左子女、右兄弟),每个节点存放一个字,从根节点开始的每个兄弟节点到该节点的所有左子女节点直到叶节点组成一个词。(这句话比较难理解,谁叫我表达能力有限呢)来个图吧:
看过图应该是有所理解了吧,(这个是初步设想,自我感觉还有可以改进的地方,以后改进了重写:p)
每个节点包含如下内容:
1) 字(主角啦)
2) 字权重(咱们取他的实际文章和环境中出现的频率 ln值,这个决定每个字离根节点的距离)
3) 左子女节点指针(指向叶节点)
4) 右兄弟节点指针(指向兄弟节点)
5) 当前所处的深度(从根节点到当前节点的路径长度)
6) 查询出现的次数。
2、 如何自动将更多的词语加入词典?
可以利用从web上抓取到的各种文章来进行提取,提取的方法是 和现有的词库进行遍历,将不存在的词加入词库,具体算法可以参考 LCS算法。
还有就是在查询的同时添加新发现的词(没有在词库里查询到的词)也被加入到词库里。
3、 如何消除或避免歧义?
正向、反向匹配,看得分高低来决定选用哪种切分结果
4、 如何智能处理同义词?
目前好象没有偷懒的办法
5、 如何处理数字、标点、英文字母?
预处理,按照通用方法处理
6、 如何来查询
1) 全词优先查询
2) 分词切分查询
7、 如何让他更智能?
和用户通过输入法和一些桌面小游戏来为我们丰富词库,目前有的:比如 搜狗、填词游戏