# -*- 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)