Nltk: text.generate() n'existe pas, mais est toujours référencé

Créé le 20 août 2014  ·  27Commentaires  ·  Source: nltk/nltk

J'ai essayé de suivre le livre sur le traitement du langage naturel, mais dès le premier chapitre, je rencontre quelques problèmes. Après import tout à partir de nltk.book , ma première pensée a été d'essayer text3.generate() comme cela a été démontré dans l'un des exemples. Bien sûr, j'ai obtenu un joli AttributeError parce que la classe Text n'a apparemment pas cette méthode dans le NLTK que j'ai installé.
De plus, même l'exécution nltk.text.demo() essaie de faire du texte généré - et renvoie la même erreur.
Bien sûr, je n'ai trouvé aucune documentation pour la méthode generate() , donc je suppose qu'elle a été supprimée ; si tel est le cas, vous devez supprimer les références à celui-ci de nltk.text.demo() et du manuel.

J'utilise Python 2.7.8 avec NLTK 3.0.0b1 (qui était la version disponible via le package d'installation Windows de PyPI au moment d'écrire ces lignes). L'exemple text3.generate() se trouve à la fois dans l'ancienne et dans la version actuelle du manuel.

language-model

Commentaire le plus utile

Ceci est encore mentionné dans le premier chapitre du livre : http://www.nltk.org/book/ch01.html

Ce n'est pas grave, mais je passe probablement quelques minutes à googler cela comme un problème. Ces quelques minutes, mais beaucoup de gens travaillent à travers le livre... :)

Tous les 27 commentaires

Désolé pour la confusion. Il y avait des problèmes avec la modélisation du langage de NLTK
class et nous l'avons donc supprimé jusqu'à ce que les problèmes soient résolus. Cela a brisé le
fonctionnalité de génération de texte. J'ai mis à jour la version en ligne du livre
avec une note à ce sujet, et mis à jour la démo textuelle (à inclure dans
version 3.0.0b2 bientôt).

-Steven oiseau

Le 20 août 2014 à 17h12, Kasran [email protected] a écrit :

J'ai essayé de suivre le traitement du langage naturel
livre, mais dès le premier chapitre, je rencontre quelques problèmes. Après
tout importer de nltk.book, ma première pensée a été d'essayer
text3.generate() comme cela a été démontré dans l'un des exemples. Bien sûr je
a obtenu une belle AttributeError parce que la classe Text ne semble pas
avoir cette méthode dans le NLTK que j'ai installé.
De plus, même l'exécution de nltk.text.demo() essaie de faire du texte généré -
et renvoie la même erreur.
Bien sûr, je n'ai trouvé aucune documentation pour la méthode generate(),
donc je suppose qu'il a été supprimé; si c'est le cas, vous devriez supprimer
références à celui-ci depuis nltk.text.demo() et depuis le manuel.

J'utilise Python 2.7.8 avec NLTK 3.0.0b1. L'exemple text3.generate() est
dans les versions anciennes et actuelles du manuel.

Répondez directement à cet e-mail ou consultez-le sur GitHub
https://github.com/nltk/nltk/issues/736.

Bien! Totalement compréhensible. Je suppose que je vais devoir écrire mes propres chatterbots avec des chaînes de Markov appliquées, à l'ancienne, jusqu'à ce que ce soit corrigé.

Merci pour votre réponse rapide.

J'ai également rencontré ce même problème qui m'a un peu intrigué. Merci pour ce fil sur lequel la recherche google m'a amené.

Hmmm. est-ce que cela aide (https://github.com/alvations/nltk/blob/develop/nltk/translate/decoder.py#L33) ? Le modèle de langage semble bien fonctionner lors du décodage. Je publierai bientôt un code mis à jour et correctement documenté pour la bibliothèque translate .

Désolé, j'étais absent pour le hackathon, les ateliers et les conférences à la suite. Je vais essayer de le pousser d'ici la fin de cette semaine, j'espère.

Ah mais mon modèle charge un modèle précalculé, ne construisant pas le modèle à partir de zéro. Est-ce que quelqu'un construit un module de modèle de langage ?

Je vois deux problèmes avec le code actuel (outre le fait qu'il ne fonctionne pas), en termes d'expérience utilisateur :

  1. Dans le livre, la méthode ne prend aucun paramètre (du moins lorsqu'elle apparaît pour la première fois dans le livre), mais la signature actuelle nécessite un paramètre words . Ainsi, lorsque vous suivez le livre, vous obtenez ce qui suit :

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

    Ce n'est pas très convivial. Je suggère de donner aux mots une valeur par défaut dans la signature (par exemple words=None ) pour éviter ce problème.

  2. En utilisant la console Python normale en suivant les instructions du livre, je ne vois pas le DeprecationWarning que le code enregistre. C'est ce que j'ai fait depuis le début :

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

    Étant donné que le generate() n'est pas simplement obsolète comme dans "il sera supprimé", mais aussi comme dans "cela ne fonctionne plus", je suggère de lever un NotImplementedError au lieu de consigner un avertissement. Cela ferait échouer le code existant (ce que je, en tant que développeur, voudrais qu'il fasse au lieu de réussir apparemment sans faire ce qu'il faisait auparavant) et apparaîtrait dans la console pour les lecteurs de livres.

Si vous êtes d'accord avec ces changements mais que vous n'avez pas le temps ou la motivation pour les mettre en œuvre, faites le moi savoir et j'enverrai une demande de fusion.

Je me demande également si nous pourrions supprimer les références à generate() du livre. Au moins dans le chapitre 1, ils ne semblent pas être requis par d'autres sections du chapitre.

À mon avis, je suis totalement d'accord avec vous pour supprimer les références (generate()).

Ceci est encore mentionné dans le premier chapitre du livre : http://www.nltk.org/book/ch01.html

Ce n'est pas grave, mais je passe probablement quelques minutes à googler cela comme un problème. Ces quelques minutes, mais beaucoup de gens travaillent à travers le livre... :)

Bump, les références generate() sont toujours là.

Il est toujours là maintenant.

Il est toujours là maintenant.

Il est toujours là maintenant (sur la version Safari Online du livre NLTK)

Oh, je vois qu'il y avait une note insérée après l'exemple, que generate() a été supprimé de NLTK 3 - désolé

Il lance toujours une erreur

La méthode generate doit être présente à partir de NLTK 3.4. Découvrez le forfait nltk.lm !

Bonjour, quelles sont les alternatives actuelles possibles pour générer automatiquement du texte, en remplacement de cette fonction ? Je suis en train de lire le texte généré du chapitre 1 du livre, et j'aimerais moi aussi produire des phrases merveilleuses comme "Au commencement de son frère est un homme poilu" ou cette question fondamentale : "ainsi sera ton salaire ?" .

Désolé @eric-burel je ne comprends pas très bien votre commentaire. Je vais essayer de le formuler avec mes propres mots et tu me diras si c'est correct, d'accord ?

Voulez-vous un autre moyen de générer du texte autre que la formation d'un modèle de langage et l'utilisation de sa méthode generate ?

Salut, désolé je n'étais pas clair, j'étais juste en train de bien rire en lisant le livre PNL avec Python en atteignant la partie génération de texte, car les phrases sont très réalistes tout en étant bizarres, et je trouve ce sujet intéressant en général.
Je me demande simplement quelle est l'alternative actuellement recommandée pour générer du texte automatiquement, en remplacement de generate() . Dois-je mettre à jour qch ou charger une autre bibliothèque ?

Eh bien, à partir de la version 3.4 de NLTK, vous avez en fait accès à generate() . Jetez un œil à la documentation du module lm :

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

Vous pouvez également créer votre propre générateur, si vous le souhaitez : http://www.cyber-omelette.com/2017/01/markov.html

J'essaie de suivre les exemples du livre O'Reilly Natural Language Processing with Python, c'est ainsi que je suis arrivé à cette discussion. Je pense que les gens parlent de la fonction nltk.text.generate et non de la fonction nltk.parse.generate, qui semble prêter à confusion.

Je tape text1.generate(), je suis censé obtenir une liste de phrases dans le style de Moby Dick. Au lieu de cela, tout ce que j'obtiens est le message d'erreur TypeError: generate() missing 1 required positional argument: 'words' .

Cela semble provenir de site-packages/nltk/text.py qui est défini comme def generate(self, words) et son seul but semble être d'afficher un avertissement indiquant que la fonction du générateur n'est plus disponible, ce qu'il ne parvient pas à faire même si vous transmettez une valeur pour l'argument des mots.

J'utilise nltk version 3.5.2.

Cela peut être fermé maintenant depuis generate was added .

Merci @Copper-Head

La génération a-t-elle été supprimée à nouveau ? Je suis le livre et j'ai l'erreur generate() missing 1 required positional argument: 'words' . Une aide, s'il vous plaît ?

Toujours des problèmes avec cette fonction :/

@Tserewara @AlbertSawZ quelle version de NLTK utilisez-vous ? Pourriez-vous poster un exemple minimal que nous pouvons essayer d'exécuter pour reproduire ce problème ?

Il est un peu difficile de vous aider en fonction des informations que vous avez envoyées jusqu'à présent :(

Je suis également le livre mais le problème persiste toujours
Toute autre manière pour cette fonction de génération

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

TypeError: generate() missing 1 required positional argument: 'words'
Cette page vous a été utile?
0 / 5 - 0 notes