【说话处理惩罚与Python】7.2分块

    添加时间:2013-5-30 点击量:

    实体识此外根蒂根基技巧是分块(chunking)

    名词短语分块(NP-分块)

    这里有一段已经标注的例子:

    方括号中是名词标注的例子。

    NP-分块信息有效的起原之一是词性标识表记标帜。

    为了创建一个NP块,我们将起首定义一个块语法,规定了句子应当如何分块。

    我们应用正则表达式来定义,规矩可以我们本身定:一个NP块由一个可选的限制词(DT)后面跟着任何数量标形容词(JJ),然后是一个名词(NN构成)。

    下面是示例代码:

     

    >>>sentence = [("the""DT"), ("little""JJ"), ("yellow""JJ"), 
    
    ... (
    "dog""NN"), ("barked""VBD"), ("at""IN"), ("the""DT"), ("cat""NN")]
    >>>grammar= "NP: {<DT>?<JJ><NN>}"
    >>>cp = nltk.RegexpParser(grammar)
    >>>result = cp.parse(sentence)
    >>>print result
    (S
    (NP the
    /DT little/JJ yellow/JJdog/NN)
    barked
    /VBD
    at
    /IN
    (NP the
    /DT cat/NN))
    >>>result.draw()





    标识表记标帜模式类似于正则表达式模式。<DT>?<JJ><NN>



    用正则表达式分块



    在这个例子中,不仅仅只有一个规矩,定义了两个规矩。依然可以类似于上方的做法进行分块。



    NNP为专有名词;DT为限制词;PP¥为所有格代名词(¥为特别符号,必须加转义\进行匹配);JJ为形容词;




    grammar= r"""
    
    NP:{<DT|PP\¥>?<JJ><NN>} # chunk determiner/possessive,adjectives and nouns
    {<NNP>+} #chunksequences of propernouns
    """
    cp
    = nltk.RegexpParser(grammar)
    sentence
    = [("Rapunzel""NNP"), ("let""VBD"), ("down""RP"),
    "her""PP¥"), ("long""JJ"), ("golden""JJ"), ("hair""NN")]
    >>>print cp.parse(sentence)
    (S
    (NP Rapunzel
    /NNP)
    let
    /VBD
    down
    /RP
    (NP her
    /PP¥long/JJ golden/JJhair/NN))



    若是标识表记标帜模式匹配地位重叠,最左边的优先。



    例如:




    >>>nouns= [("money""NN"), ("market""NN"), ("fund""NN")]
    
    >>>grammar= "NP: {<NN><NN>} #Chunktwo consecutive nouns"
    >>>cp = nltk.RegexpParser(grammar)
    >>>print cp.parse(nouns)
    (S (NP money
    /NNmarket/NN)fund/NN)



    为懂得决这个题目,可以改进一下这个规矩:NP:{<NN>+}。



    搜刮文本语料库



    我们也可以应用分块器更轻易的做同样的具体的工作:




    >>>cp = nltk.RegexpParser(CHUNK: {<V.><TO><V.>}
    >>>brown= nltk.corpus.brown
    240
    >>>for sent in brown.tagged_sents():
    ... tree
    = cp.parse(sent)
    ...
    for subtree in tree.subtrees():
    ...
    if subtree.node ==CHUNK: print subtree
    ...
    (CHUNK combined
    /VBN to/TO achieve/VB)
    (CHUNK
    continue/VB to/TO place/VB)
    (CHUNK serve
    /VB to/TO protect/VB)
    (CHUNK wanted
    /VBDto/TO wait/VB)
    (CHUNK allowed
    /VBN to/TO place/VB)
    (CHUNK expected
    /VBN to/TO become/VB)
    ...
    (CHUNK seems
    /VBZ to/TO overtake/VB)
    (CHUNK want
    /VBto/TO buy/VB)



    加裂缝



    加裂缝,是从一大块中出去一个标识符序列的过程。若是匹配的标识符序列贯穿成一整块,那么这一块会被去除。



    下面这个例子将会演示代码过程:




    grammar= r"""
    
    NP:
    {<.>+} #Chunkeverything
    }<VBD|IN>+{ #Chinksequences of VBDand IN
    """
    sentence
    = [("the""DT"), ("little""JJ"), ("yellow""JJ"),
    "dog""NN"), ("barked""VBD"), ("at""IN"), ("the""DT"), ("cat""NN")]
    cp
    = nltk.RegexpParser(grammar)
    >>>print cp.parse(sentence)
    (S
    (NP the
    /DT little/JJ yellow/JJdog/NN)
    barked
    /VBD
    at
    /IN
    (NP the
    /DT cat/NN))



    块的默示:标识表记标帜与树



    块布局是标注和解析之间的中心状况。



    块布局可以用标识表记标帜或者树来默示。应用最多的,是应用IOB标识表记标帜。



    每个标识符被用三个特别的块标签之一标注。



    I内部,O外部,B开端。一般没有须要指定呈如今块外的标识符类型,都标记为O。



    如图所示:





    &#160;



    同样,块也可以应用树来默示。如图:



    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: