如何为NLTK中的歧义句子生成多个分析树?

我在Python中有以下代码。

sent = [("very","ADJ"),("colourful","ADJ"),("ice","NN"),("cream","NN"),("van","NN")] 
patterns= r"""
  NP:{<ADJ>*<NN>+}  

"""
NPChunker=nltk.RegexpParser(patterns) # create chunk parser
for s in NPChunker.nbest_parse(sent):
    print s.draw()

输出是:

(S (NP very/ADJ colourful/ADJ ice/NN cream/NN van/NN))

但输出应该有另外2个解析树。

(S (NP very/ADJ colourful/ADJ ice/NN) (NP cream/NN) (NP van/NN))
(S (NP very/ADJ colourful/ADJ ice/NN cream/NN) van/NN)

问题是只有第一个正则表达式被RegexpParser采用。 我怎样才能一次生成所有可能的分析树?


这对于RegexpParser类来说是不可能的。 它从ParserI接口继承nbest_parse方法,并查看源代码(https://github.com/nltk/nltk/blob/master/nltk/parse/api.py),可以看到它只是默认为运行基类的解析方法并将其作为迭代器返回。

正如有人试图用nltk在Chunking中解释的那样,chunking类并不是用于此目的的工具(还是!),请看http://nltk.org/book/ch08.html,有一些快速示例,这只会使你想要达到目标的一半,需要进行大量的预处理和智能设计。

链接地址: http://www.djcxy.com/p/16329.html

上一篇: How to generate multiple parse trees for an ambiguous sentence in NLTK?

下一篇: Using std:vector as low level buffer