import nltk
from nltk.parse import ViterbiParser
def pcfg_chartparser(grammarfile):
f=open(grammarfile)
grammar=f.read()
f.close()
return nltk.PCFG.fromstring(grammar)
grammarp = pcfg_chartparser("wsjp.cfg")
VP = ViterbiParser(grammarp)
print VP
for w in sent:
for tree in VP.parse(nltk.word_tokenize(w)):
print tree
Wenn ich den obigen Code ausführen, es wird die folgende Ausgabe für den Satz erzeugt, „das Licht aus“ -NLTK ViterbiParser nicht Worte in Parsen, die nicht in der PCFG Regel sind
(S (VP (VB turn) (PRT (RP off)) (NP (DT the) (NNS lights)))) (p=2.53851e-14)
jedoch es stellt sich die folgende Fehler für den Satz „bitte schalten sie das Licht“ -
ValueError: Grammar does not cover some of the input words: u"'please'"
ich ein ViterbiParser bin Gebäude durch eine probabilistische kontextfreie Grammatik zu liefern. Es funktioniert gut beim Parsen von Sätzen mit Wörtern, die bereits in den Regeln der Grammatik enthalten sind. Es kann keine Sätze analysieren, in denen der Parser das Wort in den Grammatikregeln nicht gesehen hat. Wie umgehen Sie diese Einschränkung?
Ich beziehe mich auf diese assignment.
Gibt es keine Möglichkeit, Ihre Wahrscheinlichkeiten zu glätten? – L3viathan