Apos finalizar o curso fiquei pensando em como poderia melhorar o corretor e juntar os dois em um só, então fiz o seguinte:
def gerador_palavras(palavra):
fatias = [(palavra[:i], palavra[i:]) for i in range(len(palavra) +1)]
letras = 'abcdefghijklmnopqrstuvwxyzáâàãéêèẽíîìĩóôõòúûùũç'
palavras_geradas = [E + letra + D for E, D in fatias for letra in letras]
palavras_geradas += [E + D[1:] for E, D in fatias]
palavras_geradas += [E + letra + D[1:] for E, D in fatias for letra in letras]
palavras_geradas += [E + (D[1] + D[0] + D[2:] if len(D) > 1 else '') for E, D in fatias]
return palavras_geradas
total_palavras = len(palavras)
frequencia = nltk.FreqDist(palavras)
def probabilidade(palavra_gerada):
return frequencia[palavra_gerada] / total_palavras
def gerador_turbinado(palavras_geradas):
novas_palavras = []
for palavra in palavras_geradas:
novas_palavras += gerador_palavras(palavra)
return novas_palavras
vocabulario = set(palavras)
def lista_candidatos(palavras_geradas):
candidatos = []
palavras_geradas = set(palavras_geradas)
for palavra in palavras_geradas:
if palavra in vocabulario:
candidatos.append(palavra)
return candidatos
def corretor_turbinado(palavras_geradas):
palavra_correta = ''
palavras_geradas += gerador_turbinado(set(palavras_geradas))
candidatos = lista_candidatos(palavras_geradas)
if (len(candidatos) > 0):
palavra_correta = max(candidatos, key=probabilidade)
return palavra_correta
def corretor(palavra):
palavra_correta = ''
palavras_geradas = gerador_palavras(palavra)
candidatos = lista_candidatos(palavras_geradas)
if (len(candidatos) > 0):
palavra_correta = max(candidatos, key=probabilidade)
if (probabilidade(palavra_correta) < 0.0001):
palavra_correta = corretor_turbinado(palavras_geradas)
else:
palavra_correta = corretor_turbinado(palavras_geradas)
return palavra_correta
Consegui uma taxa de acerto de 85%, oque vocês acham desse novo código ?