Python 使用NP块绘制平坦NLTK解析树

Python 使用NP块绘制平坦NLTK解析树,python,tree,nlp,draw,nltk,Python,Tree,Nlp,Draw,Nltk,我想用NLTK分析句子,并将其块显示为一棵树。NLTK提供了绘制树的方法tree.draw()。下面的代码为“小黄狗对着猫吠叫”这句话画了一棵树: 导入nltk 句子=[(“the”,“DT”),(“little”,“JJ”),(“yellow”,“JJ”),(“dog”,“NN”),(“barked”,“VBD”),(“at”,“IN”),(“the”,“DT”),(“cat”,“NN”)] pattern=“NP:{?*}” NPChunker=nltk.RegexpParser(模式) r

我想用NLTK分析句子,并将其块显示为一棵树。NLTK提供了绘制树的方法
tree.draw()
。下面的代码为“小黄狗对着猫吠叫”这句话画了一棵树:

导入nltk
句子=[(“the”,“DT”),(“little”,“JJ”),(“yellow”,“JJ”),(“dog”,“NN”),(“barked”,“VBD”),(“at”,“IN”),(“the”,“DT”),(“cat”,“NN”)]
pattern=“NP:{?*}”
NPChunker=nltk.RegexpParser(模式)
result=NPChunker.parse(句子)
结果.draw()
结果是这棵树:

我怎样才能得到一棵这样的树呢

你需要“升级”你的非NP单词,这里有一个技巧:

import nltk 
sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"), ("dog", "NN"), ("barked","VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")]

pattern = """NP: {<DT>?<JJ>*<NN>}
VBD: {<VBD>}
IN: {<IN>}"""
NPChunker = nltk.RegexpParser(pattern) 
result = NPChunker.parse(sentence)
result.draw()
导入nltk
句子=[(“the”,“DT”),(“little”,“JJ”),(“yellow”,“JJ”),(“dog”,“NN”),(“barked”,“VBD”),(“at”,“IN”),(“the”,“DT”),(“cat”,“NN”)]
模式=“NP:{?*}
VBD:{}
在:{}
NPChunker=nltk.RegexpParser(模式)
result=NPChunker.parse(句子)
结果.draw()
[out]:



我知道现在回答有点晚了。但我是这样做的。 这个想法是你需要把你的句子转换成一棵树

import nltk
sentence = list(map(lambda sent: Tree(sent[1], children=[sent[0]]), sentence))
然后你可以在之后进行分块

NPChunker = nltk.RegexpParser(pattern) 
result = NPChunker.parse(sentence)
result.draw()

这是我的结果

@alvas,你为什么把标题改为“扁平化”?我不会说OPs的问题是关于平坦的——在这两个例子中,树的分支是相同的。相反,OP要求为PoS标签设置一个单独的级别(顺便说一句:不仅仅是非NP单词…。@lenz,因为这很可能是他需要的。因为他使用的NP模式是人们对术语提取、名词/实体提取等所做的,而
.draw()
纯粹是表示,所以它不会改变很多解析结果=),只需仔细检查一下,@raxer,这就是你想要的吗?@alvas,我的目标是再做一次表示。以黄色这个词为例。它有pos标签
JJ
。在第一张图片中,
JJ
与黄色在同一层。但是在第二张图片上,
JJ
在单词黄色上方有一层。如何在第二张图片上显示它?
NPChunker = nltk.RegexpParser(pattern) 
result = NPChunker.parse(sentence)
result.draw()