Почему Parse Tree не генерируется в моем коде для моих предложений? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь создать контекстную грамматику для общих английских предложений, используя python 3.7 и различные библиотеки nltk.Код выполняется успешно, без ошибок для всех предложений.Но дерево не генерируется для всех предложений.Например:
В следующем случае:

q1 = "I shot an elephant in my pajamas"  
q2 = "Big Data is huge unstructured type of data"  

Дерево разбора генерируется для q1, а не для q2.И я не понимаю почему!

st1="""
S -> NP VP
NP -> NNP|Det N|Det N PP
NN -> JJ NN|N
VP -> V JJ|V  NP|V S|V NP PP
PP -> P NP
"""+NNP+"\n"+Det+"\n"+N+"\n"+JJ+"\n"+V+"\n"+P

grammar1 = nltk.CFG.fromstring(st1)
sent = q1.split()
rd_parser = nltk.RecursiveDescentParser(grammar1)
for tree in rd_parser.parse(sent):
    print(tree)

print(st1)
print(grammar1)

Ниже приведен вывод для q1.И то же самое дерево разбора должно быть сгенерировано для q2.

(S
  (NP (Det ) (N I))
  (VP
    (V shot)
    (NP (Det an) (N elephant) (PP (P in) (NP (Det my) (N pajamas))))))
(S
  (NP (Det ) (N I))
  (VP
    (V shot)
    (NP (Det an) (N elephant))
    (PP (P in) (NP (Det my) (N pajamas)))))

Вы можете увидеть полный код здесь

1 Ответ

0 голосов
/ 11 февраля 2019

Дерево разбора не генерируется для q2, потому что предложение не на языке грамматики, т. Е. Символ цели S не выводит предложение.

Вы должны записать предложение набумаги, а затем вручную попытаться построить дерево разбора для него.Вы обнаружите, что это не может быть сделано, и конкретные способы, которыми это невозможно сделать, должны предложить способы, которыми необходимо изменить грамматику, чтобы сделать это возможным.

Например, вот одинпроблема (не единственная): в грамматике NNP получает как «большие», так и «данные» (и ничто иное из них не выводится), поэтому (грубо говоря) предложение начинается с NNP NNP и все же Sнеспособен получить форму, которая начинается с NNP NNP.

...