7

私は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 によって取得されることです。考えられるすべての解析ツリーを一度に生成するにはどうすればよいですか?

4

1 に答える 1

3

これは RegexpParser クラスでは不可能です。ParserI インターフェイスから nbest_parse メソッドを継承し、ソース コード ( https://github.com/nltk/nltk/blob/master/nltk/parse/api.py ) を見ると、デフォルトで基本クラスの parse メソッドを実行し、それを iterable として返します。

誰かがChunking with nltkで説明しようとしたように、チャンク クラスはこの目的で使用するツールではありません (まだ!)。http://nltk.org/book/ch08.htmlを見てください。 、それはあなたが達成したいことの中途半端にあなたを連れて行くだけであり、多くの前処理とスマートな設計を必要とします.

于 2013-09-28T10:45:56.393 に答える