Atualizado: 10/12/2024

Reconhecimento de Padrões em Texto com a Biblioteca recognizers-text em Python

Reconhecer padrões específicos em textos é uma tarefa comum no processamento de linguagem natural. A biblioteca recognizers-text, desenvolvida pela Microsoft, oferece ferramentas para identificar e extrair dados estruturados, como números, datas, unidades de medida e sequências (e-mails, telefones, entre outros). Essa biblioteca é composta por módulos especializados, que podem ser usados isoladamente ou em conjunto:

  • recognizers_number(): reconhece números.

  • recognize_ordinal(): reconhece números ordinais.

  • recognize_percentage(): reconhece valores percentuais.

  • recognize_age(): reconhece idades.

  • recognize_currency(): reconhece valores monetários.

  • recognize_dimension(): reconhece diferentes valores usados em medições.

  • recognize_temperature(): reconhece temperaturas.

  • recognize_datetime(): reconhece datas e horários.

  • recognize_phone_number(): reconhece números de telefone.

  • recognize_email(): reconhece endereços de e-mail.

  • recognize_ip_address(): reconhece endereços IP.

  • recognize_url(): reconhece URLs.

  • recognize_guid(): reconhece GUIDs.

Existe ainda o pacote unificado recognizers-text-suite, que agrupa todas essas funcionalidades. Ele pode ser instalado diretamente através do gerenciador de pacotes pip:

pip install recognizers-text-suite

No caso de conflitos com a biblioteca emoji, que é uma dependência do pacote, pode ser necessário ajustar sua versão:

pip uninstall emoji
pip install emoji==1.7

Funcionamento do Reconhecimento

A biblioteca utiliza funções específicas para reconhecer diferentes tipos de padrões. Todas essas funções aceitam dois parâmetros principais: o texto de entrada e a cultura linguística a ser usada no processamento. Como resultado, retornam uma lista de objetos ModelResult, contendo:

Por exemplo, ao processar um texto para a cultura Culture.English, números como "three" e "five" serão mapeados para seus valores numéricos correspondentes: 3 e 5.

Exemplos de Uso

Reconhecimento de Números

A função recognize_number() identifica números inteiros e decimais em textos:

from recognizers_number import recognize_number, Culture

results = recognize_number("I have three apples and five oranges", Culture.English)
for result in results:
    print(f"Texto reconhecido: {result.text}")
    print(f"Índice inicial: {result.start}, Índice final: {result.end}")
    print(f"Valor: {result.resolution['value']}")

Ao processar a frase acima, os números "three" e "five" serão mapeados como 3 e 5, respectivamente.

Reconhecimento de Números Ordinais

A função recognize_ordinal() é usada para identificar números ordinais e retornar seus valores numéricos:

from recognizers_number import recognize_ordinal, Culture

results = recognize_ordinal("The fifth book", Culture.English)
for result in results:
    print(result.resolution["value"])  # 5

Reconhecimento de Porcentagens

Percentuais são processados com recognize_percentage():

from recognizers_number import recognize_percentage, Culture

results = recognize_percentage("sixty-seven percents", Culture.English)
for result in results:
    print(result.resolution["value"])  # 67

Reconhecimento de Idade

Para identificar idades, utiliza-se a função recognize_age():

from recognizers_number_with_unit import recognize_age, Culture

results = recognize_age("Tom is thirty-eight years old", Culture.English)
for result in results:
    print(result.resolution["value"])  # 38

Reconhecimento de Moedas

A função recognize_currency() do pacote recognizers_number_with_unit processa textos que contêm valores monetários, incluindo diferentes moedas:

from recognizers_number_with_unit import recognize_currency, Culture

results = recognize_currency("the sum was $ 15.4 million", Culture.English)
for result in results:
    print(result.resolution["value"])  # 15400000

results = recognize_currency("1 BRL=0.16 EUR", Culture.English)
for result in results:
    print(result.resolution["value"])  # 1 e 0.16

Reconhecimento de Dimensões e Unidades

Para pesos, medidas e distâncias, utiliza-se a função recognize_dimension():

from recognizers_number_with_unit import recognize_dimension, Culture

results = recognize_dimension("ten kg equals 22.046 pounds", Culture.English)
for result in results:
    print(result.resolution["value"]) # 10 e 22.046

results = recognize_dimension("It took him half an hour to drive home from work. He averaged thirty-four miles per hour. ", Culture.English)
for result in results:
    print(result.resolution["value"]) # 34

Reconhecimento de Temperaturas

Para identificar temperaturas em textos, utiliza-se a função recognize_temperature() do pacote recognizers_number_with_unit:

from recognizers_number_with_unit import recognize_temperature, Culture

results = recognize_temperature("The official highest recorded temperature is now 56.7°C (134°F), which was measured on 10 July 1913 at Greenland Ranch, Death Valley, California, USA", Culture.English)
for result in results:
    print(result.resolution["value"])  # 56.7 e 134

Reconhecimento de Datas e Horários

Datas e horários podem ser extraídos com a função recognize_datetime(). O resultado é uma lista detalhada de possíveis correspondências:

from recognizers_date_time import recognize_datetime, Culture

results = recognize_datetime("I will go back 8pm today or 7am tomorrow", Culture.English)
for result in results:
    for value in result.resolution["values"]:
        print(value["value"])

Nesse caso, a frase processada retorna horários formatados como "2024-12-12 20:00:00" e "2024-12-13 07:00:00", com base na data atual.

Reconhecimento de Sequências

O módulo recognizers-sequence oferece métodos para extrair padrões como números de telefone e e-mails:

from recognizers_sequence import recognize_phone_number, recognize_email, Culture

results = recognize_phone_number("Main contact: +1-234-567-8901", Culture.English)
for result in results:
    print(result.resolution["value"])  # +1-234-567-8901

results = recognize_email("Second contact: tom@somemail.com", Culture.English)
for result in results:
    print(result.resolution["value"])  # tom@somemail.com
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com