Spaces:
Sleeping
Sleeping
| # -*- 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) |