У меня проблема с отображением наиболее вероятной структуры избирательного округа для некоторого предложения с использованием вероятностной грамматики NLTK c.
Вот мое предложение "Ich Sah Den Tiger under der Felse"
Вот мой код:
from nltk import PCFG
tiger_grammar = PCFG.fromstring("""
S -> NP VP [1.0]
NP -> ART NN [0.25] | PPER [0.5] | NP PP [0.25]
VP -> VVFIN NP [0.75] | VVFIN NP PP [0.25]
PP -> APPR NP [1.0]
APPR -> 'unter' [1.0]
PPER -> 'Ich' [1.0]
VVFIN -> 'sah' [1.0]
NN -> 'Tiger' [0.5] | 'Felse' [0.5]
ART -> 'den' [0.5] | 'der' [0.5]
""")
viterbi_parser = nltk.ViterbiParser(tiger_grammar)
trees = viterbi_parser.parse(['Ich', 'sah', 'den', 'Tiger', 'unter', 'der', 'Felse'])
for t in trees:
print(t)
Вот что я получаю:
(S
(NP (PPER Ich))
(VP
(VVFIN sah)
(NP (ART den) (NN Tiger))
(PP (APPR unter) (NP (ART der) (NN Felse))))) (p=0.000488281)
Но желаемый результат:
(S
(NP (PPER Ich))
(VP
(VVFIN sah)
(NP
(NP (ART den) (NN Tiger))
(PP (APPR unter) (NP (ART der) (NN Felse))))))
(я не добавил вероятность здесь, но она должна отображаться также)
Согласно грамматике, вероятность для формирования VP
из VVFIN
и NP
выше, чем из VVFIN
, NP
и PP
. Но парсер показывает вторую структуру.
Что я делаю не так?
Буду благодарен за предложения!