gam*_*mma 7 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()
Run Code Online (Sandbox Code Playgroud)
输出是:
(S (NP very/ADJ colourful/ADJ ice/NN cream/NN van/NN))
Run Code Online (Sandbox Code Playgroud)
但是输出应该有另外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)
Run Code Online (Sandbox Code Playgroud)
问题是RegexpParser只采用了第一个正则表达式.如何一次生成所有可能的解析树?
这对于 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,有一些快速示例,这只会让您实现目标的一半,需要大量的预处理和智能设计。