0

NLP初心者です。CFG について読み、トップダウン解析とボトムアップ解析に適用したいと考えています。トップダウンの解析から始めました。nltkとpython 36でトップダウンの解析木を描きたいです。以下のコードを書いたのですが動きません。何が間違っていますか?コードを強化するのを手伝ってくれる人はいますか?

import nltk
from nltk.tag import pos_tag
from nltk.tokenize import word_tokenize
from nltk.tree import *
from nltk.draw import tree
from nltk import Nonterminal, nonterminals, Production, CFG
from nltk.parse import RecursiveDescentParser
text = input('Please enter a sentence: ')
words = text.split()
sentence = pos_tag(words)

grammar1 = nltk.CFG.fromstring("""
    S -> NP VP
    S -> VP
    VP -> V NP | V NP PP
    NP ->  Det N | Det N PP
    PP -> P NP
    V -> "saw" | "ate" | "walked" | "book" | "prefer" | "sleeps"
    Det -> "a" | "an" | "the" | "my" | "that"
    N -> "man" | "dog" | "cat" | "telescope" | "park" | "flight" | "apple"
    P -> "in" | "on" | "by" | "with"
     """)

rd = nltk.RecursiveDescentParser(grammar1, "Input")
result = rd.parse(sentence)
result.draw()

「book that flight」を解析するためにこのテキストを入力しました。

4

1 に答える 1

2

次に質問するときは、「うまくいかない」とだけ言わないでください。失敗した場所と何が起こったかを説明します (エラーで失敗した場合は、スタック トレースとエラー メッセージを含めます)。

コードには 2 つの問題があります。引数"Input"がパーサー コンストラクターに属していません。どこから入手したかはわかりませんが、削除してください。次に、CFG 文法は独自の POS タグ付けを行います。単純な単語リストwordsをパーサーに渡します。

rd = nltk.RecursiveDescentParser(grammar1)
result = rd.parse(words)
于 2016-11-25T11:44:02.853 に答える