Nltk: Den alten Stanford Parser ablehnen

Erstellt am 26. Sept. 2017  ·  4Kommentare  ·  Quelle: nltk/nltk

Wir haben die StanfordTokenizer / StanfordSegmenter , StanfordPOSTagger und StanfordNERTagger abgelehnt.

Es wäre gut, auch die alten StanfordParser , StanfordDependencyParser und StanfordNeuralDependencyParser von zu verwerfen

  1. Hinzufügen der entsprechenden Warnungen zur alten Schnittstelle

2a. Wickeln Sie die Ententypen für CoreNLPParser , die die Funktionen der alten Schnittstelle emulieren

2b. Schreiben Sie Dokumentationen darüber, wie Sie mit CoreNLPParser das Parsing von Abhängigkeiten und neuronalen Abhängigkeiten verwenden können

  1. Schreiben Sie Tests für die neuen CoreNLP-Parser-Schnittstellen

Sowohl die (2a) als auch die (2b) Methode sollten nur das Argument properties des api_call

Die aktuelle Schnittstelle für 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  .

Die gewünschte Oberfläche könnte folgendermaßen aussehen:

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

Dies wäre ein gutes Klassenprojekt oder eine gute erste Herausforderung

dependency parsing enhancement goodfirstbug inactive nice idea tests

Hilfreichster Kommentar

@artiemq Vielen Dank für das Interesse an der Ausgabe!

Mock wurde im Unittest verwendet, da es eine schnelle Möglichkeit war, zu dokumentieren, wie der Python-Fluss der APIs und wie ein Benutzer ihn verwenden sollte, aber CoreNLP nicht aufgerufen hat.

In Bezug auf die Unittest ist die Verwendung von unittest.mock möglicherweise nicht der beste Weg, um die CoreNLP-Funktionen zu testen. Bitte zögern Sie nicht, es neu zu schreiben / zu bearbeiten und eine PR zu erstellen =)

Alle 4 Kommentare

Hallo, ich würde gerne an diesem Thema arbeiten, aber ich habe nicht verstanden, warum Mock so verwendet wird

Jetzt testen Tests nichts. Auch wenn tokenize Körper vollständig gelöscht, werden die Tests noch passieren. Vielleicht sollten wir die api_call -Methode patchen und dann tokenize aufrufen

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

@artiemq Vielen Dank für das Interesse an der Ausgabe!

Mock wurde im Unittest verwendet, da es eine schnelle Möglichkeit war, zu dokumentieren, wie der Python-Fluss der APIs und wie ein Benutzer ihn verwenden sollte, aber CoreNLP nicht aufgerufen hat.

In Bezug auf die Unittest ist die Verwendung von unittest.mock möglicherweise nicht der beste Weg, um die CoreNLP-Funktionen zu testen. Bitte zögern Sie nicht, es neu zu schreiben / zu bearbeiten und eine PR zu erstellen =)

Ich kann hier Informationen zum Herstellen einer Verbindung zum POStagger-Server an Port 9000 sehen, aber ich kann keine Informationen zum Ausführen des Stanford-Postagger-Servers zum Abhören von Port 9000 finden ... Weiß jemand Bescheid?

Ist das also entschieden oder nicht?
Ich versuche jetzt, nltk.tag.StanfordNERTagger() auszuführen. Es gibt ein kleines Problem, das ich beheben wollte. Soll ich es tun oder nicht?

Ich möchte, dass der Parser lokal ohne API-Aufrufe ausgeführt wird. Ist das mit CoreNLPParser ?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

alvations picture alvations  ·  3Kommentare

ndvbd picture ndvbd  ·  4Kommentare

stevenbird picture stevenbird  ·  3Kommentare

alvations picture alvations  ·  4Kommentare

chaseireland picture chaseireland  ·  3Kommentare