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
Когда я запускаю приведенный выше код, он производит следующий вывод для предложения «выключить свет» -NLTK ViterbiParser терпит неудачу в разборе слова, которые не в правиле PCFG
(S (VP (VB turn) (PRT (RP off)) (NP (DT the) (NNS lights)))) (p=2.53851e-14)
Однако , возникает следующее сообщение об ошибке в предложение «пожалуйста, выключите свет» -
ValueError: Grammar does not cover some of the input words: u"'please'"
Я строй ViterbiParser, предоставляя ему вероятностные бесконтекстный грамматик. Он хорошо работает при разборе предложений, содержащих слова, которые уже находятся в правилах грамматики. Он не разбирает предложения, в которых Парсер не видел слова в грамматических правилах. Как обойти это ограничение?
Я имею в виду это assignment.
Нет ли способа сгладить ваши вероятности? – L3viathan