Buscador_Rol_vs.4_IA / dic_convert.py
tuliodisanto's picture
Upload 2 files
08b7360 verified
# -*- coding: utf-8 -*-
"""
Script para processar a planilha TUSS, extrair termos de colunas específicas,
filtrá-los e gerar um dicionário de palavras únicas em um arquivo CSV.
Versão do Python: 3.12+
Bibliotecas necessárias: pandas, openpyxl
-----------------------------------------------------------------------------
*** ANTES DE EXECUTAR, INSTALE AS BIBLIOTECAS NECESSÁRIAS ***
Abra o terminal e digite:
pip install 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 palavras de colunas predefinidas, aplica filtros
para remover stop words e números, e salva uma lista de palavras únicas 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"
# Lista de 'stop words': palavras comuns a serem ignoradas.
stop_words = set([
'de', 'a', 'o', 'que', 'e', 'do', 'da', 'em', 'um', 'para', 'é', 'com', 'não', 'uma',
'os', 'no', 'na', 'por', 'mais', 'as', 'dos', 'como', 'mas', 'foi', 'ao', 'ele', 'das',
'tem', 'à', 'seu', 'sua', 'ou', 'se', 'quando', 'há', 'nos', 'já', 'está', 'eu', 'também',
'só', 'pelo', 'pela', 'até', 'isso', 'ela', 'entre', 'era', 'depois', 'sem', 'mesmo',
'aos', 'ter', 'seus', 'quem', 'nas', 'me', 'esse', 'eles', 'estão', 'você', 'tinha',
'foram', 'essa', 'num', 'nem', 'suas', 'meu', 'às', 'minha', 'numa', 'pelos', 'elas',
'havia', 'seja', 'qual', 'será', 'nós', 'tenho', 'lhe', 'deles', 'essas', 'esses',
'pelas', 'este', 'fosse', 'dele', 'tu', 'te', 'vocês', 'vos', 'lhes', 'meus', 'minhas',
'teu', 'tua', 'teus', 'tuas', 'nosso', 'nossa', 'nossos', 'nossas', 'dela', 'delas',
'esta', 'estes', 'estas', 'aquele', 'aquela', 'aqueles', 'aquelas', 'isto', 'aquilo',
'estive', 'esteve', 'estivemos', 'estiveram', 'estava', 'estávamos', 'estavam',
'estivera', 'estivéramos', 'esteja', 'estejamos', 'estejam', 'estivesse', 'estivéssemos',
'estivessem', 'estiver', 'estivermos', 'estiverem', 'sao', 'p', 'sob', 'sobre',
'outros', 'outro', 'outra', 'abrv', 'cia'
])
# --- 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.")
print("Certifique-se de que ele está no mesmo diretório do script ou forneça o caminho completo.")
return
print(f"Iniciando o processamento do arquivo: '{input_file}'...")
try:
# --- 3. LEITURA E PROCESSAMENTO ---
# *** ALTERAÇÃO AQUI: dtype=str força o pandas a ler tudo como texto, evitando a conversão de datas. ***
df = pd.read_excel(input_file, header=0, usecols=colunas_para_usar, dtype=str)
print(f"Colunas lidas com sucesso: {list(df.columns)}")
# Remove a primeira linha de dados do DataFrame (a linha de índice 0)
# e reajusta o índice para começar em 0 novamente.
df = df.iloc[1:].reset_index(drop=True)
print("A primeira linha de dados da planilha foi ignorada.")
palavras_validas = []
for column in df.columns:
# .astype(str) ainda é útil para garantir consistência, caso haja algum valor não-string.
phrases = df[column].dropna().astype(str)
for phrase in phrases:
# A expressão [\w-]+ captura palavras que contêm hífens.
words = re.findall(r'\b[\w-]+\b', phrase.lower())
for word in words:
if word not in stop_words and not word.isdigit() and len(word) > 2:
palavras_validas.append(word)
# --- 4. GERAÇÃO DO DATAFRAME FINAL ---
if not palavras_validas:
print("Nenhuma palavra válida foi encontrada após a aplicação dos filtros.")
return
output_df = pd.DataFrame(palavras_validas, columns=['Termo_Correto'])
print(f"\nTotal de termos extraídos (após filtros, com duplicatas): {len(output_df)}")
output_df = output_df.drop_duplicates().sort_values(by='Termo_Correto').reset_index(drop=True)
print(f"Total 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.
# header=False impede que o nome da coluna ("Termo_Correto") seja escrito no arquivo.
output_df.to_csv(output_file, index=False, header=True, encoding='utf-8-sig')
print("\n--- Processamento Concluído! ---")
print(f"O arquivo '{output_file}' foi criado com sucesso (sem linha de cabeçalho).")
print("\nAmostra do dicionário gerado:")
# Renomeia a coluna temporariamente para o print ficar mais claro
print(output_df.rename(columns={'Termo_Correto': 'Palavra'}).head())
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'
# Nome do arquivo de saída alterado conforme solicitado
arquivo_csv_saida = 'Dic.csv'
# Executa a função principal
gerar_dicionario_de_termos(input_file=arquivo_excel_entrada, output_file=arquivo_csv_saida)