ICTCLAS代码学习笔记之CUnknowWord类

来源:互联网 发布:深度触网 知乎 编辑:程序博客网 时间:2024/06/05 16:14
未登录词识别(CUnknowWord类)
ICTCLAS的未登陆词识别是基于角色标注的。具体的算法大家可以参照张华平等人03年的文章<Chinese Named Entity Recognition Using Role Model>。算法的基本思想就是,首先定义一些与命名实体类型相关的角色,针对中国人名可能就有“姓“、“两字名的第一个字”、“两字名的第二个字”、“名字的前缀”、“名字的后缀”等等,然后通过一个已标注了角色的训练语料库进行学习,得到一些显著的角色串模板,例如“姓“+“两字名的第一个字”+“两字名的第二个字”是一个人名等,同时得到每个字为某种角色的概率。通过上述两组信息来进行未登陆词的识别。
CUnknowWord类的成员变量有四个成员变量,其中前三个是私有成员变量。m_roleTag是一个CSpan类的标注器,用于标注角色;m_nPos为此类的一个词性标签,即该类是一个通用的未登陆词的识别类,如果是用于识别人名m_nPos就是相应的人名对应的词性标签,如果用于识别地名,就是地名对应的词性标签等。另外m_sUnknowFlags是一个标记数组,记录着m_nPos对应的类相应的类标签,例如如果m_nPos为人名,则m_sUnknowFlags的值就是“未##人”,诸如此类。公有成员变量m_Dict是一个词典类对象,存储的为该类的词典。
Configure函数就是一个读配置文件的函数,要注意的就是传入的第二个参数type确定了该对象要识别的类别,即用于确认m_nPOS和m_sUnknowFlags的值,在这个版本中未登陆词只处理了人名(中国人名和外国人名)以及地名。
IsGivenName是专门为人名类写的,用来判断传入的字符串是否为人名。传入的第一个被当作姓,
后面的一个字被当作名。通过内置的未登陆词词典和角色标注结果的概率得到GivenName的概率和SingleName的概率(均取log),如果前者较小(即概率较大)则返回TRUE。
Recognition函数是这个类的重头戏,用于识别是否为给定的未登陆词类型。首先使用自带的角色标注器将切分好的词串进行角色标注,然后根据角色标注的结果,把原始切分中的一些零碎的字串连起来并更新优化词图graphOptimum。
CUnknown类总结:
这个类是用来做未登陆词识别的,但是之前的工作已经都做好了,即从语料库中训练得到角色概率,得到了最显著类型未登陆词的模板。类型差别的工作也是由自带的角色标注器相应函数完成的。