基于python的分词算法的实现(2) - 字典的选择

本文探讨了在缺乏现成字典的情况下,如何构建包含单词和短语的字典来提升分词算法的准确性和效果。通过分析现有字典的局限性,提出了从搜索引擎sogou获取数据来构建字典的方法,并详细阐述了构建过程和预期目标。

弄清楚了算法的问题,下面就着手解决第一个困难:字典。根据前面的算法描述,我们主要需要的是包含连续出现的两个词概率的词连接字典,或者称为短语字典。同时,其实还需要一个包含所有词的单词字典。单词字典有两个作用,首先我们要知道一个句子里面有哪些字可以组成词,其次对于一些没有包含在词连接字典里的短语,我们需要估计短语的大致概率。

ictclas的实现里就包含这两类字典,分别被称为coredict(单词字典)和bigramdict(短语字典)。我统计了一下,ictclas的字典里拥有85553个词和384295个短语,词的数量上还可以,短语的数量偏少。更大问题是它的短语的平均统计频率仅为2.6次(词是10次左右),这使得依赖短语概率的算法的可信度较低。ictclas网站上有一个例子是对“他说的确实在理”这句话进行分词,结果得到“他|说|的|确实|在|理”。这个结果给人的感觉是单个字的词太多,如果说“他”,“说”和“的”都单独成词可以接受的话,“在理”被分成两个词就有点不“在理”了。

仔细分析ictclas分词的过程可以发现,得到上述结果的原因是,在bigramdict词库里包含一个“理|末##末”的短语(末##末是ictclas用来标记句子末尾的特殊词),而由于它的存在,使得分词算法“十分自信”的认为“理”应该单独成词。于是一个单词字典里包含的词“在理”就这样被忽视了。或许是我使用共享版的原因,ictclas的商业版字典其实更充实也未可知。

既然没有现成的字典可以使用,就只能自己构建一个字典。提起汉字字典,我首先想到就是sogou的字典(谷歌输入法事件受害者),上sogou的网站上一看,竟然有意外的发现,就是所谓的sogou实验室(http://www.sogou.com/labs/),这里面含有大量的sogou用于处理搜索和其它汉语相关的应用的数据。其中互联网词库和全网新闻数据看起来不错。前者是sogou从互联网环境中获得的词汇统计信息,后者是sogou从几大新闻网站抓取的数据。除此之外可以利用的还有sogou拼音输入法中的用户词库,可以补充某些领域的专有名词。素材准备完毕,let's rock!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值