Английская грамматика для разбора в НЛТК - PullRequest
61 голосов
/ 24 мая 2011

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

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

Ответы [ 7 ]

31 голосов
/ 30 июля 2013

Вы можете взглянуть на 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))))
  (. ?))
22 голосов
/ 08 сентября 2015

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

7 голосов
/ 26 июля 2014

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

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

4 голосов
/ 11 ноября 2014

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

4 голосов
/ 08 августа 2012

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

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

import nltk
parser = nltk.parse.malt.MaltParser()
3 голосов
/ 24 октября 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...