Я новичок в NLTK и Python. Я создавал парсисы предложений, используя грамматики игрушек, приведенные в примерах, но я хотел бы знать, можно ли использовать грамматику, полученную из части Penn Treebank, скажем, в отличие от простого написания моего или использования игрушки грамматик? (Я использую Python 2.7 на Mac) Большое спасибо
Как получить набор правил грамматики из Penn Treebank с помощью python & NLTK?
Ответ 1
Если вам нужна грамматика, которая точно отображает образец Penn Treebank, который поставляется с NLTK, вы можете сделать это, предполагая, что вы загрузили данные Treebank для NLTK (см. комментарий ниже):
import nltk
from nltk.corpus import treebank
from nltk.grammar import ContextFreeGrammar, Nonterminal
tbank_productions = set(production for sent in treebank.parsed_sents()
for production in sent.productions())
tbank_grammar = ContextFreeGrammar(Nonterminal('S'), list(tbank_productions))
Это, вероятно, не даст вам ничего полезного. Поскольку NLTK поддерживает только парсинг с грамматиками со всеми указанными терминалами, вы сможете анализировать предложения, содержащие слова в примере Treebank.
Кроме того, из-за плоской структуры многих фраз в Treebank эта грамматика будет очень плохо обобщаться на предложения, которые не были включены в обучение. Вот почему приложения NLP, которые пытались разобрать древовидный банк, не использовали подход изучения правил CFG из Treebank. Ближайшей техникой для этого будет подход с привязкой данных с привязкой к данным в базе данных, но он намного более сложный.
Наконец, это будет так невероятно медленно, что это бесполезно. Поэтому, если вы хотите увидеть этот подход в действии по грамматике из одного предложения, чтобы доказать, что он работает, попробуйте следующий код (после импорта выше):
mini_grammar = ContextFreeGrammar(Nonterminal('S'),
treebank.parsed_sents()[0].productions())
parser = nltk.parse.EarleyChartParser(mini_grammar)
print parser.parse(treebank.sents()[0])
Ответ 2
Можно обучить Chunker на treebank_chunk или conll2000 корпусах. Вы не получите грамматики, но у вас есть объект, способный распутать, который может разбирать фразовые фрагменты. См. Как подключить Chunker NLTK, Извлечение фрагментов с помощью NLTK, и Точность Chunker, классифицированная по NLTK.