
from transformers import BertModel, BertTokenizer
import torch

def main():
    # Cargar el tokenizador y el modelo BERT preentrenado
    tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
    model = BertModel.from_pretrained('bert-base-multilingual-cased')

    # Aquí debes cargar tus datos (noticias). Supongamos que 'noticias' es una lista de textos de noticias.
    noticias = ["Introduce aquí la primera noticia", "Introduce aquí la segunda noticia"]  # etc.

    embeddings = []
    for texto in noticias:
        # Codificar texto
        inputs = tokenizer(texto, padding=True, truncation=True, return_tensors="pt")

        # Obtener la salida del modelo
        with torch.no_grad():
            outputs = model(**inputs)

        # Tomar sólo la salida del último layer del clasificador (representación del texto completo)
        embeddings.append(outputs.last_hidden_state[:,0,:])

    # 'embeddings' es ahora una lista de tensores de PyTorch, uno por cada texto de noticia.
    # Puedes convertir esto a una lista de vectores y luego seguir con tu lógica de almacenamiento y similitud.

if __name__ == "__main__":
    main()







#============================================================================================================
                                        #CODIGO PARA ENTRENAR AL MODELO SENCILLO 
#============================================================================================================


# import numpy as np
# import pandas as pd
# import os
# from tensorflow.keras.models import Sequential
# from tensorflow.keras.layers import Embedding, Flatten, Dense

# def main():
#     # Verificar si el archivo 'salida.csv' existe
#     if not os.path.exists('salida.csv'):
#         print("Error: El archivo 'salida.csv' no existe. Asegúrate de ejecutar 'procesador_txt.py' primero.")
#         return

#     # 1. Cargar datos tokenizados desde el archivo CSV
#     df = pd.read_csv('salida.csv')

#     # Verificar que las columnas esperadas existen
#     if 'texto_procesado' not in df.columns or 'labels' not in df.columns:
#         print("Error: El archivo 'salida.csv' no tiene las columnas esperadas.")
#         return

#     # Convertir datos tokenizados a listas de enteros
#     sequences = [list(map(int, str(seq).split(','))) for seq in df['texto_procesado']]
#     labels = df['labels'].values

#     # 2. Definir el modelo
#     vocab_size = 10000  # Ajusta esto según tu dataset
#     embedding_dim = 16
#     max_length = len(sequences[0])  # longitud del primer elemento, asumiendo que todos tienen la misma longitud

#     model = Sequential([
#         Embedding(vocab_size, embedding_dim, input_length=max_length),
#         Flatten(),
#         Dense(6, activation='relu'),
#         Dense(1, activation='sigmoid')  # Cambia esto si tienes más clases
#     ])

#     # 3. Compilar el modelo
#     model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

#     # 4. Entrenar el modelo
#     model.fit(np.array(sequences), labels, epochs=10)

#     # 5. Guardar el modelo entrenado
#     model.save("my_model.h5")

#     print("Modelo entrenado y guardado.")

# if __name__ == "__main__":
#     main()
