eaglet

本博专注于基于微软技术的搜索相关技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
KTDictSeg 分词组件1.3版本 部分算法讨论 -- 中文姓名识别和未登录词识别
作者 肖波
    中文姓名识别和未登录词识别是中文分词中的难点,具体为什么是难点,很多文章都有叙述,这里不再多讲。主要介绍一下
1.3版本是如何对中文姓名和未登录词进行识别的。
    中文姓名识别
    中文姓名千变万化,我们不可能在字典中把所有的中文人名都列出来。1.2版本对中文人名进行了比较复杂的判断,但效果依然不理想。所以1.3版本干脆简化了算法。1.3版本的算法主要基于中文人名的前缀和后缀的统计来实现。众所周知,有些词会经常出现在人名的前面或后面,比如老师,师傅,总统,主席等。我先从人民日报1998年中文语料库以及我自己从新浪和中华网抓取的3万多篇新闻正文(约2000万字) 中统计所有人名的前后缀出现频率。
    分词时首先判断某个词的前一个(或两个)字是否是中文的姓,如果是再看它的前后缀出现频率是否超过一定的阈值,通过这种方式来来确定当前要分析的词是否是姓名,并且在确定姓后可以通过判断姓后面跟的字在后缀中出现的频率来确定是单字名还是双字名。比如 局长张三同志,局长和同志分别经常出现于前缀和后缀,通过这两个词的定位就可以确定张三是一个中文人名,而不是张三同。当然这种方法还是有较大缺陷的。比如 大/王三/炮轰/媒体,如果前面分词分成了 大王/三炮/轰/媒体,那么中文姓氏就不是出现在单词的首字位置,需要把前面的词拆开分析,1.2版本的人名识别做了这个工作,但效果也并不非常理想。所以1.3版本就没有再做这方面的判断,而是采用了一个变通的方式,就是将分出来的人名做了词频统计,如果这个人名统计值超过一定范围(人为设定的)则将其自动或通过手工加入字典。就拿前面的王三说事,在前面句子中确实无法分成王三这个人名来,但在其他句子中,并不一定存在这种歧义,而且存在歧义的句子毕竟还是少数,所以当这个人名出现次数很多时,我们就将它作为一个常用人名加入字典,这样,下次再分上面的句子,就可以分出王三这个人名了。
    未登录词识别
    1.2版本对未登录词识别主要是通过将分词结果中连续的未在字典中出现的单字组合起来来识别的,1.3版本没有对这块进行修改,但加入了统计功能,即自动将前面分出来的未登录词(可能并不是词)的出现频率进行统计,对统计值大于一定阈值的未登录词自动或手动加入字典,这样做,分词组件就具备了学习功能,并会越分越准确。

KTDictSeg 分词组件1.3版本 新增功能列表及下载位置


    1.3版本的AutoStudy开关用于打开自动学习功能,如果设为true,则分词组件会对单词词频,未登录词词频,姓名前后缀的词频,未登录姓名的词频进行统计分析。
    时间有限,就先写这么多吧