【发布时间】:2016-01-30 14:50:49
【问题描述】:
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关))(NP(DT)(NNS灯))))(p=2.53851e-14)
但是,它会为句子“请关闭灯”引发以下错误-
ValueError: Grammar does not cover some input words: u"'please'"
我正在通过为其提供概率上下文无关语法来构建 ViterbiParser。它在解析包含已经在语法规则中的单词的句子时效果很好。它无法解析解析器在语法规则中没有看到单词的句子。如何绕过这个限制?
我指的是这个assignment。
【问题讨论】:
-
有没有办法平滑你的概率?
标签: python nlp nltk context-free-grammar viterbi