Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Вы можете посмотреть 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))))
  (. ?))

Ответ 2

Моя библиотека, 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.

Ответ 3

Существует библиотека под названием 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' ... 

Ответ 4

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

Ответ 5

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

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

import nltk
parser = nltk.parse.malt.MaltParser()

Ответ 6

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

Ответ 7

Вы пытались пометить 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