• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ZNez

'Google Spell Checker'

18 mensagens neste tópico

Boas, estou a iniciar o estudo em programação através do programa python.

Estava a tentar perceber/aplicar o programa do Norvig para a google (o spell checker, mas dá-me sempre erro). Alguém sabe o que estou a fazer mal?

Obrigado.

Programa:

import re, collections

def words(text): return re.findall('[a-z]+', text.lower()) 

def train(features):
    model = collections.defaultdict(lambda: 1)
    for f in features:
        model[f] += 1
    return model

NWORDS = train(words(file('big.txt').read()))

alphabet = 'abcdefghijklmnopqrstuvwxyz'

def edits1(word):
    n = len(word)
    return set([word[0:i]+word[i+1:] for i in range(n)] +                     # deletion
               [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # transposition
               [word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # alteration
               [word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet])  # insertion

def known_edits2(word):
    return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)

def known(words): return set(w for w in words if w in NWORDS)

def correct(word):
    candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
    return max(candidates, key=lambda w: NWORDS[w])

Erro:

C:/Python24/pythonw.exe -u  "C:/Documents and Settings/Carlos Afonso/Ambiente de trabalho/pydsc-0.2/pydsc-0.2/pydsc.py"

Traceback (most recent call last):

  File "C:/Documents and Settings/Carlos Afonso/Ambiente de trabalho/pydsc-0.2/pydsc-0.2/pydsc.py", line 75, in ?

    from enchant import checker

ImportError: No module named enchant

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.

Porque provavelmente esse import é feito noutro módulo. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.

Porque provavelmente esse import é feito noutro módulo. :P

Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.

Porque provavelmente esse import é feito noutro módulo. :P

Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.

Mas como vês, ele não tem 75 linhas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.

Porque provavelmente esse import é feito noutro módulo. :P

Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.

Mas como vês, ele não tem 75 linhas.

Daí eu ter perguntado se era o código todo

Exactly, duh. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete [code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.

Para que precisas do código se o erro é faltar um módulo?

Porque no código não há nenhum import que fale em enchant.

Porque provavelmente esse import é feito noutro módulo. :)

Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.

Mas como vês, ele não tem 75 linhas.

Daí eu ter perguntado se era o código todo

Exactly, duh. :)

Nepes, se o interpretador está a falar de uma linha 75, pode tar a falar de um módulo qualquer que foi importado por este programa. Por isso o erro fala deste ficheiro e não do módulo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete

[code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.
[/quote]
Para que precisas do código se o erro é faltar um módulo?
[/quote]Porque no código não há nenhum import que fale em enchant.
[/quote]
Porque provavelmente esse import é feito noutro módulo. :)
[/quote]Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.
[/quote]
Mas como vês, ele não tem 75 linhas.
[/quote]

Daí eu ter perguntado se era o código todo
Exactly, duh. :)
[/quote]
Nepes, se o interpretador está a falar de uma linha 75, pode tar a falar de um módulo qualquer que foi importado por este programa. Por isso o erro fala deste ficheiro e não do módulo.
[/quote]Nesse caso, no traceback aparecia "import modulo". Ora vê:
>>> import dsfsdfsdf
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    import dsfsdfsdf
  File "/home/djthyrax/dsfsdfsdf.py", line 1, in <module>
    lancar_uma_exception_lulz()
NameError: name 'lancar_uma_exception_lulz' is not defined[/quote]
Isto foi no IDLE, mas num .py o resultado era o mesmo. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete

[code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.
[/quote]
Para que precisas do código se o erro é faltar um módulo?
[/quote]Porque no código não há nenhum import que fale em enchant.
[/quote]
Porque provavelmente esse import é feito noutro módulo. :)
[/quote]Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.
[/quote]
Mas como vês, ele não tem 75 linhas.
[/quote]

Daí eu ter perguntado se era o código todo
Exactly, duh. :)
[/quote]
Nepes, se o interpretador está a falar de uma linha 75, pode tar a falar de um módulo qualquer que foi importado por este programa. Por isso o erro fala deste ficheiro e não do módulo.
[/quote]Nesse caso, no traceback aparecia "import modulo". Ora vê:
>>> import dsfsdfsdf
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    import dsfsdfsdf
  File "/home/djthyrax/dsfsdfsdf.py", line 1, in <module>
    lancar_uma_exception_lulz()
NameError: name 'lancar_uma_exception_lulz' is not defined[/quote]
Isto foi no IDLE, mas num .py o resultado era o mesmo. 

Ok! Atão se calhar ele não postou o código todo!

Mas a minha primeira resposta tá certa. Erro = Falta do módulo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete

[code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.
[/quote]
Para que precisas do código se o erro é faltar um módulo?
[/quote]Porque no código não há nenhum import que fale em enchant.
[/quote]
Porque provavelmente esse import é feito noutro módulo. :)
[/quote]Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.
[/quote]
Mas como vês, ele não tem 75 linhas.
[/quote]

Daí eu ter perguntado se era o código todo
Exactly, duh. :)
[/quote]
Nepes, se o interpretador está a falar de uma linha 75, pode tar a falar de um módulo qualquer que foi importado por este programa. Por isso o erro fala deste ficheiro e não do módulo.
[/quote]Nesse caso, no traceback aparecia "import modulo". Ora vê:
>>> import dsfsdfsdf
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    import dsfsdfsdf
  File "/home/djthyrax/dsfsdfsdf.py", line 1, in <module>
    lancar_uma_exception_lulz()
NameError: name 'lancar_uma_exception_lulz' is not defined[/quote]
Isto foi no IDLE, mas num .py o resultado era o mesmo. 

Ok! Atão se calhar ele não postou o código todo!

Mas a minha primeira resposta tá certa. Erro = Falta do módulo.

Isso nunca teve em causa, apenas não sabiamos onde tinhamos que alterar as coisas. :)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens aí o código todo postado?

Usa o Geshi para se ver melhor o código: mete

[code(igual)python] CODIGO AQUI [(barra do 7)code] -> troca o que ta entre parentesis pelos simbolos correspondentes.
[/quote]
Para que precisas do código se o erro é faltar um módulo?
[/quote]Porque no código não há nenhum import que fale em enchant.
[/quote]
Porque provavelmente esse import é feito noutro módulo. :)
[/quote]Se olhares com atenção para o traceback, vês que o import é feito no ficheiro que ele está a executar.
[/quote]
Mas como vês, ele não tem 75 linhas.
[/quote]

Daí eu ter perguntado se era o código todo
Exactly, duh. :)
[/quote]
Nepes, se o interpretador está a falar de uma linha 75, pode tar a falar de um módulo qualquer que foi importado por este programa. Por isso o erro fala deste ficheiro e não do módulo.
[/quote]Nesse caso, no traceback aparecia "import modulo". Ora vê:
>>> import dsfsdfsdf
Traceback (most recent call last):
  File "<pyshell#15>", line 1, in <module>
    import dsfsdfsdf
  File "/home/djthyrax/dsfsdfsdf.py", line 1, in <module>
    lancar_uma_exception_lulz()
NameError: name 'lancar_uma_exception_lulz' is not defined[/quote]
Isto foi no IDLE, mas num .py o resultado era o mesmo. 

Ok! Atão se calhar ele não postou o código todo!

Mas a minha primeira resposta tá certa. Erro = Falta do módulo.

Isso nunca teve em causa, apenas não sabiamos onde tinhamos que alterar as coisas. :D

OK! :D (já repararam no número de quotes deste post? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava para comentar isso. Este post está interessante no que toca a quotes.. e ao facto de o rapaz que postou a duvida nunca mais ter dito nada... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava para comentar isso. Este post está interessante no que toca a quotes.. e ao facto de o rapaz que postou a duvida nunca mais ter dito nada... :(

Era o que ia dizer. Deixemos este tópico de parte, pois o criador do tópico não disse nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora