Nltk: text.generate() existiert nicht, wird aber trotzdem referenziert

Erstellt am 20. Aug. 2014  ·  27Kommentare  ·  Quelle: nltk/nltk

Ich habe versucht, dem Natural Language Processing-Buch zu folgen, aber gleich im ersten Kapitel stoße ich auf einige Probleme. Nachdem ich import alles von nltk.book hatte, war mein erster Gedanke, text3.generate() auszuprobieren, wie es in einem der Beispiele demonstriert wurde. Natürlich habe ich schöne AttributeError bekommen, weil die Text-Klasse diese Methode anscheinend nicht im NLTK hat, das ich installiert habe.
Darüber hinaus versucht sogar das Ausführen nltk.text.demo() , generierten Text auszuführen - und gibt den gleichen Fehler zurück.
Natürlich konnte ich keine Dokumentation für die Methode generate() finden, also gehe ich davon aus, dass sie entfernt wurde; Wenn dies der Fall ist, sollten Sie Verweise darauf aus nltk.text.demo() und aus dem Lehrbuch entfernen.

Ich verwende Python 2.7.8 mit NLTK 3.0.0b1 (das war die Version, die zum Zeitpunkt des Schreibens dieses Artikels über das Windows-Installationspaket von PyPI verfügbar war). Das text3.generate() -Beispiel ist sowohl in der alten als auch in der aktuellen Version des Lehrbuchs enthalten.

language-model

Hilfreichster Kommentar

Darauf wird noch in Kapitel eins des Buches verwiesen: http://www.nltk.org/book/ch01.html

Es ist kein großes Problem, aber ich bin wahrscheinlich typisch dafür, ein paar Minuten damit zu verbringen, dies als Problem zu googeln. Diese paar Minuten arbeiten sich doch viele Leute durch das Buch... :)

Alle 27 Kommentare

Sorry für die Verwirrung. Es gab Probleme mit der Sprachmodellierung von NLTK
Klasse und so haben wir es entfernt, bis die Probleme behoben sind. Dies brach die
Funktion zur Textgenerierung. Ich habe die Online-Version des Buches aktualisiert
mit einem Hinweis dazu und aktualisierte die Text-Demo (in
Release 3.0.0b2 in Kürze).

-Steven Vogel

Am 20. August 2014 um 17:12 Uhr schrieb Kasran [email protected] :

Ich habe versucht, dem Natural Language Processing zu folgen
Buch, aber gleich im ersten Kapitel stoße ich auf einige Probleme. Nach dem
Nachdem ich alles aus nltk.book importiert hatte, war mein erster Gedanke, es zu versuchen
text3.generate(), wie in einem der Beispiele demonstriert wurde. Natürlich, ich
bekam einen schönen AttributeError, weil die Text-Klasse dies anscheinend nicht tut
habe diese Methode im NLTK, das ich installiert habe.
Darüber hinaus versucht sogar das Ausführen von nltk.text.demo(), generierten Text zu erstellen -
und gibt denselben Fehler zurück.
Natürlich konnte ich keine Dokumentation für die Methode generate() finden,
also gehe ich davon aus, dass es entfernt wurde; Wenn das der Fall ist, sollten Sie es entfernen
Verweise darauf von nltk.text.demo() und aus dem Lehrbuch.

Ich verwende Python 2.7.8 mit NLTK 3.0.0b1. Das Beispiel text3.generate() ist
sowohl in der alten als auch in der aktuellen Version des Lehrbuchs.

Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/nltk/nltk/issues/736.

In Ordung! Völlig verständlich. Ich schätze, ich muss meine eigenen Chatterbots mit angewendeten Markov-Ketten schreiben, auf die alte grobe Art, bis es behoben ist.

Danke für Ihre schnelle Antwort.

Ich bin auch auf dasselbe Problem gestoßen, das mich ein wenig verwirrt hat. Danke für diesen Thread, zu dem mich die Google-Suche geführt hat.

Hmmm. hilft das (https://github.com/alvations/nltk/blob/develop/nltk/translate/decoder.py#L33)? Das Sprachmodell scheint beim Decodieren gut zu funktionieren. Ich werde bald einen aktualisierten und ordnungsgemäß dokumentierten Code für die translate -Bibliothek veröffentlichen.

Tut mir leid, dass ich hintereinander für Hackathon, Workshops und Konferenzen unterwegs war. Ich werde versuchen, es bis Ende dieser Woche zu pushen, hoffe ich.

Ah, aber mein Modell lädt ein vorberechnetes Modell, ohne das Modell von Grund auf neu zu erstellen. Baut jemand ein Sprachmodellmodul?

Ich sehe zwei Probleme mit dem aktuellen Code (abgesehen von der Tatsache, dass er nicht funktioniert), in Bezug auf die Benutzererfahrung:

  1. Im Buch benötigt die Methode keine Parameter (zumindest wenn sie zum ersten Mal im Buch erscheint), aber die aktuelle Signatur erfordert einen words -Parameter. Wenn Sie also dem Buch folgen, erhalten Sie Folgendes:

    >>> text1.generate()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: generate() missing 1 required positional argument: 'words'
    

    Das ist nicht sehr benutzerfreundlich. Ich schlage vor, Wörtern einen Standardwert in der Signatur zu geben (z. B. words=None ), um dieses Problem zu vermeiden.

  2. Wenn ich die normale Python-Konsole verwende und den Buchanweisungen folge, sehe ich nicht die DeprecationWarning , die der Code protokolliert. Das habe ich von Anfang an gemacht:

    [adrian<strong i="17">@chakra</strong> temporal]$ mkdir nltk
    [adrian<strong i="18">@chakra</strong> temporal]$ cd nltk/
    [adrian<strong i="19">@chakra</strong> nltk]$ python3 -m venv venv
    [adrian<strong i="20">@chakra</strong> nltk]$ . venv/bin/activate
    (venv) [adrian<strong i="21">@chakra</strong> nltk]$ pip install nltk
    Collecting nltk
    Using cached nltk-3.2.2.tar.gz
    Collecting six (from nltk)
    Using cached six-1.10.0-py2.py3-none-any.whl
    Installing collected packages: six, nltk
    Running setup.py install for nltk ... done
    Successfully installed nltk-3.2.2 six-1.10.0
    You are using pip version 8.1.1, however version 9.0.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    (venv) [adrian<strong i="22">@chakra</strong> nltk]$ python
    Python 3.5.2 (default, Jan 18 2017, 23:05:33) 
    [GCC 5.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import nltk
    >>> # Download the book resources, which requires GUI interaction.
    ... 
    >>> nltk.download()
    showing info https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/index.xml
    True
    >>> from nltk.book import *
    *** Introductory Examples for the NLTK Book ***
    Loading text1, ..., text9 and sent1, ..., sent9
    Type the name of the text or sentence to view it.
    Type: 'texts()' or 'sents()' to list the materials.
    text1: Moby Dick by Herman Melville 1851
    text2: Sense and Sensibility by Jane Austen 1811
    text3: The Book of Genesis
    text4: Inaugural Address Corpus
    text5: Chat Corpus
    text6: Monty Python and the Holy Grail
    text7: Wall Street Journal
    text8: Personals Corpus
    text9: The Man Who Was Thursday by G . K . Chesterton 1908
    >>> text1.generate(words=None)
    >>>
    

    Da das generate() nicht einfach als veraltet gilt, wie in „es wird entfernt“, sondern auch wie in „es funktioniert nicht mehr“, schlage ich vor, ein NotImplementedError zu erheben, anstatt eine Warnung zu protokollieren. Dies würde sowohl dazu führen, dass vorhandener Code fehlschlägt (was ich als Entwickler gerne hätte, anstatt scheinbar erfolgreich zu sein, ohne tatsächlich das zu tun, was er früher getan hat) und in der Konsole für Buchleser angezeigt wird.

Wenn Sie mit diesen Änderungen einverstanden sind, aber nicht die Zeit oder Motivation haben, sie umzusetzen, lassen Sie es mich einfach wissen und ich werde eine Zusammenführungsanfrage senden.

Ich frage mich auch, ob wir die Verweise auf generate() aus dem Buch entfernen könnten. Zumindest in Kapitel 1 scheinen sie von anderen Abschnitten des Kapitels nicht benötigt zu werden.

Meiner Meinung nach stimme ich Ihnen vollkommen zu, (generate() Referenzen) zu entfernen.

Darauf wird noch in Kapitel eins des Buches verwiesen: http://www.nltk.org/book/ch01.html

Es ist kein großes Problem, aber ich bin wahrscheinlich typisch dafür, ein paar Minuten damit zu verbringen, dies als Problem zu googeln. Diese paar Minuten arbeiten sich doch viele Leute durch das Buch... :)

Bump, generate()-Referenzen sind immer noch da.

Es ist jetzt immer noch da.

Es ist jetzt immer noch da.

Es ist jetzt immer noch da (in der Safari Online-Version des NLTK-Buchs)

Oh, wie ich sehe, wurde nach dem Beispiel eine Notiz eingefügt, dass generate() aus NLTK 3 entfernt wurde - Entschuldigung

Es wirft immer noch Fehler

Die Methode generate sollte ab NLTK 3.4 vorhanden sein. Sehen Sie sich das nltk.lm -Paket an!

Hallo, was sind mögliche aktuelle Alternativen zum automatischen Generieren von Text als Ersatz für diese Funktion? Ich lese den generierten Text aus Kapitel 1 des Buches und möchte auch wunderbare Sätze hervorbringen wie "Am Anfang ist sein Bruder ein haariger Mann" oder diese grundlegende Frage: "So soll dein Lohn sein?" .

Sorry @eric-burel Ich verstehe deinen Kommentar nicht ganz. Ich werde versuchen, es in meinen Worten zu formulieren, und du sagst mir, ob das richtig ist, ok?

Möchten Sie eine andere Möglichkeit, Text zu generieren, als ein Sprachmodell zu trainieren und seine generate -Methode zu verwenden?

Hallo, entschuldigen Sie, ich war unklar, ich habe gerade beim Lesen des NLP mit Python-Buches gelacht, als ich den Textgenerierungsteil erreichte, da die Sätze sehr realistisch sind, aber immer noch seltsam, und ich dieses Thema im Allgemeinen interessant finde.
Ich frage mich nur, was die derzeit empfohlene Alternative zum automatischen Generieren von Text anstelle von generate() ist. Soll ich etw aktualisieren oder eine andere Bibliothek laden?

Nun, ab NLTK-Version 3.4 haben Sie tatsächlich Zugriff auf generate() . Sehen Sie sich die Dokumentation für das Modul lm an:

>>> from nltk import lm
>>> help(lm)

Könnte auch Ihre eigene Generierung erstellen, wenn Sie möchten: http://www.cyber-omelette.com/2017/01/markov.html

Ich versuche, den Beispielen im O'Reilly Natural Language Processing with Python-Buch zu folgen, und so bin ich zu dieser Diskussion gekommen. Ich denke, die Leute sprechen über die Funktion nltk.text.generate und nicht über die Funktion nltk.parse.generate, was einige Verwirrung zu stiften scheint.

Ich tippe text1.generate() ein, ich soll eine Liste von Phrasen im Stil von Moby Dick bekommen. Stattdessen bekomme ich nur die Fehlermeldung TypeError: generate() missing 1 required positional argument: 'words' .

Dies scheint von site-packages/nltk/text.py zu stammen, die als def generate(self, words) definiert ist, und ihr einziger Zweck scheint darin zu bestehen, eine Warnung zu drucken, dass die Generatorfunktion nicht mehr verfügbar ist, was sie nicht tut auch wenn Sie einen Wert für das Wortargument übergeben.

Ich verwende nltk Version 3.5.2.

Dies kann jetzt seit generate was added geschlossen werden.

Danke @Copper-Head

Wurde Generieren wieder entfernt? Ich verfolge das Buch und erhalte den Fehler generate() missing 1 required positional argument: 'words' . Irgendwelche Hilfe, bitte?

Habe immer noch Probleme mit dieser Funktion :/

@Tserewara @AlbertSawZ welche Version von NLTK verwendest du? Könnten Sie ein Minimalbeispiel posten, mit dem wir versuchen können, dieses Problem zu reproduzieren?

Es ist ein bisschen schwierig, Ihnen zu helfen, basierend auf den Informationen, die Sie bisher gesendet haben :(

Ich verfolge das Buch auch, aber das Problem besteht weiterhin
Jede alternative Möglichkeit für diese Generierungsfunktion

TypeError                                 Traceback (most recent call last)
<ipython-input-36-463eb7c367ab> in <module>()
----> 1 text3.generate()

TypeError: generate() missing 1 required positional argument: 'words'
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen