Я прохожу через книгу NLTK, и я не могу сделать что-то, что казалось бы естественным первым шагом для построения достойной грамматики.
Моя цель - построить грамматику для определенного текстового корпуса.
(Первоначальный вопрос: должен ли я даже попытаться начать грамматику с нуля или начать с предопределенной грамматики? Если я начну с другой грамматики, с которой лучше начать английский)?
Предположим, что у меня есть следующая простая грамматика:
simple_grammar = nltk.parse_cfg("""
S -> NP VP
PP -> P NP
NP -> Det N | Det N PP
VP -> V NP | VP PP
Det -> 'a' | 'A'
N -> 'car' | 'door'
V -> 'has'
P -> 'in' | 'for'
""");
Эта грамматика может анализировать очень простое предложение, например:
parser = nltk.ChartParser(simple_grammar)
trees = parser.nbest_parse("A car has a door")
Теперь я хочу расширить эту грамматику, чтобы обрабатывать предложения с другими существительными и глаголами. Как добавить эти существительные и глаголы в мою грамматику, не определяя их вручную в грамматике?
Например, предположим, что я хочу иметь возможность разобрать предложение "У автомобиля есть колеса". Я знаю, что поставляемые токенизаторы могут волшебным образом определить, какие слова являются глаголами/существительными и т.д. Как я могу использовать вывод токенизатора, чтобы сообщить грамматике, что "колеса" являются существительным?