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
Kiedy uruchomić powyższy kod, to daje następujący wynik na zdaniu „zgasić światło” -NLTK ViterbiParser zawodzi w parsowania słowa, które nie są w regule PCFG
(S (VP (VB turn) (PRT (RP off)) (NP (DT the) (NNS lights)))) (p=2.53851e-14)
jednak , podnosi się następujący błąd w zdaniu: „Proszę wyłączyć światła” -
ValueError: Grammar does not cover some of the input words: u"'please'"
buduję ViterbiParser dostarczając mu wolną gramatyki probabilistyczny kontekstowe. Działa dobrze w analizie zdań, które mają słowa, które są już w regułach gramatyki. Nie analizuje zdań, w których Parser nie widział tego słowa w regułach gramatycznych. Jak obejść to ograniczenie?
Mam na myśli to assignment.
Czy nie ma sposobu na wygładzenie prawdopodobieństwa? – L3viathan