Nltk: Reprovando o antigo Stanford Parser

Criado em 26 set. 2017  ·  4Comentários  ·  Fonte: nltk/nltk

Nós descontinuamos StanfordTokenizer / StanfordSegmenter , StanfordPOSTagger e StanfordNERTagger .

Seria bom também descontinuar os antigos StanfordParser , StanfordDependencyParser e StanfordNeuralDependencyParser por

  1. Adicionando os avisos apropriados à interface antiga

2a. Envolva os tipos de pato para CoreNLPParser que emula as funções da interface antiga

2b. Escreva documentações de como usar CoreNLPParser para usar a análise de dependência e dependência neural

  1. Escreva testes para as novas interfaces do analisador CoreNLP

Os métodos (2a) e (2b) devem afetar apenas o argumento properties do api_call

A interface atual 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  .

A interface desejada pode ter a seguinte aparência:

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

Isso seria um bom projeto de classe ou um bom primeiro desafio; P

dependency parsing enhancement goodfirstbug inactive nice idea tests

Comentários muito úteis

@artiemq Obrigado pelo interesse no assunto!

Mock foi usado no teste de unidade porque era uma maneira rápida de documentar como o fluxo de python das APIs e como um usuário deveria usá-lo, mas na verdade não chamou CoreNLP.

Com relação ao teste de unidade, talvez usar unittest.mock não seja a melhor maneira de testar as funcionalidades do CoreNLP. Sinta-se à vontade para reescrever / editar e criar um PR =)

Todos 4 comentários

Olá, gostaria de trabalhar neste problema, mas não entendi por que o mock era usado assim

Agora, os testes não testam nada. Mesmo que o tokenize body seja completamente apagado, os testes ainda assim serão aprovados. Talvez devêssemos corrigir o método api_call e, em seguida, chamar tokenize

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

@artiemq Obrigado pelo interesse no assunto!

Mock foi usado no teste de unidade porque era uma maneira rápida de documentar como o fluxo de python das APIs e como um usuário deveria usá-lo, mas na verdade não chamou CoreNLP.

Com relação ao teste de unidade, talvez usar unittest.mock não seja a melhor maneira de testar as funcionalidades do CoreNLP. Sinta-se à vontade para reescrever / editar e criar um PR =)

Posso ver informações aqui sobre como conectar ao POStagger 'servidor' na porta 9000, mas não consigo encontrar informações sobre como executar o servidor Postagger de Stanford para escutar na porta 9000 ... Alguém sabe?

Então, isso está decidido ou não?
Agora estou tentando executar nltk.tag.StanfordNERTagger() . Há um pequeno problema que eu queria consertar. Devo fazer isso ou não?

Quero que o analisador seja executado localmente sem chamadas de API. Isso é possível com CoreNLPParser ?

Esta página foi útil?
0 / 5 - 0 avaliações