1
resposta

A taxa de acerto caiu com o gerador turbinado

Olá!

Fiz a minha versão do corretor com o gerador turbinado alterando a função original ao invés de criar uma função separada.

Funções para o gerador de palavras:

def insere_letras(palavra):
    letras = 'abcdefghijklmnopqrstuvwxyzáâàãéêèíÇîìóôõòúûùç'
    fatias = [(palavra[:i], palavra[i:]) for i in range(len(palavra)+1)]
    return [e+letra+d for e, d in fatias for letra in letras]

def deleta_letras(palavra):
    fatias = [(palavra[:i], palavra[i+1:]) for i in range(len(palavra)+1)]
    return [e+d for e, d in fatias]

def troca_letras(palavra):
    letras = 'abcdefghijklmnopqrstuvwxyzáâàãéêèíÇîìóôõòúûùç'
    fatias = [(palavra[:i], palavra[i+1:]) for i in range(len(palavra)+1)]
    return [e+letra+d for e, d in fatias for letra in letras]

def inverte_letras(palavra):
    fatias = [(palavra[:i], palavra[i:]) for i in range(len(palavra)+1)]
    return [e + d[1:2] + d[0:1] + d[2:] for e, d in fatias if len(d)>1]

Gerador de palavras:

def gerador_de_palavras(palavra):
    return insere_letras(palavra)+deleta_letras(palavra)+troca_letras(palavra)+inverte_letras(palavra)

Corretor:

def corretor(palavra):
    palavras_geradas = gerador_de_palavras(palavra)
    novas_palavras = []
    for palavra_gerada in palavras_geradas:
        novas_palavras += gerador_de_palavras(palavra_gerada)
    novas_palavras = set(novas_palavras)
    return max(novas_palavras, key=probabilidade)

Avaliador:

def avaliador(testes, vocabulario):
    acertos = 0
    palavras_desconhecidas = 0
    for correta, incorreta in testes:
        if corretor(incorreta) == correta: acertos += 1
        else: palavras_desconhecidas += (correta not in vocabulario)
    taxa_de_acerto = acertos/len(testes)
    taxa_de_desconhecimento = palavras_desconhecidas/len(testes)
    return (taxa_de_acerto, taxa_de_desconhecimento)

O problema é que a taxa de acerto cai para 54,84%. Não entendi por que isso ocorre, uma vez que são geradas mais combinações de palavras agora.

1 resposta

Olá, Lucas. Bom?

Então, eu acho que o que ocorre é que você obriga todas as palavras geradas a serem alteradas e assim perde algumas palavras que podem estar certas. Tenta, na hora de criar a lista novas_palavras já deixar as palavras_geradas dentro da lista antes do loop for e vê se melhora o resultado.

def corretor(palavra):
    palavras_geradas = gerador_de_palavras(palavra)
    novas_palavras = [palavras_geradas]
    for palavra_gerada in palavras_geradas:
        novas_palavras += gerador_de_palavras(palavra_gerada)
    novas_palavras = set(novas_palavras)
    return max(novas_palavras, key=probabilidade)