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

时间:2013-09-27 18:39:35

标签: python regex nlp 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))

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

(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只采用了第一个正则表达式。如何一次生成所有可能的解析树?

1 个答案:

答案 0 :(得分:3)

RegexpParser类无法实现此功能。它从ParserI接口继承了nbest_parse方法,并查看源代码(https://github.com/nltk/nltk/blob/master/nltk/parse/api.py),可以看出它只是默认运行基类的parse方法并将其作为可迭代返回。

当有人试图在Chunking with nltk中解释时,分块类不是用于此目的的工具(还是!),看看http://nltk.org/book/ch08.html,有一些快速的例子,只需要你想要实现的目标,需要进行大量的预处理和智能设计。