Nltk: text.generate() не существует, но на него все еще ссылаются

Созданный на 20 авг. 2014  ·  27Комментарии  ·  Источник: nltk/nltk

Я пытался следовать книге «Обработка естественного языка», но прямо в первой главе я столкнулся с некоторыми проблемами. После того, как import перебрал все из nltk.book , моей первой мыслью было попробовать text3.generate() , как было продемонстрировано в одном из примеров. Конечно, я получил прекрасные AttributeError , потому что класс Text, по-видимому, не имеет этого метода в NLTK, который я установил.
Кроме того, даже запуск nltk.text.demo() пытается создать сгенерированный текст и возвращает ту же ошибку.
Конечно, я не смог найти никакой документации по методу generate() , поэтому я предполагаю, что он был удален; если это так, вы должны удалить ссылки на него из nltk.text.demo() и из учебника.

Я использую Python 2.7.8 с NLTK 3.0.0b1 (эта версия была доступна через установочный пакет Windows от PyPI на момент написания этой статьи). Пример text3.generate() есть как в старой, так и в текущей версии учебника.

language-model

Самый полезный комментарий

Об этом до сих пор упоминается в первой главе книги: http://www.nltk.org/book/ch01.html .

Это неважно, но я, вероятно, обычно трачу несколько минут на гугление этой проблемы. Те несколько минут, сколько бы людей ни читали книгу... :)

Все 27 Комментарий

Извините за путаницу. Были проблемы с языковым моделированием NLTK.
class, и поэтому мы удалили его, пока проблемы не будут решены. Это сломало
функционал генерации текста. Я обновил онлайн-версию книги
с примечанием об этом и обновил текстовую демонстрацию (для включения в
выпуск 3.0.0b2 скоро).

-Стивен Бёрд

20 августа 2014 г., 17:12, [email protected] написал:

Я пытался следить за обработкой естественного языка
книга, но прямо в первой главе я сталкиваюсь с некоторыми проблемами. После
импортируя все из nltk.book, моей первой мыслью было попробовать
text3.generate(), как было продемонстрировано в одном из примеров. Конечно я
получил прекрасный AttributeError, потому что класс Text, по-видимому, не
есть этот метод в NLTK, который я установил.
Кроме того, даже запуск nltk.text.demo() пытается создать сгенерированный текст -
и возвращает ту же ошибку.
Конечно, я не смог найти никакой документации по методу generate(),
поэтому я предполагаю, что он был удален; если это так, вы должны удалить
ссылки на него из nltk.text.demo() и из учебника.

Я использую Python 2.7.8 с NLTK 3.0.0b1. Пример text3.generate()
как в старой, так и в текущей версии учебника.

Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/nltk/nltk/issues/736.

Хорошо! Совершенно понятно. Думаю, мне придется написать своих собственных болтунов с примененными цепями Маркова, старым грубым способом, пока это не будет исправлено.

Спасибо за ваш быстрый ответ.

Я также столкнулся с этой же проблемой, которая меня немного озадачила. Спасибо за эту тему, к которой меня привел поиск Google.

Хм. это помогает (https://github.com/alvations/nltk/blob/develop/nltk/translate/decoder.py#L33)? Языковая модель отлично работает при декодировании. Я скоро выпущу обновленный и должным образом задокументированный код для библиотеки translate .

Извините, я отсутствовал на хакатоне, семинарах и конференциях подряд. Я постараюсь выложить его к концу этой недели, я надеюсь.

Ах, но моя модель загружает предварительно рассчитанную модель, а не строит модель с нуля. Кто-нибудь строит модуль языковой модели?

Я вижу две проблемы с текущим кодом (помимо того, что он не работает) с точки зрения взаимодействия с пользователем:

  1. В книге метод не принимает никаких параметров (по крайней мере, когда он впервые появляется в книге), но для текущей подписи требуется параметр words . Итак, когда вы будете следовать книге, вы получите следующее:

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

    Это не очень удобно. Я предлагаю присвоить словам значение по умолчанию в подписи (например, words=None ), чтобы избежать этой проблемы.

  2. Используя обычную консоль Python, следуя инструкциям книги, я не вижу DeprecationWarning , которые регистрирует код. Вот что я сделал с самого начала:

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

    Поскольку generate() не просто устарел, как в случае «он будет удален», но также и как «он больше не работает», я предлагаю поднять NotImplementedError вместо того, чтобы записывать предупреждение. Это приведет как к сбою существующего кода (именно этого я, как разработчик, хотел бы, чтобы он делал, а не к кажущемуся успеху, фактически не делая того, что он делал раньше), так и к отображению в консоли для читателей книг.

Если вы согласны с этими изменениями, но у вас нет времени или мотивации для их реализации, просто дайте мне знать, и я отправлю запрос на слияние.

Мне также интересно, можем ли мы удалить ссылки на generate() из книги. По крайней мере, в главе 1 они, кажется, не требуются в других разделах главы.

На мой взгляд, я полностью согласен с вами, ребята, чтобы удалить ссылки (сгенерировать()).

Об этом до сих пор упоминается в первой главе книги: http://www.nltk.org/book/ch01.html .

Это неважно, но я, вероятно, обычно трачу несколько минут на гугление этой проблемы. Те несколько минут, сколько бы людей ни читали книгу... :)

Ссылки Bump, generate() все еще там.

Это все еще там сейчас.

Это все еще там сейчас.

Он все еще там (в Safari Online версии книги NLTK)

О, я вижу, после примера было вставлено примечание о том, что функция generate() была удалена из NLTK 3 — извините.

Все равно выдает ошибку

Метод generate должен присутствовать, начиная с NLTK 3.4. Обратите внимание на пакет nltk.lm !

Привет, какие возможные текущие альтернативы автоматической генерации текста вместо этой функции? Я читаю сгенерированный текст из Главы 1 книги, и я тоже хотел бы произвести чудесные предложения, такие как «В начале его брат — волосатый человек» или этот фундаментальный вопрос: «Какой будет твоя плата?» .

Извините, @eric-burel, я не совсем понимаю ваш комментарий. Я попытаюсь сформулировать это своими словами, а ты скажешь мне, правильно ли это, хорошо?

Вам нужен другой способ генерации текста , кроме обучения языковой модели и использования ее метода generate ?

Привет, извините, я был неясен, я просто посмеялся, читая книгу НЛП с Python, когда добрался до части генерации текста, поскольку предложения очень реалистичны, но все же странны, и я нахожу эту тему интересной в целом.
Мне просто интересно, какая текущая рекомендуемая альтернатива для автоматического создания текста вместо generate() . Должен ли я обновить что-либо или загрузить другую библиотеку?

Ну, начиная с NLTK версии 3.4, у вас фактически есть доступ к generate() . Взгляните на документацию по модулю lm :

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

Вы также можете создать свой собственный генератор, если хотите: http://www.cyber-omelette.com/2017/01/markov.html

Я пытаюсь следовать примерам из книги O'Reilly «Обработка естественного языка с помощью Python», и именно так я пришел к этому обсуждению. Я думаю, что люди говорят о функции nltk.text.generate, а не о функции nltk.parse.generate, которая, кажется, вызывает некоторую путаницу.

Я набираю text1.generate(), я должен получить список фраз в стиле Моби Дика. Вместо этого все, что я получаю, это сообщение об ошибке TypeError: generate() missing 1 required positional argument: 'words' .

Похоже, это исходит от site-packages/nltk/text.py, который определяется как def generate(self, words) , и его единственная цель, по-видимому, состоит в том, чтобы напечатать предупреждение о том, что функция генератора больше недоступна, что она не делает. даже если вы передадите значение аргумента words.

Я использую nltk версии 3.5.2.

Теперь это можно закрыть, так как generate was added .

Спасибо @Copper-Head

Генерация снова удалена? Я слежу за книгой и получил ошибку generate() missing 1 required positional argument: 'words' . Любая помощь, пожалуйста?

Все еще есть проблемы с этой функцией :/

@Tserewara @AlbertSawZ какую версию NLTK вы используете? Не могли бы вы опубликовать минимальный пример, который мы можем попробовать запустить, чтобы воспроизвести эту проблему?

Немного сложно помочь вам, основываясь на той информации, которую вы отправили до сих пор :(

Я также слежу за книгой, но проблема все еще сохраняется
Любой альтернативный способ для этой функции генерации

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

TypeError: generate() missing 1 required positional argument: 'words'
Была ли эта страница полезной?
0 / 5 - 0 рейтинги