DanceFire的专栏

天地不仁,以万物为刍狗

舞焰ID:DanceFire
263353次访问,排名228(1)好友0人,关注者1
DanceFire的文章
原创 51 篇
翻译 4 篇
转载 0 篇
评论 928 篇
DanceFire的公告
最近评论
hqfmyway:出现过同样的问题,谢谢解惑!
phhwr85:非常感谢,正郁闷中!
herry0628:A gold website for wow gold and
buy wow gold sevise.
herry0628:A gold website for wow gold and
buy wow gold sevise.
herry0628:A gold website for wow gold and
buy wow gold sevise.
文章分类
收藏
    相册
    Unix家族族谱图
    编程语言家族族谱
    操作系统相关图片
    插图
    麒麟操作系统相关图片
    L4 微内核实现
    Fiasco - DROPS的底层微内核 (TU Dresden)
    L4Ka::Pistachio (UKa, UNSW)
    seL4 - Secure Embedded L4 (UNSW)
    L4 微内核研究组
    L4 总部
    UKa的L4研究组
    UNSW/NICTA的L4研究组
    L4 文档
    L4 X.2 API的用户手册(UNSW)
    L4-embedded 参考手册 N1 (UNSW)
    基于 L4 的操作系统
    Darwin在L4上的移植 - Darbat (UNSW)
    DROPS - 基于L4的嵌入式实时操作系统 (TU Dresden)
    GNU Hurd在L4上的移植
    Linux在L4上的移植 - L4Linux (TU Dresden)
    Linux在L4上的移植 - Wombat (UNSW)
    Mungi - Single Address Space OS based on L4 (UNSW)
    朋友
    Dancefire's website
    ralph623的专栏(RSS)
    sinboy的菜地(RSS)
    Sunwear(RSS)
    Xinsoft :应用之美,在于药到病除(RSS)
    吕震宇(RSS)
    强强专栏(RSS)
    旁观生活的BT(RSS)
    潇寒的Blog(RSS)
    龙真先生(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 中科院中文分词系统ICTCLAS之人名识别词典分析收藏

    新一篇: C#匿名方法的应用二则–实现异常Retry机制和WinForm线程安全访问 | 旧一篇: 中科院中文分词系统ICTCLAS之CSegment的GenerateWord()详细分析

    前言、

    请在阅读本文前,先确认已阅读过论文《张华平,刘群.基于角色标注的中国人名自动识别研究》。

    论文把与人名相关的词分为了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 word
            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)
    Key: 到时      ID
    =       672  (Tag=44, Frequency=1)
    Key: 前程      ID
    =     2,379  (Tag=44, Frequency=1)
    Key: 华为      ID
    =     1,306  (Tag=44, Frequency=3)
    Key: 华以      ID
    =     1,307  (Tag=44, Frequency=1)
    Key: 同江      ID
    =     3,024  (Tag=44, Frequency=1)
    Key: 和田      ID
    =     1,229  (Tag=44, Frequency=2)
    Key: 国是      ID
    =     1,172  (Tag=44, Frequency=1)
    Key: 国都      ID
    =     1,164  (Tag=44, Frequency=1)
    Key: 图说      ID
    =     3,057  (Tag=44, Frequency=1)
    Key: 在理      ID
    =     3,889  (Tag=44, Frequency=1)
    Key: 天王      ID
    =     2,989  (Tag=44, Frequency=1)
    Key: 子书      ID
    =     4,247  (Tag=44, Frequency=1)
    Key: 子孙      ID
    =     4,248  (Tag=44, Frequency=1)
    Key: 学说      ID
    =     3,506  (Tag=44, Frequency=1)
    Key: 对白      ID
    =       780  (Tag=44, Frequency=1)
    Key: 帅才      ID
    =     2,828  (Tag=44, Frequency=1)
    Key: 平和      ID
    =     2,305  (Tag=44, Frequency=2)
    Key: 怡和      ID
    =     4,448  (Tag=44, Frequency=1)
    Key: 慈和      ID
    =       538  (Tag=44, Frequency=1)
    Key: 成说      ID
    =       444  (Tag=44, Frequency=1)
    Key: 文说      ID
    =     3,186  (Tag=44, Frequency=3)
    Key: 新说      ID
    =     3,416  (Tag=44, Frequency=5)
    Key: 明说      ID
    =     2,130  (Tag=44, Frequency=4)
    Key: 有请      ID
    =     3,772  (Tag=44, Frequency=1)
    Key: 来时      ID
    =     1,817  (Tag=44, Frequency=1)
    Key: 来由      ID
    =     1,820  (Tag=44, Frequency=1)
    Key: 永不      ID
    =     3,746  (Tag=44, Frequency=1)
    Key: 清谈      ID
    =     2,434  (Tag=44, Frequency=1)
    Key: 清还      ID
    =     2,429  (Tag=44, Frequency=6)
    Key: 特等      ID
    =     2,957  (Tag=44, Frequency=1)
    Key: 王开      ID
    =     3,115  (Tag=44, Frequency=1)
    Key: 生就      ID
    =     2,674  (Tag=44, Frequency=1)
    Key: 石向      ID
    =     2,720  (Tag=44, Frequency=4)
    Key: 维和      ID
    =     3,152  (Tag=44, Frequency=1)
    Key: 美的      ID
    =     2,075  (Tag=44, Frequency=3)
    Key: 老是      ID
    =     1,852  (Tag=44, Frequency=1)
    Key: 良将      ID
    =     1,938  (Tag=44, Frequency=1)
    Key: 若是      ID
    =     2,556  (Tag=44, Frequency=1)
    Key: 行将      ID
    =     3,450  (Tag=44, Frequency=1)
    Key: 远在      ID
    =     3,847  (Tag=44, Frequency=3)
    Key: 长发      ID
    =       388  (Tag=44, Frequency=1)
    Key: 鲁迅文学奖     ID
    =     2,005  (Tag=44, Frequency=1)
    Key: 茅盾文学奖     ID
    =     2,059  (Tag=44, Frequency=3)

    其中有我们刚才说的"美的",也就是说第二个例句 "叶/莲/美的/一位/亲戚" 会因为这个Tag=m的"美的"词条而成功的被切分为两条。

    从这个例句,我们感觉,Tag=m相当于论文里的V,既"人名的末字与下文成词"。可是真的是这样么?

    当我继续搜索标签为44的"天王"这个词条的时候,我注意到了199801人民日报语料中只有一条句子和拆分有关:

    "前几天王老头刚收到小孩寄来的照片" 

    这句话是"人名的上文与姓氏成词",也就是对应于论文的U

    这回就乱套了,"m"既对应U又对应V。按照上面拆分的代码,不管任何情况,将m的第一个字拆出来。

    做为V还好说,第一个字是名字的末字。但是对于U来说,可就完全不见得了,对于U,应该是拆除了最后一个字的部分。二者交集只有一种特例情况,就是m的词长是2个字。这样拆第一个字和拆最后一个字事实上一样。观察上面Tag=m的词条,我们会发现,除了"茅盾文学奖"和"鲁迅文学奖"这两个莫名其妙的词条外,其余的词条全都是两个字的。词长上满足刚才说的特例。

    难道就没有3个字的U和V了么?我相信肯定会有满足U或者V的三字词、四字词,这才是更通用的情况,而FreeICTCLAS里面将U,V特例化成了只允许为2字的词。估计也是因为这个原因,也就没有对应它为U或者V,而是用了另一个字母小写m来表示。

    总结一下,FreeICTCLAS实际上并没有真正的实现论文中所说的U,V这两个需要切分的Tag,取而代之的是一个在2个字成词的特例情况下等效的m来针对两个字成词的特例进行处理。

    二、关于前缀、后缀的思考

    关于FreeICTCLAS中判定词的Pattern有下列几种:

    //BBCD:姓+姓+名1+名2;
    //BBE: 姓+姓+单名;
    //BBZ: 姓+姓+双名成词;
    //BCD: 姓+名1+名2;
    //BE:  姓+单名;
    //BEE: 姓+单名+单名;韩磊磊
    //BG:  姓+后缀
    //BXD: 姓+姓双名首字成词+双名末字
    //BZ:  姓+双名成词;
    //B:   姓
    //CD:  名1+名2;
    //EE:  单名+单名;
    //FB:  前缀+姓
    //XD:  姓双名首字成词+双名末字
    //Y:   姓单名成词

    下面是nr.dct关于前缀的词条:
    Tag = F, 前缀 

    Key: 大         ID=       588  (Tag=5, Frequency=3)
    Key: 老         ID
    =     1,834  (Tag=5, Frequency=56)
    Key: 小         ID
    =     3,359  (Tag=5, Frequency=68)

    下面是nr.dct关于后缀的词条:

    Tag = G, 后缀

    Key: 哥         ID=     1,014  (Tag=6, Frequency=2)
    Key: 公         ID
    =     1,071  (Tag=6, Frequency=13)
    Key: 姐         ID
    =     1,579  (Tag=6, Frequency=4)
    Key: 老         ID
    =     1,834  (Tag=6, Frequency=32)
    Key: 某         ID
    =     2,157  (Tag=6, Frequency=40)
    Key: 嫂         ID
    =     2,573  (Tag=6, Frequency=14)
    Key: 氏         ID
    =     2,758  (Tag=6, Frequency=14)
    Key: 帅         ID
    =     2,827  (Tag=6, Frequency=18)
    Key: 总         ID
    =     4,269  (Tag=6, Frequency=2)

    关于前缀、后缀也有些不解。

    既然可以如下成词:

    //FB:  前缀+姓
    //BG:  姓+后缀

    那么"张老师"、"周总理"这种两个字的后缀为什么没有收录进来呢?
    另外,前缀也有可能是2个字的,比如"馄饨侯"、"泥人张"、"年糕陈",在前缀中也没有收录进来。

    那么"老师","总理"这么常用的后缀在词库里是什么呢?

    Key: 总理      ID=4,281
        (Tag
    =11, Frequency=105)
        (Tag
    =12, Frequency=110)

    Key: 老师      ID
    =1,851
        (Tag
    =12, Frequency=27)

    11是L(实际上是论文中的K),人名的上文;12是M(实际上是论文中的L),人名的下文。

    在语料库寻找一番后,注意到,"周总理"被标注为"周/nr 总理/n",并不将二者合并为一个人名,做为同位语处理,后者为名词。因此估计所有两个字的前缀、后缀都是这样进行的标注,而这里所谓的前缀、后缀只是针对单字情况下的前缀、后缀。

    三、关于(B)姓氏中出现的错误词条

    (B)中有一些词条是不合理的。比如"建军"被标注为B,显然应该拆分为建C军D;而

    Key: 孔子      ID=1,779
        (Tag
    =1, Frequency=5)

    应该把"子"做为后缀G,"孔"为姓氏B,形成BG搭配。在Tag为B中,有大量的这类的例子。我感觉这是在根据语料库学习过程中,预处理程序做的不够好,从而导致了这种现象。论文中提到,北大标注的语料库没有能够区分姓和名,这应该是导致nr.dct词典里姓名标注错误的主要原因。而且我怀疑,前面的前缀、后缀是人工总结的,而不是自动抽取出来的。

    四、关于论文中的(K)人名的上文、(L)人名的下文、(M)两个中国人名之间的成分

    这三个角色如果按照论文中的字母去找,一定会出问题。

    需要注意,词典中没有标签为K,人名的上文,的词条。却多出来一个N,论文中没有对应条目。我将N对应的词条贴出来:

    13]    Key: 帮助     ID=       181  (Tag=13, Frequency=1)
    13]    Key: 保        ID=       189  (Tag=13, Frequency=1)
    13]    Key: 保山     ID=       192  (Tag=13, Frequency=1)
    13]    Key: 背着     ID=       212  (Tag=13, Frequency=1)
    13]    Key: 并        ID=       280  (Tag=13, Frequency=1)
    13]    Key: 部署     ID=       326  (Tag=13, Frequency=1)
    13]    Key: 称        ID=       430  (Tag=13, Frequency=1)
    13]    Key: 称赞     ID=       431  (Tag=13, Frequency=1)
    13]    Key: 出局     ID=       489  (Tag=13, Frequency=1)
    13]    Key: 代表     ID=       630  (Tag=13, Frequency=1)
    13]    Key: 的        ID=       685  (Tag=13, Frequency=2)
    13]    Key: 对        ID=       779  (Tag=13, Frequency=19)
    13]    Key: 分析     ID=       874  (Tag=13, Frequency=1)
    13]    Key: 夫人     ID=       905  (Tag=13, Frequency=26)
    13]    Key: 赶到     ID=       959  (Tag=13, Frequency=1)
    13]    Key: 告诉     ID=     1,012  (Tag=13, Frequency=1)
    13]    Key: 给        ID=     1,036  (Tag=13, Frequency=2)
    13]    Key: 共诛     ID=     1,085  (Tag=13, Frequency=1)
    13]    Key: 和        ID=     1,227  (Tag=13, Frequency=76)
    13]    Key: 欢迎     ID=     1,324  (Tag=13, Frequency=1)
    13]    Key: 会见     ID=     1,365  (Tag=13, Frequency=3)
    13]    Key: 及        ID=     1,410  (Tag=13, Frequency=2)
    13]    Key: 将        ID=     1,509  (Tag=13, Frequency=1)
    13]    Key: 讲话     ID=     1,524  (Tag=13, Frequency=1)
    13]    Key: 交代     ID=     1,530  (Tag=13, Frequency=1)
    13]    Key: 接到     ID=     1,555  (Tag=13, Frequency=1)
    13]    Key: 来到     ID=     1,813  (Tag=13, Frequency=1)
    13]    Key: 老伴     ID=     1,836  (Tag=13, Frequency=1)
    13]    Key: 女儿     ID=     2,235  (Tag=13, Frequency=2)
    13]    Key: 陪        ID=     2,274  (Tag=13, Frequency=1)
    13]    Key: 陪同     ID=     2,276  (Tag=13, Frequency=1)
    13]    Key: 妻子     ID=     2,332  (Tag=13, Frequency=3)
    13]    Key: 请        ID=     2,439  (Tag=13, Frequency=3)
    13]    Key: 饰        ID=     2,756