import os
import re
from collections import Counter

# Lista de palabras comunes en español (stopwords)
stopwords = [
    "de", "la", "que", "el", "en", "y", "a", "los", "del", "se", "las", "por", "un", "para", "con",
    "no", "una", "su", "al", "es", "lo", "como", "más", "pero", "sus", "le", "ya", "o", "fue", "este",
    "ha", "sí", "porque", "esta", "son", "entre", "cuando", "muy", "sin", "sobre", "también", "me",
    "hasta", "hay", "donde", "quien", "desde", "todo", "nos", "durante", "todos", "uno", "les", "ni",
    "contra", "otros", "ese", "eso", "ante", "ellos", "e", "esto", "mí", "antes", "algunos", "qué",
    "unos", "yo", "otro", "otras", "otra", "él", "tanto", "esa", "estos", "mucho", "quienes", "nada",
    "muchos", "cual", "poco", "ella", "estar", "estas", "algunas", "algo", "nosotros", "mi", "mis",
    "tú", "te", "ti", "tu", "tus", "ellas", "nosotras", "vosotros", "vosotras", "os", "mío", "mía",
    "míos", "mías", "tuyo", "tuya", "tuyos", "tuyas", "suyo", "suya", "suyos", "suyas", "nuestro",
    "nuestra", "nuestros", "nuestras", "vuestro", "vuestra", "vuestros", "vuestras", "esos", "esas",
    "estoy", "estás", "está", "estamos", "estáis", "están", "esté", "estés", "estemos", "estéis",
    "estén", "estaré", "estarás", "estará", "estaremos", "estaréis", "estarán", "estaría", "estarías",
    "estaríamos", "estaríais", "estarían", "estaba", "estabas", "estábamos", "estabais", "estaban",
    "estuve", "estuviste", "estuvo", "estuvimos", "estuvisteis", "estuvieron", "estuviera", "estuvieras",
    "estuviéramos", "estuvierais", "estuvieran", "estuviese", "estuvieses", "estuviésemos", "estuvieseis",
    "estuviesen", "estando", "estado", "estada", "estados", "estadas", "estad"
]

# Función para limpiar el texto
def limpiar_texto(texto):
    texto = texto.lower()
    texto = re.sub(r'[^\w\s]', '', texto)  # Elimina signos de puntuación
    palabras = texto.split()
    palabras_limpias = [palabra for palabra in palabras if palabra not in stopwords]
    return ' '.join(palabras_limpias)

# Función para contar palabras en un archivo
def contar_palabras(nombre_archivo):
    with open(nombre_archivo, 'r') as f:
        palabras = f.read().split()
    return Counter(palabras)

# Función para comparar dos archivos y calcular el porcentaje de similitud
def comparar_archivos(archivo1, archivo2):
    conteo1 = contar_palabras(archivo1)
    conteo2 = contar_palabras(archivo2)
    
    palabras_comunes = set(conteo1.keys()) & set(conteo2.keys())
    num_palabras_comunes = sum(min(conteo1[p], conteo2[p]) for p in palabras_comunes)
    num_palabras_totales = sum(conteo1.values()) + sum(conteo2.values())
    
    porcentaje_similitud = (num_palabras_comunes / num_palabras_totales) * 100
    return porcentaje_similitud

# Función para comparar todos los archivos entre carpetas y guardar los resultados
def comparar_carpetas(carpeta1, carpeta2, carpeta_comparaciones, nombre_comparacion):
    archivos1 = [os.path.join(carpeta1, f) for f in os.listdir(carpeta1) if f.endswith('.txt')]
    archivos2 = [os.path.join(carpeta2, f) for f in os.listdir(carpeta2) if f.endswith('.txt')]

    with open(os.path.join(carpeta_comparaciones, f"{nombre_comparacion}.txt"), 'w') as f_out:
        for archivo1 in archivos1:
            for archivo2 in archivos2:
                porcentaje = comparar_archivos(archivo1, archivo2)
                nombre_archivo1 = os.path.basename(archivo1)
                nombre_archivo2 = os.path.basename(archivo2)
                f_out.write(f"{nombre_archivo1} vs {nombre_archivo2}: {porcentaje:.2f}% de similitud\n")

# Rutas a las carpetas
ruta_base = '/home/sito/PROGRAMACION/FLUJOS_TODO/FLUJOS_DATOS'
carpeta_comparaciones = os.path.join(ruta_base, 'COMPARACIONES')
carpeta_wikipedia = os.path.join(ruta_base, 'WIKIPEDIA', 'articulos_tokenizados')
carpeta_torrents = os.path.join(ruta_base, 'TORRENTS', 'TORRENTS_WIKILEAKS_COMPLETO', 'tokenized')
carpeta_noticias = os.path.join(ruta_base, 'NOTICIAS', 'tokenized')

# Crear la carpeta de comparaciones si no existe
os.makedirs(carpeta_comparaciones, exist_ok=True)

# Comparar las carpetas y guardar los resultados
comparar_carpetas(carpeta_wikipedia, carpeta_noticias, carpeta_comparaciones, 'wikipedia_vs_noticias')
comparar_carpetas(carpeta_wikipedia, carpeta_torrents, carpeta_comparaciones, 'wikipedia_vs_torrents')
comparar_carpetas(carpeta_torrents, carpeta_noticias, carpeta_comparaciones, 'torrents_vs_noticias')

