Nltk: Depreciar al viejo analizador de Stanford

Creado en 26 sept. 2017  ·  4Comentarios  ·  Fuente: nltk/nltk

Hemos desaprobado los StanfordTokenizer / StanfordSegmenter , StanfordPOSTagger y StanfordNERTagger .

Sería bueno descartar también los antiguos StanfordParser , StanfordDependencyParser y StanfordNeuralDependencyParser por

  1. Agregar las advertencias adecuadas a la interfaz anterior

2a. Envuelva los tipos de pato por CoreNLPParser que emulan las funciones de la interfaz anterior

2b. Escriba documentación sobre cómo usar CoreNLPParser para usar el análisis de dependencia y dependencia neuronal

  1. Escribir pruebas para las nuevas interfaces del analizador CoreNLP

Ambos métodos (2a) y (2b) solo deberían afectar el argumento properties del api_call

La interfaz actual para 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  .

La interfaz deseada podría verse así:

# 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)

Esto sería un buen proyecto de clase o un buen primer desafío; P

dependency parsing enhancement goodfirstbug inactive nice idea tests

Comentario más útil

@artiemq ¡ Gracias por el interés en el tema!

Mock se usó en la prueba unitaria porque era una forma rápida de documentar cómo el flujo de Python de las API y cómo un usuario debería usarlo, pero en realidad no llamó a CoreNLP.

Con respecto a la prueba unitaria, quizás usar unittest.mock no sea la mejor manera de probar las funcionalidades de CoreNLP. Siéntase libre de reescribirlo / editarlo y crear un PR =)

Todos 4 comentarios

Hola, me gustaría trabajar en este problema, pero no entendí por qué mock se usa así.

Ahora las pruebas no prueban nada. Incluso si el cuerpo de tokenizar se borra por completo, las pruebas aún se aprobarán. Tal vez deberíamos parchear el método api_call y luego llamar a tokenize

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

@artiemq ¡ Gracias por el interés en el tema!

Mock se usó en la prueba unitaria porque era una forma rápida de documentar cómo el flujo de Python de las API y cómo un usuario debería usarlo, pero en realidad no llamó a CoreNLP.

Con respecto a la prueba unitaria, quizás usar unittest.mock no sea la mejor manera de probar las funcionalidades de CoreNLP. Siéntase libre de reescribirlo / editarlo y crear un PR =)

Puedo ver información aquí sobre cómo conectarme al 'servidor' POStagger en el puerto 9000, pero no puedo encontrar información sobre cómo ejecutar el servidor postagger de Stanford para escuchar en el puerto 9000 ... ¿Alguien lo sabe?

Entonces, ¿esto está decidido o no?
Ahora estoy intentando ejecutar nltk.tag.StanfordNERTagger() . Hay un pequeño problema que quería solucionar. ¿Lo hago o no?

Quiero que el analizador se ejecute localmente sin llamadas a la API. ¿Es esto posible con CoreNLPParser ?

¿Fue útil esta página
0 / 5 - 0 calificaciones