Ao terminar o curso fiquei com a impressão de que podíamos juntar os corretores e obter resultados ainda melhores.
Com isso, utilizei os recursos usados para diminuir o tempo de processamento do "corretor_turbinado" no corretor simples e então agrupei os dois na mesma função. Um ponto de atenção é que ao localizar a palavra no vocabulário usando o simples, eu optei por não fazer uma varredura desta palavra usando o turbinado, desta forma os resultados finais foram para:
83.87% de 186 palavras, desconhecida é 6.99% Wall time: 8.13 s
Antes dos ajustes estes eram:
52.15% de 186 palavras, desconhecida é 6.99% Wall time: 31 s
Segue abaixo as funções criadas:
def corretor_final(palavra):
palavras_geradas = gerador_palavras(palavra)
palavra_correta_s = max(palavras_geradas, key=probabilidade)
if palavra_correta_s in vocabulario:
palavra_correta = palavra_correta_s
else:
palavras_turbinado = gerador_turbinado(palavras_geradas)
todas_palavras = set(palavra_geradas + palavras_turbinado)
candidatos = [palavra]
for palavra in todas_palavras:
if palavra in vocabulario:
candidatos.append(palavra)
palavra_correta = max(candidatos, key=probabilidade)
return palavra_correta
def avaliador_final(testes, vocabulario):
n_palavras = len(testes)
acertou = 0
desconhecida = 0
for correta, errada in testes:
palavra_corrigida = corretor_final(errada)
desconhecida += (correta not in vocabulario)
if palavra_corrigida == correta:
acertou += 1
else:
print(correta + "-" + errada + "-" + corretor(errada) + "-" + palavra_corrigida)
taxa_acerto = round(acertou*100/n_palavras, 2)
taxa_desconhecida = round(desconhecida*100/n_palavras, 2)
print(f"{taxa_acerto}% de {n_palavras} palavras, desconhecida é {taxa_desconhecida}%")