Nltk: text.generate() no existe, pero todavía se hace referencia

Creado en 20 ago. 2014  ·  27Comentarios  ·  Fuente: nltk/nltk

He estado tratando de seguir el libro Procesamiento del lenguaje natural, pero justo en el primer capítulo me encuentro con algunos problemas. Después import ing todo desde nltk.book , mi primer pensamiento fue probar text3.generate() como se demostró en uno de los ejemplos. Por supuesto, obtuve AttributeError encantadores porque la clase Text aparentemente no tiene ese método en el NLTK que instalé.
Además, incluso ejecutar nltk.text.demo() intenta generar texto y devuelve el mismo error.
Por supuesto, no pude encontrar ninguna documentación para el método generate() , así que asumo que fue eliminado; si ese es el caso, debe eliminar las referencias a él de nltk.text.demo() y del libro de texto.

Estoy usando Python 2.7.8 con NLTK 3.0.0b1 (que era la versión disponible a través del paquete de instalación de Windows de PyPI en el momento de escribir este artículo). El ejemplo text3.generate() se encuentra tanto en la versión anterior como en la actual del libro de texto.

language-model

Comentario más útil

Esto todavía se menciona en el Capítulo uno del libro: http://www.nltk.org/book/ch01.html

No es gran cosa, pero probablemente soy típico en pasar unos minutos buscando en Google esto como un problema. Esos pocos minutos, sin embargo, muchas personas están trabajando en el libro... :)

Todos 27 comentarios

Perdón por la confusion. Hubo problemas con el modelado de lenguaje de NLTK
class y así lo eliminamos hasta que se resuelvan los problemas. Esto rompió el
funcionalidad de generación de texto. He actualizado la versión en línea del libro.
con una nota sobre esto, y actualizó la demostración de texto (que se incluirá en
versión 3.0.0b2 pronto).

-steven pájaro

El 20 de agosto de 2014 a las 17:12, Kasran [email protected] escribió:

He estado tratando de seguir junto con el Procesamiento del Lenguaje Natural
libro, pero justo en el primer capítulo me encuentro con algunos problemas. Después
importando todo desde nltk.book, mi primer pensamiento fue probar
text3.generate() como se demostró en uno de los ejemplos. Por supuesto yo
obtuve un AttributeError encantador porque la clase Text aparentemente no
tener ese método en el NLTK que instalé.
Además, incluso ejecutar nltk.text.demo() intenta generar texto -
y devuelve el mismo error.
Por supuesto, no pude encontrar ninguna documentación para el método generate(),
así que asumo que fue eliminado; si ese es el caso, debe eliminar
hace referencia a él desde nltk.text.demo() y desde el libro de texto.

Estoy usando Python 2.7.8 con NLTK 3.0.0b1. El ejemplo text3.generate() es
tanto en la versión antigua como en la actual del libro de texto.

Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/nltk/nltk/issues/736.

¡Bien! Totalmente comprensible. Supongo que tendré que escribir mis propios chatterbots con cadenas de Markov aplicadas, a la vieja usanza, hasta que se arregle.

Gracias por su pronta respuesta.

También me encontré con este mismo problema que me desconcertó un poco. Gracias por este hilo al que me llevó la búsqueda de Google.

mmm. ¿Esto ayuda (https://github.com/alvations/nltk/blob/develop/nltk/translate/decoder.py#L33)? El modelo de lenguaje parece funcionar bien al decodificar. Pronto publicaré un código actualizado y debidamente documentado para la biblioteca translate .

Lo siento, estuve fuera para hackathon, talleres y conferencias de forma consecutiva. Intentaré impulsarlo para el final de esta semana, espero.

Ah, pero mi modelo carga un modelo precacluado, no construye el modelo desde cero. ¿Alguien está construyendo un módulo de modelo de lenguaje?

Veo dos problemas con el código actual (además del hecho de que no funciona), en cuanto a la experiencia del usuario:

  1. En el libro, el método no toma ningún parámetro (al menos cuando aparece por primera vez en el libro), pero la firma actual requiere un parámetro words . Entonces, cuando sigues el libro, lo que obtienes es lo siguiente:

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

    Esto no es muy fácil de usar. Sugiero dar a las palabras un valor predeterminado en la firma (por ejemplo words=None ) para evitar este problema.

  2. Usando la consola Python normal siguiendo las instrucciones del libro, no veo los DeprecationWarning que registra el código. Esto es lo que hice desde el principio:

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

    Dado que generate() no está simplemente en desuso como "se eliminará", sino también como "ya no funciona", sugiero generar NotImplementedError en lugar de registrar una advertencia. Hacerlo haría que el código existente fallara (que es lo que a mí, como desarrollador, me gustaría que hiciera en lugar de aparentemente tener éxito sin hacer realmente lo que solía hacer) y aparecería en la consola para los lectores de libros.

Si está de acuerdo con estos cambios pero no tiene el tiempo o la motivación para implementarlos, hágamelo saber y le enviaré una solicitud de fusión.

También me pregunto si podríamos eliminar las referencias a generate() del libro. Al menos en el capítulo 1, no parecen ser requeridos por otras secciones del capítulo.

En mi opinión, estoy totalmente de acuerdo con ustedes en eliminar (generar () referencias).

Esto todavía se menciona en el Capítulo uno del libro: http://www.nltk.org/book/ch01.html

No es gran cosa, pero probablemente soy típico en pasar unos minutos buscando en Google esto como un problema. Esos pocos minutos, sin embargo, muchas personas están trabajando en el libro... :)

Bump, generar () las referencias todavía están allí.

Todavía está allí ahora.

Todavía está allí ahora.

Todavía está allí ahora (en la versión Safari Online del libro NLTK)

Oh, veo que se insertó una nota después del ejemplo, que generar () se eliminó de NLTK 3, lo siento

sigue arrojando error

El método generate debe estar presente a partir de NLTK 3.4. ¡Mira el paquete nltk.lm !

Hola, ¿cuáles son las posibles alternativas actuales para generar automáticamente texto, en reemplazo de esta función? Estoy leyendo el texto generado del Capítulo 1 del libro, y también me gustaría producir oraciones maravillosas como "En el principio de su hermano es un hombre peludo" o esta pregunta fundamental: "¿Así será tu salario?" .

Lo siento @ eric-burel, no entiendo muy bien tu comentario. Voy a intentar expresarlo con mis palabras y tú me dices si es correcto, ¿vale?

¿Desea alguna otra forma de generar texto que no sea entrenar un modelo de lenguaje y usar su método generate ?

Hola, lo siento, no estaba claro, solo me estaba riendo mucho leyendo el libro de PNL con Python cuando llegué a la parte de generación de texto, ya que las oraciones son muy realistas sin dejar de ser raras, y encuentro este tema interesante en general.
Me pregunto cuál es la alternativa actual recomendada para generar texto automáticamente, en reemplazo de generate() . ¿Debo actualizar algo o cargar otra biblioteca?

Bueno, a partir de la versión 3.4 de NLTK, en realidad tienes acceso a generate() . Echa un vistazo a la documentación del módulo lm :

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

También podría crear su propia generación, si lo desea: http://www.cyber-omelette.com/2017/01/markov.html

Estoy intentando seguir los ejemplos del libro O'Reilly Natural Language Processing with Python, que es como llegué a esta discusión. Creo que la gente está hablando de la función nltk.text.generate y no de la función nltk.parse.generate, que parece estar causando cierta confusión.

Escribo text1.generate(), se supone que debo obtener una lista de frases al estilo de Moby Dick. En cambio, todo lo que recibo es el mensaje de error TypeError: generate() missing 1 required positional argument: 'words' .

Esto parece provenir de site-packages/nltk/text.py, que se define como def generate(self, words) y su único propósito parece ser imprimir una advertencia de que la función del generador ya no está disponible, lo que no hace. incluso si pasa un valor para el argumento de las palabras.

Estoy usando la versión 3.5.2 de nltk.

Esto se puede cerrar ahora desde generate was added .

Gracias @Copper-Head

¿Se eliminó generar nuevamente? Estoy siguiendo el libro y obtuve el error generate() missing 1 required positional argument: 'words' . ¿Alguna ayuda, por favor?

Todavía tengo problemas con esta función :/

@Tserewara @AlbertSawZ , ¿qué versión de NLTK está usando? ¿Podría publicar un ejemplo mínimo que podamos intentar ejecutar para reproducir este problema?

Es un poco difícil ayudarte según la información que has enviado hasta ahora :(

Yo también sigo el libro pero el problema persiste.
Cualquier forma alternativa para esta función de generación

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

TypeError: generate() missing 1 required positional argument: 'words'
¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

stevenbird picture stevenbird  ·  4Comentarios

goodmami picture goodmami  ·  4Comentarios

vezeli picture vezeli  ·  3Comentarios

talbaumel picture talbaumel  ·  4Comentarios

Chris00 picture Chris00  ·  3Comentarios