Nltk: Прекращение поддержки старого парсера Stanford

Созданный на 26 сент. 2017  ·  4Комментарии  ·  Источник: nltk/nltk

Мы устарели StanfordTokenizer / StanfordSegmenter , StanfordPOSTagger и StanfordNERTagger .

Было бы хорошо также отказаться от старых StanfordParser , StanfordDependencyParser и StanfordNeuralDependencyParser

  1. Добавление соответствующих предупреждений в старый интерфейс

2а. Оберните duck-types в CoreNLPParser который имитирует функции старого интерфейса

2b. Напишите документацию о том, как использовать CoreNLPParser для анализа зависимостей и нейронных зависимостей.

  1. Напишите тесты для новых интерфейсов парсера CoreNLP

Оба метода (2a) и (2b) должны влиять только на аргумент properties аргумента api_call

Текущий интерфейс для CoreNLPParser :

>>> from nltk.parse.corenlp import CoreNLPParser
>>> sent = 'The quick brown fox jumps over the lazy dog.'
>>> next(parser.raw_parse(sent)).pretty_print()  # doctest: +NORMALIZE_WHITESPACE
                         ROOT
                          |
                          S
           _______________|__________________________
          |                         VP               |
          |                _________|___             |
          |               |             PP           |
          |               |     ________|___         |
          NP              |    |            NP       |
      ____|__________     |    |     _______|____    |
     DT   JJ    JJ   NN  VBZ   IN   DT      JJ   NN  .
     |    |     |    |    |    |    |       |    |   |
    The quick brown fox jumps over the     lazy dog  .

Желаемый интерфейс может выглядеть так:

# Using Duck-types
>>> from nltk.parse.stanford import CoreNLPParser
>>> depparser = CoreNLPDependencyParser('http://localhost:9000')
>>> depparser.parse(sent)
>>> ndepparser = CoreNLPNeuralDependencyParser('http://localhost:9000')
>>> ndepparser.parse(sent)
# Using arguments to control `properties` for `api_call()` 
>>> from nltk.parse.stanford import CoreNLPParser

>>> depparser = CoreNLPParser('http://localhost:9000', parser_type="dependency")
>>> depparser.parse(sent)

>>> ndepparser = CoreNLPNeuralDependencyParser('http://localhost:9000', parser_type="neural_dependency")
>>> ndepparser.parse(sent)

Из этого получится хороший классный проект или хороший первый вызов; P

dependency parsing enhancement goodfirstbug inactive nice idea tests

Самый полезный комментарий

@artiemq Спасибо за интерес к вопросу!

Mock использовался в модульном тестировании, потому что это был быстрый способ задокументировать, как поток API-интерфейсов Python и как пользователь должен его использовать, но на самом деле он не вызывает CoreNLP.

Что касается unittest, возможно, использование unittest.mock не лучший способ проверить функциональность CoreNLP. Не стесняйтесь переписывать / редактировать его и создавать PR =)

Все 4 Комментарий

Привет, я хотел бы поработать над этой проблемой, но я не понял, почему макет используется так

Теперь тесты ничего не проверяют. Даже если tokenize body полностью стерто, тесты все равно пройдут. Возможно, нам стоит исправить метод api_call а затем вызвать tokenize

  corenlp_tokenizer = CoreNLPTokenizer()
  corenlp_tokenizer.api_call = MagicMock(return_value=predefined_return_value)
  corenlp_tokenizer.tokenize(input_string)

@artiemq Спасибо за интерес к вопросу!

Mock использовался в модульном тестировании, потому что это был быстрый способ задокументировать, как поток API-интерфейсов Python и как пользователь должен его использовать, но на самом деле он не вызывает CoreNLP.

Что касается unittest, возможно, использование unittest.mock не лучший способ проверить функциональность CoreNLP. Не стесняйтесь переписывать / редактировать его и создавать PR =)

Я могу увидеть здесь информацию о том, как подключиться к «серверу» POStagger на порту 9000, но я не могу найти информацию о том, как запустить Stanford postagger server для прослушивания порта 9000 ... Кто-нибудь знает?

Так это решено или нет?
Я сейчас пытаюсь запустить nltk.tag.StanfordNERTagger() . Есть небольшая проблема, которую я хотел исправить. Сделать это или нет?

Я хочу, чтобы парсер работал локально без API-вызовов. Возможно ли это с CoreNLPParser ?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги