from transformers import BertTokenizer
import nltk
import string
import os
import pandas as pd
from nltk.corpus import stopwords

# Descargar recursos de NLTK
nltk.download('punkt')
nltk.download('stopwords')

# Preprocesamiento de texto
def preprocess_text(text):
    """
    Preprocesa el texto: convierte a minúsculas, elimina signos de puntuación y elimina las stopwords.
    """
    # Convierte el texto a minúsculas
    text = text.lower()
    # Elimina signos de puntuación
    text = ''.join([char for char in text if char not in string.punctuation])
    # Elimina stopwords
    words = text.split()
    filtered_words = [word for word in words if word not in stopwords.words('spanish')]
    return ' '.join(filtered_words)

# Función para tokenizar el contenido de un archivo
def tokenize_file(file_path):
    """
    Tokeniza el contenido de un archivo usando el tokenizer de BERT y preprocesamiento básico.
    """
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    
    preprocessed_content = preprocess_text(content)
    tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
    tokens = tokenizer.tokenize(preprocessed_content)
    return tokens

# Tokenización de todos los archivos en un directorio
def tokenize_all_files_in_directory(directory_path='.'):
    """
    Lee y procesa todos los archivos de texto en el directorio proporcionado.
    Devuelve una lista de textos tokenizados.
    """
    tokenized_texts = []
    filenames = [f for f in os.listdir(directory_path) if f.endswith('.txt')]
    
    for filename in filenames:
        path = os.path.join(directory_path, filename)
        tokenized_text = tokenize_file(path)
        tokenized_texts.append(tokenized_text)
    
    return tokenized_texts

# Guardar los textos tokenizados en un archivo CSV
def save_tokenized_texts_to_csv(tokenized_texts, output_file='salida.csv'):
    """
    Guarda los textos tokenizados en un archivo CSV.
    """
    df = pd.DataFrame({'texto_procesado': tokenized_texts})
    df.to_csv(output_file, index=False)

def main():
    tokenized_texts = tokenize_all_files_in_directory()
    
    if not tokenized_texts:
        print("Error: No se encontraron archivos .txt para procesar.")
        return
    
    save_tokenized_texts_to_csv(tokenized_texts)
    print(f"{len(tokenized_texts)} textos tokenizados y guardados en salida.csv")

if __name__ == "__main__":
    main()
