-
【说话处理惩罚与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;
同样,块也可以应用树来默示。如图:
读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。