Я получаю рекурсивную ошибку, когда пытаюсь запустить приведенный ниже код
import nltk
from nltk import Nonterminal, nonterminals, Production, CFG
from nltk.parse import RecursiveDescentParser
from nltk.parse import ShiftReduceParser
from nltk.parse import ChartParser
from nltk.parse.generate import generate, demo_grammar
from nltk import CFG
grammar = CFG.fromstring("""
S -> NP VP
NP -> Det Nom | PropN | NP PP
Nom -> Adj Nom | N
VP -> V NP | V S | VP PP
PP -> P NP
PropN -> 'Bill' | 'Bob' | 'He'
Det -> 'the' | 'a' | 'an' | 'some'
N -> 'bear' | 'squirrel' | 'park' | 'block' | 'table' | 'river' | 'dog' | 'dogs' | 'pasta'| 'anchovies' | 'restaurant' | 'fork'
Adj -> 'angry' | 'frightened' | 'furry'
V -> 'chased' | 'saw' | 'Put' | 'eats' | 'eat' | 'chase'
P -> 'on' | 'in' | 'along' | 'with'
""")
rd = RecursiveDescentParser(grammar)
sr = ShiftReduceParser(grammar)
cp = ChartParser(grammar)
s1 = 'Bill Put the block on the table'.split()
s2 = 'Bob chased a bear in the park along the river'.split()
s3 = 'Bill saw Bob chase the angry furry dog'.split()
s4 = 'an bear eat an squirrel'.split()
s5 = 'the dogs eats'.split()
s6 = 'He eats pasta with some anchovies in the restaurant'.split()
s7 = 'He eats pasta with a fork in the restaurant'.split()
for t in rd.parse(s1):
print(t)
Пока работает только анализатор диаграмм, но я также хотел бы, чтобы другие 2 анализатора также работали.У меня такое ощущение, что ошибка связана с моей грамматической переменной, однако я не смог найти исправления.