转载自:http://fay19880111-yeah-net.iteye.com/blog/1464110
ictalas4j用到的字典主要是下面的三个:coreDict、biGramDict、nr。coreDict记录了6768个词块,里面有对应的词频和句柄(用于词性标注);biGramDict里面记录的是词和词之间的关系,也就是相邻两个词一起出现的频率;nr记录的是中文人名角色标注,该标注来自对人民日报语料库训练的结果。
了解了其应用的字典后,看一下ictclas4j的大致流程。
首先,把整片文档分割成一个个的句子,对分割后的句子进行原子切割。
其次,查找coreDict字典进行粗略的分词,所有可能的分词结果都存储在一个二维链表里面。该二位链表的每个节点中记录了词性(可能包含多个)、词内容、词频。
然后,查找biGramDict字典,对第二部的结果处理,构造新的二维链表,该二维链表的节点中记录了两个词之间的关系值(权重,衡量俩个词同时出现的概率),通过一个计算公式,计算出两个词的平滑值。
接着,进行初次切分(通过最短路径算法,而权重即为上一步计算出的平滑值)。
接着,进行人名识别了,这应该算是ictclas4j不同于其他分词工具的特征吧,其他的分词工具基本上不处理未登录词,但是未登录词对分词的结果影响还是比较大的。该部分采用的是基于角色标注的算法,通过查找nr字典,最终匹配出人名。(本文只是介绍大致流程,具体的人名识别请阅读 张华平、刘群的论文《基于角色标注的中国人名自动识别研究》)。
接着,处理地点等信息(个人感觉ictclas在处理地点信息时识别率不高,主要是其特征不像人名识别那样紧紧有15中模式匹配模型,分词在切分时并不能准备的切分出机构名称)。
最后就是优化优化结果,添加词性(对于词性,前面已经包含相应的值,在调整相应的分词后调整对应的词性即可)。