Corretor Ortográfico

Criando um Corretor Ortográfico com Python e o Algoritmo de Smith-Waterman

Python Tutoriais

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:

  1. Detecção de erros: Ele identifica palavras que não pertencem ao vocabulário correto.
  2. 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!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *