Os corretores ortográficos são ferramentas essenciais no Processamento de Linguagem Natural (PLN), sendo amplamente utilizados em editores de texto, assistentes virtuais e chatbots. Neste artigo, vou te ensinar como criar um corretor ortográfico simples usando Python, aproveitando o algoritmo de Smith-Waterman, que é muito utilizado para comparação de sequências em bioinformática, mas também funciona bem para encontrar similaridade entre palavras!
Se você é estudante de computação ou um entusiasta de inteligência artificial, este tutorial vai te ajudar a entender conceitos fundamentais do PLN e como implementar correção ortográfica baseada em similaridade de palavras.
O que é um Corretor Ortográfico e Como Funciona?
Um corretor ortográfico tem dois componentes principais:
- Detecção de erros: Ele identifica palavras que não pertencem ao vocabulário correto.
- Sugestão de correções: Ele compara a palavra errada com um banco de palavras corretas e sugere a mais próxima.
Corretores modernos utilizam modelos avançados de IA, mas aqui vamos criar uma versão simples e eficiente usando o algoritmo de Smith-Waterman.
Entendendo o Algoritmo de Smith-Waterman
O Smith-Waterman é um algoritmo de alinhamento local que compara sequências de caracteres, atribuindo pontos para correspondências, penalizando substituições e omissões e encontrando a melhor combinação possível.
Por que usar o Smith-Waterman para correção ortográfica?
- Ele permite comparar palavras com erros pequenos (exemplo: “brilhantess” → “brilhantes”).
- É eficiente para detectar e corrigir erros comuns de digitação.
- Funciona bem mesmo com vocabulários pequenos.
Passo a Passo: Criando o Corretor Ortográfico em Python
Agora vamos para a prática!
1. Importando Bibliotecas
Primeiro, instalamos e importamos as bibliotecas necessárias:
import numpy as np
2. Definindo o Vocabulário
Nosso corretor verificará palavras com base no seguinte vocabulário:
vocabulario = ["O", "A", "Os", "As", "homem", "homens", "mulher", "mulheres",
"é", "são", "inteligente", "inteligentes", "brilhante", "brilhantes"]
3. Implementando o Algoritmo de Smith-Waterman
Agora, criamos a função que calcula a similaridade entre duas palavras:
def smith_waterman(w1, w2, match=2, mismatch=-1, gap=-1):
m, n = len(w1), len(w2)
H = np.zeros((m+1, n+1), dtype=int)
max_score = 0
max_pos = None
for i in range(1, m+1):
for j in range(1, n+1):
score_match = H[i-1, j-1] + (match if w1[i-1] == w2[j-1] else mismatch)
score_delete = H[i-1, j] + gap
score_insert = H[i, j-1] + gap
H[i, j] = max(0, score_match, score_delete, score_insert)
if H[i, j] > max_score:
max_score = H[i, j]
max_pos = (i, j)
return max_score
Essa função retorna um score de similaridade entre palavras. Quanto maior, mais parecidas elas são!
4. Função para Corrigir Palavras
Agora, criamos uma função que busca a palavra mais próxima no vocabulário com base na pontuação do algoritmo:
def corrigir_palavra(palavra, vocabulario):
melhor_palavra = None
melhor_score = -1
for voc in vocabulario:
score = smith_waterman(palavra, voc)
if score > melhor_score:
melhor_score = score
melhor_palavra = voc
return melhor_palavra
5. Função para Identificar e Corrigir Erros no Texto
Aqui está a função completa do corretor ortográfico:
def corretor_ortografico(texto, vocabulario):
palavras = texto.split()
palavras_erradas = {}
for palavra in palavras:
if palavra not in vocabulario:
correcao = corrigir_palavra(palavra, vocabulario)
palavras_erradas[palavra] = correcao
return palavras_erradas
Testando o Corretor Ortográfico
Agora, vamos testar o nosso corretor com algumas frases:
frases_exemplo = [
"o homem é inteligentr",
"Os homens sõ brilhantess",
"As muleres são brilantes",
"A milher é inteliggente"
]
for frase in frases_exemplo:
print(f"Frase: {frase}")
erros = corretor_ortografico(frase, vocabulario)
for errada, sugestao in erros.items():
print(f"Palavra incorreta: {errada}, Sugestão: {sugestao}")
print()
Saída esperada:
Frase: o homem é inteligentr
Palavra incorreta: inteligentr, Sugestão: inteligente
Frase: Os homens sõ brilhantess
Palavra incorreta: sõ, Sugestão: são
Palavra incorreta: brilhantess, Sugestão: brilhantes
Frase: As muleres são brilantes
Palavra incorreta: muleres, Sugestão: mulheres
Palavra incorreta: brilantes, Sugestão: brilhantes
Frase: A milher é inteliggente
Palavra incorreta: milher, Sugestão: mulher
Palavra incorreta: inteliggente, Sugestão: inteligente
Nosso corretor consegue identificar palavras erradas e sugerir as correções adequadas!
Conclusão
Criamos um corretor ortográfico eficiente usando Python e o algoritmo de Smith-Waterman. Esse método é ideal para correção ortográfica básica e pode ser expandido para incluir técnicas mais avançadas de PLN.
Próximos passos:
- Expandir o vocabulário para mais palavras.
- Integrar o modelo com um dicionário online.
- Aplicar aprendizado de máquina para melhorar as correções.
Se você quer aprender mais sobre Processamento de Linguagem Natural (PLN) e inteligência artificial, continue acompanhando o Janela do Dev!
Gostou do post tutorial? Comente abaixo e compartilhe sua opinião!