Английская грамматика для разбора в NLTK

Есть ли готовая грамматика английского языка, которую я могу просто загрузить и использовать в NLTK? Я искал примеры синтаксического анализа с помощью NLTK, но мне кажется, что я должен вручную указать грамматику перед разбором предложения.

Спасибо большое!

+56
источник поделиться
7 ответов

Вы можете посмотреть pyStatParser, простой статистический парсер python, который возвращает деревья разбора NLTK. Он поставляется с публичными древовидными структурами, и он генерирует грамматическую модель только в первый раз, когда вы создаете объект Parser (примерно через 8 секунд). Он использует алгоритм CKY и анализирует выражения средней длины (например, ниже) за секунду.

>>> from stat_parser import Parser
>>> parser = Parser()
>>> print parser.parse("How can the net amount of entropy of the universe be massively decreased?")
(SBARQ
  (WHADVP (WRB how))
  (SQ
    (MD can)
    (NP
      (NP (DT the) (JJ net) (NN amount))
      (PP
        (IN of)
        (NP
          (NP (NNS entropy))
          (PP (IN of) (NP (DT the) (NN universe))))))
    (VP (VB be) (ADJP (RB massively) (VBN decreased))))
  (. ?))
+31
источник

Моя библиотека, spaCy, обеспечивает синтаксический анализатор с высокой производительностью.

Установка:

pip install spacy
python -m spacy.en.download all

Использование:

from spacy.en import English
nlp = English()
doc = nlp(u'A whole document.\nNo preprocessing require.   Robust to arbitrary formating.')
for sent in doc:
    for token in sent:
        if token.is_alpha:
            print token.orth_, token.tag_, token.head.lemma_

Choi et al. (2015) нашел, что spaCy является самым быстрым парсером зависимостей. Он обрабатывает более 13 000 предложений в секунду, в одном потоке. По стандартной оценке WSJ она составляет 92,7%, более чем на 1% более точной, чем любая из моделей CoreNLP.

+20
источник
другие ответы

Связанные вопросы


Похожие вопросы

Существует библиотека под названием Pattern. Это довольно быстрый и простой в использовании.

>>> from pattern.en import parse
>>>  
>>> s = 'The mobile web is more important than mobile apps.'
>>> s = parse(s, relations=True, lemmata=True)
>>> print s

'The/DT/B-NP/O/NP-SBJ-1/the mobile/JJ/I-NP/O/NP-SBJ-1/mobile' ... 
+7
источник

В nltk_data имеется несколько грамматик. В интерпретаторе Python введите nltk.download().

+5
источник

Используйте MaltParser, там у вас есть предварительно подготовленная английская грамматика, а также некоторые другие предварительно подготовленные языки. И Maltparser - анализатор зависимостей, а не некоторый простой снизу вверх или сверху вниз Parser.

Просто загрузите MaltParser из http://www.maltparser.org/index.html и используйте NLTK следующим образом:

import nltk
parser = nltk.parse.malt.MaltParser()
+4
источник

Я пробовал NLTK, PyStatParser, Pattern. IMHO Pattern - лучший английский парсер, представленный в этой статье. Потому что он поддерживает установку pip и на веб-сайте есть причудливый документ (http://www.clips.ua.ac.be/pages/pattern-en). Я не мог найти разумный документ для NLTK (и это дало мне неточный результат для меня по умолчанию. И я не мог найти, как его настроить). pyStatParser намного медленнее, чем описано выше в моей среде. (Примерно за одну минуту для инициализации и потребовалось пару секунд для разбора длинных предложений. Возможно, я не использовал его правильно).

+4
источник

Вы пытались пометить POS в NLTK?

text = word_tokenize("And now for something completely different")
nltk.pos_tag(text)

Ответ таков:

[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'),('completely', 'RB'), ('different', 'JJ')]

Вот этот пример здесь NLTK_chapter03

+3
источник

Посмотрите другие вопросы по меткам или Задайте вопрос