Buscador_Rol_vs.4_IA / dic_convert.py
tuliodisanto's picture
Update dic_convert.py
bbe0e55 verified
raw
history blame
3.92 kB
# dic_convert.py (CORRIGIDO PARA MANTER ACENTOS, PONTUAÇÃO E STOPWORDS)
# -*- coding: utf-8 -*-
"""
Script para processar a planilha TUSS, extrair TODOS os termos (incluindo
palavras com acentos, números, pontuação e stopwords) de colunas específicas.
Versão do Python: 3.12+
Bibliotecas necessárias: pandas, openpyxl
"""
import pandas as pd
import re
import os
def gerar_dicionario_de_termos(input_file: str, output_file: str):
"""
Lê uma planilha Excel, extrai todos os tokens (palavras com acentos,
números, pontuação) de colunas predefinidas, converte para minúsculas,
e salva uma lista de tokens únicos em um arquivo CSV compatível com Excel.
Args:
input_file (str): O caminho para a planilha Excel de entrada.
output_file (str): O caminho para o arquivo CSV de saída.
"""
# --- 1. CONFIGURAÇÃO ---
# Colunas de onde os termos serão extraídos (B, D, Q, R, S)
colunas_para_usar = "B,D,Q,R,S"
# --- 2. VALIDAÇÃO DO ARQUIVO DE ENTRADA ---
if not os.path.exists(input_file):
print(f"ERRO: O arquivo de entrada '{input_file}' não foi encontrado.")
return
print(f"Iniciando o processamento do arquivo: '{input_file}'...")
try:
# --- 3. LEITURA E PROCESSAMENTO ---
# Lê o Excel forçando todas as colunas a serem texto para evitar erros
df = pd.read_excel(input_file, header=0, usecols=colunas_para_usar, dtype=str)
print(f"Colunas lidas com sucesso: {list(df.columns)}")
# Usamos um 'set' para armazenar os termos e evitar duplicatas automaticamente
termos_unicos = set()
for column in df.columns:
# Pega todas as frases da coluna, ignorando valores vazios (NaN)
frases = df[column].dropna()
for frase in frases:
# --- LÓGICA DE EXTRAÇÃO MODIFICADA ---
# Esta expressão regular extrai:
# 1. [a-zA-Záàâãéèêíïóôõöúçñ]+ : Palavras com acentos.
# 2. \d+ : Números inteiros.
# 3. [^\s\w] : Qualquer caractere que NÃO seja espaço ou alfanumérico (pontuação).
tokens = re.findall(r'[a-zA-Záàâãéèêíïóôõöúçñ]+|\d+|[^\s\w]', str(frase).lower())
# Adiciona cada token extraído ao nosso conjunto de termos únicos
for token in tokens:
if token: # Garante que não adicionamos strings vazias
termos_unicos.add(token)
# --- 4. GERAÇÃO DO DATAFRAME FINAL ---
if not termos_unicos:
print("Nenhum termo foi encontrado nas colunas especificadas.")
return
# Converte o conjunto de termos únicos para um DataFrame, ordenando-o
output_df = pd.DataFrame(sorted(list(termos_unicos)), columns=['Termo_Correto'])
print(f"\nTotal de termos únicos no dicionário final: {len(output_df)}")
# --- 5. SALVANDO O RESULTADO EM CSV ---
# Usa 'utf-8-sig' para que os acentos abram corretamente no Excel.
output_df.to_csv(output_file, index=False, encoding='utf-8-sig')
print("\n--- Processamento Concluído! ---")
print(f"O arquivo '{output_file}' foi criado com sucesso.")
print("\nAmostra do dicionário gerado:")
print(output_df.head(15)) # Mostra uma amostra maior
except Exception as e:
print(f"\nOcorreu um erro inesperado durante o processamento: {e}")
print("Verifique se o arquivo Excel não está corrompido e se as colunas B, D, Q, R e S existem.")
# --- PONTO DE ENTRADA DO SCRIPT ---
if __name__ == "__main__":
arquivo_excel_entrada = 'TUSSxRolxSinônimosvs2.xlsx'
arquivo_csv_saida = 'Dic.csv'
# Executa a função principal
gerar_dicionario_de_termos(input_file=arquivo_excel_entrada, output_file=arquivo_csv_saida)