弄清楚了算法的问题,下面就着手解决第一个困难:字典。根据前面的算法描述,我们主要需要的是包含连续出现的两个词概率的词连接字典,或者称为短语字典。同时,其实还需要一个包含所有词的单词字典。单词字典有两个作用,首先我们要知道一个句子里面有哪些字可以组成词,其次对于一些没有包含在词连接字典里的短语,我们需要估计短语的大致概率。
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!
基于python的分词算法的实现(2) - 字典的选择
最新推荐文章于 2022-07-01 17:36:58 发布
