Preveja a Próxima Palavra com Python: Guia Completo em 5 Passos!

Previsão de Palavras com Python: Um Guia Completo

Ao usar seu celular, você já deve ter reparado como ele sugere a próxima palavra, facilitando e agilizando a digitação. Essa funcionalidade, bastante prática, é útil em diversas situações, seja para enviar mensagens, realizar pesquisas na internet ou redigir e-mails. Mas como o celular consegue prever qual palavra você pretende usar em seguida?

Neste artigo, vamos explorar a criação de um sistema de previsão de palavras utilizando a linguagem Python.

Para um melhor acompanhamento, é recomendável ter um conhecimento básico de Processamento de Linguagem Natural (PNL). Caso seja iniciante nesse campo, não se preocupe; você pode obter uma base sólida em nosso artigo “PNL Simplificada”, onde abordamos os conceitos de forma clara e acessível.

Aplicações da Previsão da Próxima Palavra

  • A previsão da próxima palavra acelera e melhora a precisão da digitação em dispositivos móveis, sendo extremamente útil para mensagens de texto e aplicativos de comunicação.
  • Mecanismos de busca utilizam texto preditivo para sugerir consultas de pesquisa, agilizando a busca por informações relevantes.
  • Auxilia na correção automática de palavras com erros ortográficos, diminuindo erros de digitação em processadores de texto e clientes de e-mail.
  • Desenvolvedores e programadores se beneficiam do texto preditivo ao escrever código, com sugestões de funções, métodos e nomes de variáveis.
  • Plataformas online e serviços de streaming utilizam texto preditivo para recomendar conteúdo relevante aos usuários.

Vamos iniciar essa jornada juntos, desvendando essa interessante técnica de PNL passo a passo.

Preparação dos Dados

Inicialmente, importaremos as bibliotecas essenciais para o nosso projeto. Em seguida, definiremos um texto de exemplo que será usado para treinamento. Este texto pode ser substituído por qualquer dado textual de sua preferência.

Você também pode usar conjuntos de dados com textos, que podem ser encontrados facilmente em plataformas como o Kaggle.

    # Importar bibliotecas necessárias
    import nltk
    from nltk import ngrams
    from collections import defaultdict
    import random
  

Dados textuais de amostra, que serão utilizados para prever a próxima palavra:

    # Dados de texto de amostra
    text = """
    Em uma noite estrelada e luminosa na peculiar e enigmática cidade de Serendipity, 
    uma jovem e curiosa exploradora chamada Amelia embarcou em uma aventura extraordinária. 
    Com sua fiel lupa em mãos e um espírito indomável, ela partiu em busca do elusivo tesouro de Elysian, escondido nas profundezas da floresta labiríntica. 
    Enquanto se aventurava pelas matas verdejantes, Amelia encontrou um esquilo excêntrico e falante chamado Percival, que falava em enigmas e a guiava em direção ao paradeiro do tesouro. 
    A floresta estava repleta de flora bioluminescente, iluminando seu caminho com um caleidoscópio de cores. 
    Amelia logo alcançou um precipício com vista para uma cachoeira cerúlea e inspiradora, com suas águas em cascata ecoando uma melódica serenata. 
    Ao lado da cachoeira, havia uma pedra colossal coberta de musgo com inscrições crípticas. 
    Com a ajuda de Percival, ela decifrou as runas antigas e descobriu a entrada para o tesouro. 
    Dentro, ela descobriu um baú opulento adornado com filigrana dourada intrincada. 
    Ao abri-lo, uma sinfonia de joias cintilantes, pedras preciosas radiantes e artefatos brilhantes a saudou com um brilho etéreo. 
    O tesouro de Elysian era dela, um testemunho de sua coragem destemida e curiosidade insaciável. 
    O retorno de Amelia a Serendipity foi celebrado com uma festa jubilosa, e sua notável jornada se tornou uma lenda, inspirando outros a embarcar em suas próprias aventuras no maravilhoso reino da imaginação e descoberta.
    """
  

Este texto pode ser personalizado de acordo com suas necessidades.

Tokenização

Agora, vamos pré-processar e tokenizar nosso texto. A tokenização consiste em dividir o texto em palavras ou tokens individuais. Para isso, utilizaremos a biblioteca NLTK do Python.

Para garantir que nosso modelo foque nas palavras, ignorando letras maiúsculas ou minúsculas e pontuações, realizaremos um pré-processamento. Esta etapa envolve converter todas as palavras em letras minúsculas e remover quaisquer sinais de pontuação.

    import nltk

    # Tokenizar o texto em palavras
    words = nltk.word_tokenize(text)

    # Pré-processar as palavras (converter para minúsculas, remover pontuação)
    words = [word.lower() for word in words if word.isalnum()]

    words
  

Após o pré-processamento e a tokenização, obteremos todas as palavras em letras minúsculas e sem pontuação.

Construindo N-gramas

Nesta etapa, criaremos N-gramas, que são sequências de N palavras utilizadas no processamento de linguagem natural (PNL).

Em nosso código, criaremos bigramas, onde N é igual a 2. Isso significa que cada N-grama consistirá em pares de palavras.

Essa etapa é essencial para a construção de um modelo de previsão da próxima palavra, pois nos permite analisar sequências de palavras e prever a próxima com base no contexto fornecido pelas N-1 palavras anteriores.

    # Definir a ordem do modelo de N-grama (N=2 para bigramas)
    N = 2

    # Criar N-gramas a partir das palavras tokenizadas
    ngrams_list = list(ngrams(words, N))

    # Criar um defaultdict para armazenar os N-gramas e suas frequências
    ngram_freq = defaultdict(int)
    for ngram in ngrams_list:
        ngram_freq[ngram] += 1
  

Esses N-gramas servirão como base para treinar e implementar nosso modelo de previsão da próxima palavra.

Definir Função

Aqui, criaremos uma função chamada ‘predict_next_word’ que adivinhará a próxima palavra em uma frase com base em um prefixo fornecido (uma sequência de palavras).

Essa função é fundamental para o modelo de previsão, pois utiliza o contexto fornecido pelo prefixo para prever a próxima palavra mais provável.

Em termos simples, o processo é o seguinte:

  • A função analisa todos os pares de palavras (bigramas) em nossos dados de texto que iniciam com o prefixo fornecido (as palavras antes da palavra que falta).
  • Ela conta a frequência com que cada palavra aparece nesses pares e as ordena por frequência, da mais comum para a menos comum.
  • A função sugere a palavra mais frequente como a próxima palavra após o prefixo dado.
    # Definir função
    def predict_next_word(prefix):
        # Filtrar N-gramas que começam com o prefixo fornecido
        matching_ngrams = [(ngram, freq) for ngram, freq in ngram_freq.items() if ngram[:-1] == prefix]

        if not matching_ngrams:
            return "Nenhuma previsão disponível."

        # Ordenar N-gramas por frequência em ordem decrescente
        sorted_ngrams = sorted(matching_ngrams, key=lambda x: x[1], reverse=True)

        # Selecionar o N-grama com a maior frequência como previsão
        prediction = sorted_ngrams[0][0][-1]

        return prediction
  

Esta etapa é crucial, pois permite gerar sugestões contextualmente relevantes para a próxima palavra em uma sequência de texto.

Teste

O código a seguir permite testar o modelo com sua própria entrada. Você insere algumas palavras, pressiona Enter e o modelo prevê a próxima palavra. Caso insira algo inválido, será solicitado a tentar novamente.

    # Utilize este trecho de código para testar o modelo interativamente com entrada do usuário
    user_input = input("Insira um prefixo para a previsão da próxima palavra: ").lower().split()
    if len(user_input) != N - 1:
        print("Por favor, insira um prefixo válido.")
    else:
        prefix = tuple(user_input)
        prediction = predict_next_word(prefix)
        print(f"Previsão da próxima palavra: {prediction}")
  

Nosso código criará uma interface como a seguinte, onde você pode inserir prefixos e pressionar enter.

Após a inserção, você receberá a próxima palavra:

Essa é uma forma de demonstrar como o modelo de previsão da próxima palavra pode ser usado na prática.

Desafios:

  • A precisão da previsão da próxima palavra depende muito do tamanho e da qualidade dos dados de treinamento. Dados limitados ou ruidosos podem levar a previsões menos precisas.
  • Se uma palavra no texto de entrada não existir nos dados de treinamento, ela não poderá ser prevista com precisão.
  • A pontuação pode afetar a precisão da previsão, especialmente em idiomas como o inglês, onde os limites das palavras podem ser ambíguos.
  • A tokenização ou pré-processamento incorretos podem levar a previsões equivocadas.
  • Muitas palavras têm múltiplos significados, e o contexto nem sempre pode eliminá-los.

Como melhorar a precisão

  • Utilizar um conjunto de dados maior e mais diversificado melhora a compreensão do modelo em relação a diversos contextos e palavras.
  • Considere usar N-gramas de ordem superior (por exemplo, trigramas) para obter mais contexto, equilibrando-o com a disponibilidade de dados.
  • Colete feedback dos usuários e aprimore continuamente o modelo com base no uso prático.
  • Avalie regularmente o desempenho do modelo com métricas apropriadas e ajuste as estratégias de acordo.
  • Você pode implementar modelos baseados em redes neurais, como LSTM ou Transformer, para modelagem de contexto mais complexa.

Palavras Finais

No mundo do Processamento de Linguagem Natural, a previsão da próxima palavra é uma habilidade valiosa. Com essas 5 etapas simples em Python, você adquiriu uma ferramenta poderosa para comunicação mais rápida e tecnologia mais inteligente.

Continue explorando e utilizando esse conhecimento para aprimorar suas experiências linguísticas. Esta é apenas o começo!

Você também pode explorar algumas das melhores maneiras de baixar arquivos de um URL usando Python.