2016-11-25 7 views
0

私はNLPの初心者です。私はCFGについて読んで、トップダウン解析とボトムアップ解析でそれを適用したいと考えています。私はトップダウン解析を始めました。私はnltkとpython 36でトップダウン構文解析ツリーを描きたいと思います。次のコードを書いたが、うまくいきません。何が間違っていますか?コードを強化するのに役立つ人はいますか?CFGトップダウン解析、Pythonでnltkで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() 

"本の飛行"を解析するためにこのテキストを入力しました。

答えて

0

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

コードには2つの問題があります。引数"Input"はパーサコンストラクタに属していません。私はあなたがどこから得たのか分からないが、それを取り除く。次に、CFG文法は独自のPOSタグ付けを行います。プレーン・ワード・リストwordsをパーサに渡します。

rd = nltk.RecursiveDescentParser(grammar1) 
result = rd.parse(words)