中科院中文分词系统ICTCLAS之人名识别词典分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中科院中文分词系统ICTCLAS之人名识别词典分析
标签:照片华为c
2007-05-13 06:13 13888人阅读评论(6) 收藏举报分类:
自然语言处理(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。
前言、
请在阅读本文前,先确认已阅读过论文《张华平,刘群.基于角色标注的中国人名自动识别研究》。
论文把与人名相关的词分为了15个角色,通过词典查询,可以判断某些文字、词所属角色,然后根据模式匹配找到匹配上的名字。
当我分析nr.dct的时候,却发现nr.dct并非完全按照论文所描述的进行的角色划分。以下是我对tag统计后的nr.dct的内容,能够在论文中找到含义的,我标注上了含
义。
Tag Count:
Tag = B( 1), Count = 513, 姓氏
Tag = C( 2), Count = 955, 双名的首字
Tag = D( 3), Count = 1,043, 双名的末字
Tag = E( 4), Count = 574, 单名
Tag = F( 5), Count = 3, 前缀
Tag = G( 6), Count = 9, 后缀
*Tag = K( 10), Count = 0, 人名的上文
Tag = L( 11), Count = 1,198, 人名的下文
Tag = M( 12), Count = 1,684, 两个中国人名之间的成分
Tag = N( 13), Count = 67, <无>
*Tag = U( 20), Count = 0, 人名的上文与姓氏成词
*Tag = V( 21), Count = 0, 人名的末字与下文成词
Tag = X( 23), Count = 84, 姓与双名首字成词
Tag = Y( 24), Count = 47, 姓与单名成词
Tag = Z( 25), Count = 388, 双名本身成词
Tag = m( 44), Count = 58, <无>
Tag = *(100), Count = 1, 始##始
Tag = *(101), Count = 1, 末##末
一、关于粗分结果的切分
我们可以从这个统计结果看出,nr.dct中并没有U和V这两个标签,那ICTCLAS如何修正在粗分情况下错误切分的词语呢?据两个例子:
1、"邓/颖/超生/前/使用"
其中的"超生"就必须切开,分成"超/生",后期才可进一步的标注。
2、"叶/莲/美的/一位/亲戚"
其中"美的"必须切开,分成"美/的",后期才可进一步的标注。
首先是很不幸,对于上面第一个例子FreeICTCLAS无能为力,因为现在的ICTCLAS的nr.dct里面根本没有"超生"这个词,也就是说,如果粗分结果出现了"超生"这个错误组合了部分人名的词,那么ICTCLAS无法将其拆开从而正确识别人名。
那么对于第二个例子呢?
根据对现有的ICTCLAS的分析,注意到关于切分的地方有这么一个代码
if(m_tagType==TT_NORMAL||!dictUnknown.IsExist(pWordItems[nWordsIndex].sWord,44 ))
{
// 如果TT_NORMAL 或者NE词典中无此词(with tag 44)
// 将该词放到m_sWords[i]中,调整m_nWordPosition[i+1]的位置。
strcpy(m_sWords[i],pWordItems[nWordsIndex].sWord);//store currentword
m_nWordPosition[i+1]=m_nWordPosition[i]+strlen(m_sWords[i]);
}
else
{
if(!bSplit)
{
strncpy(m_sWords[i],pWordItems[nWordsIndex].sWord,2);//storecurrent word
m_sWords[i][2]=0;
bSplit=true;
}
else
{
unsigned int nLen=strlen(pWordItems[nWordsIndex].sWord+2);
strncpy(m_sWords[i],pWordItems[nWordsIndex].sWord+2,nLen);//storecurrent wor d
m_sWords[i][nLen]=0;
bSplit=false;
}
m_nWordPosition[i+1]=m_nWordPosition[i]+strlen(m_sWords[i]);
}
其中:
dictUnknown.IsExist(pWordItems[nWordsIndex].sWord,44)
到未登录词词典中去寻找标签为44的当前词,由此判定的是否继续执行切分操作。44是谁呢?前面的统计结果中已经有了:
Tag = m( 44), Count = 58, <无>
标签44(m)没有任何对应于论文的说明。关于切分,论文只提到了对于U、V的切分。那m是U还是V呢?因为一共就58个,所以我列出了所有Tag=44的项,大家可以看一下:
Key: 三和 ID= 2,564 (Tag=44, Frequency=1)
Key: 东家 ID= 744 (Tag=44, Frequency=1)
Key: 之和 ID= 4,052 (Tag=44, Frequency=1)
Key: 健在 ID= 1,490 (Tag=44, Frequency=7)
Key: 初等 ID= 482 (Tag=44, Frequency=2)