Tenho tentado acompanhar o livro Natural Language Processing, mas logo no primeiro capítulo estou me deparando com alguns problemas. Depois de import
fazer tudo de nltk.book
, meu primeiro pensamento foi tentar text3.generate()
como foi demonstrado em um dos exemplos. Claro, eu consegui um adorável AttributeError
porque a classe Text aparentemente não tem esse método no NLTK que eu instalei.
Além disso, mesmo executando nltk.text.demo()
tenta fazer o texto gerado - e retorna o mesmo erro.
Claro, eu não consegui encontrar nenhuma documentação para o método generate()
, então estou assumindo que ele foi removido; se for esse o caso, você deve remover as referências a ele de nltk.text.demo()
e do livro.
Estou usando o Python 2.7.8 com NLTK 3.0.0b1 (que era a versão disponível através do pacote de instalação do Windows do PyPI no momento da redação deste artigo). O exemplo text3.generate()
está nas versões antigas e atuais do livro.
Desculpe pela confusão. Houve problemas com a modelagem de linguagem do NLTK
class e por isso a removemos até que os problemas sejam resolvidos. Isso quebrou o
funcionalidade de geração de texto. Atualizei a versão online do livro
com uma nota sobre isso, e atualizou o texto de demonstração (a ser incluído no
versão 3.0.0b2 em breve).
-Steven Bird
Em 20 de agosto de 2014 17:12, Kasran [email protected] escreveu:
Eu tenho tentado acompanhar o Processamento de Linguagem Natural
livro, mas logo no primeiro capítulo estou me deparando com algumas questões. Depois de
importando tudo do nltk.book, meu primeiro pensamento foi tentar
text3.generate() como foi demonstrado em um dos exemplos. Claro que eu
tem um adorável AttributeError porque a classe Text aparentemente não
tem esse método no NLTK que instalei.
Além disso, mesmo executando nltk.text.demo() tenta fazer o texto gerado -
e retorna o mesmo erro.
Claro, não consegui encontrar nenhuma documentação para o método generate(),
então estou assumindo que foi removido; se for esse o caso, você deve remover
referências a ele de nltk.text.demo() e do livro-texto.Estou usando Python 2.7.8 com NLTK 3.0.0b1. O exemplo text3.generate() é
tanto na versão antiga quanto na atual do livro.Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/nltk/nltk/issues/736.
Tudo bem! Totalmente compreensível. Acho que vou ter que escrever meus próprios chatterbots com correntes de Markov aplicadas, da maneira antiga e grosseira, até que seja consertado.
Obrigado por sua sua resposta rápida.
Também me deparei com esse mesmo problema que me intrigou um pouco. Obrigado por este tópico que a pesquisa do Google me levou.
Hmmm. isso ajuda (https://github.com/alvations/nltk/blob/develop/nltk/translate/decoder.py#L33)? O modelo de linguagem parece funcionar bem ao decodificar. Em breve, enviarei um código atualizado e devidamente documentado para a biblioteca translate
.
Desculpe, eu estava fora de hackathon, workshops e conferências consecutivas. Vou tentar empurrá-lo até o final desta semana, eu espero.
Ah, mas meu modelo carrega um modelo pré-caculado, não construindo o modelo do zero. Alguém está construindo um módulo de modelo de linguagem?
Vejo dois problemas com o código atual (além do fato de não funcionar), em termos de experiência do usuário:
No livro, o método não recebe nenhum parâmetro (pelo menos quando aparece pela primeira vez no livro), mas a assinatura atual requer um parâmetro words
. Então, quando você segue o livro, o que você obtém é o seguinte:
>>> text1.generate()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: generate() missing 1 required positional argument: 'words'
Isso não é muito amigável. Sugiro dar às palavras um valor padrão na assinatura (por exemplo words=None
) para evitar esse problema.
Usando o console Python regular seguindo as instruções do livro, não vejo o DeprecationWarning
que o código registra. Isto é o que eu fiz desde o início:
[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)
>>>
Como o generate()
não está simplesmente obsoleto como em “ele será removido”, mas também como em “não funciona mais”, sugiro aumentar um NotImplementedError
em vez de registrar um aviso. Fazer isso faria o código existente falhar (que é o que eu, como desenvolvedor, gostaria que fizesse em vez de aparentemente ter sucesso sem realmente fazer o que costumava fazer) e aparecer no console para leitores de livros.
Se você concorda com essas alterações, mas não tem tempo ou motivação para implementá-las, basta me informar e enviarei uma solicitação de mesclagem.
Também gostaria de saber se poderíamos remover as referências a generate()
do livro. Pelo menos no capítulo 1, eles não parecem ser exigidos por outras seções do capítulo.
Na minha opinião, concordo totalmente com vocês para remover (gerar () referências).
Isso ainda é referido no Capítulo um do livro: http://www.nltk.org/book/ch01.html
Não é grande coisa, mas provavelmente sou típico em gastar alguns minutos pesquisando isso como um problema. Esses poucos minutos, no entanto, muitas pessoas estão trabalhando no livro... :)
Bump, as referências generate() ainda estão lá.
Ainda está lá agora.
Ainda está lá agora.
Ainda está lá agora (na versão Safari Online do livro NLTK)
Oh, eu vejo que houve uma nota inserida após o exemplo, que generate() foi removido do NLTK 3 -- desculpe
ainda esta dando erro
O método generate
deve estar presente a partir do NLTK 3.4. Confira o pacote nltk.lm
!
Oi, quais são as possíveis alternativas atuais para gerar texto automaticamente, em substituição a esta função? Estou lendo o texto gerado do capítulo 1 do livro e também gostaria de produzir frases maravilhosas como "No princípio de seu irmão é um homem cabeludo" ou esta pergunta fundamental: "assim será o teu salário?" .
Desculpe @eric-burel, não entendi muito bem o seu comentário. Vou tentar formular com minhas palavras e você me diz se está correto, ok?
Você quer alguma outra maneira de gerar texto além de treinar um modelo de linguagem e usar seu método generate
?
Oi, desculpe eu não estava claro, eu estava apenas dando boas risadas lendo o livro de PNL com Python ao chegar à parte de geração de texto, pois as frases são muito realistas e ainda são estranhas, e acho esse assunto interessante em geral.
Eu só quero saber qual é a alternativa recomendada atual para gerar texto automaticamente, em substituição a generate()
. Devo atualizar smth ou carregar outra biblioteca?
Bem, começando com o NLTK versão 3.4, você realmente tem acesso a generate()
. Dê uma olhada na documentação do módulo lm
:
>>> from nltk import lm
>>> help(lm)
Também poderia construir seu próprio gerar, se você quiser: http://www.cyber-omelette.com/2017/01/markov.html ¶
Estou tentando seguir os exemplos do livro O'Reilly Natural Language Processing with Python, que é como cheguei a essa discussão. Acho que as pessoas estão falando sobre a função nltk.text.generate e não sobre a função nltk.parse.generate, que parece estar causando alguma confusão.
Eu digito text1.generate(), devo obter uma lista de frases no estilo de Moby Dick. Em vez disso, tudo o que recebo é a mensagem de erro TypeError: generate() missing 1 required positional argument: 'words'
.
Isso parece vir de site-packages/nltk/text.py, que é definido como def generate(self, words)
e seu único propósito parece ser imprimir um aviso de que a função do gerador não está mais disponível, o que não acontece mesmo se você passar um valor para o argumento words.
Estou usando o nltk versão 3.5.2.
Isso pode ser fechado agora desde generate was added
.
Obrigado @Copper-Head
Gerar foi removido novamente? Estou seguindo o livro e recebi o erro generate() missing 1 required positional argument: 'words'
. Alguma ajuda, por favor?
Ainda tendo problemas com esta função :/
@Tserewara @AlbertSawZ qual versão do NLTK você está usando? Você poderia postar um exemplo mínimo que podemos tentar executar para reproduzir esse problema?
É um pouco difícil ajudá-lo com base nas informações que você enviou até agora :(
Também estou seguindo o livro, mas o problema ainda persiste
Qualquer maneira alternativa para esta função de geração
TypeError Traceback (most recent call last)
<ipython-input-36-463eb7c367ab> in <module>()
----> 1 text3.generate()
TypeError: generate() missing 1 required positional argument: 'words'
Comentários muito úteis
Isso ainda é referido no Capítulo um do livro: http://www.nltk.org/book/ch01.html
Não é grande coisa, mas provavelmente sou típico em gastar alguns minutos pesquisando isso como um problema. Esses poucos minutos, no entanto, muitas pessoas estão trabalhando no livro... :)