У меня проблема с отображением наиболее вероятной структуры избирательного округа некоторого предложения с использованием вероятностной грамматики NLTK.
Вот моя фраза "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
. Но парсер показывает вторую структуру.
Что я делаю не так?
Был бы признателен за предложения!