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
Когда я запускаю вышеуказанный код, он производит следующий вывод для предложения: "выключите свет" -
(S (VP (вращение VB)) (PRT (RP off)) (NP (DT) (подсветка NNS)))) (p = 2.53851e-14)
Однако, это вызывает следующую ошибку для предложения: "пожалуйста, выключите свет" -
ValueError: Грамматика не охватывает некоторые входные слова: u "'please'"
Я создаю ViterbiParser, предоставляя ему вероятностную контекстную свободную грамматику. Он хорошо работает при разборе предложений, содержащих слова, которые уже находятся в правилах грамматики. Он не разбирает предложения, в которых Парсер не видел слова в грамматических правилах. Как обойти это ограничение?
Я имею в виду это assignment.