Calcular la similitud de textos | Programador Web Valencia

Calcular la similitud de textos

2 minutos

Detective mirando un documento con lupa

La técnica de comparación de similitud de textos implica analizar y comparar los textos en busca de elementos comunes, estructuras similares o términos compartidos para evaluar su grado de similitud. Se utilizan algoritmos y métodos como la comparación de coseno, el análisis de frecuencia de términos (TF-IDF), la distancia de edición (Levenshtein) u otros enfoques de procesamiento del lenguaje natural para medir la similitud entre los textos. Este tipo de análisis se aplica en diversas áreas como recuperación de información, detección de plagio y sistemas de recomendación.

Sus usos son diversos:

  1. Detección de plagio.
  2. Recuperación de información.
  3. Análisis de opiniones (análisis de sentimientos, se pueden comparar las opiniones).
  4. Resumen automático.
  5. Sistemas de recomendación.

Pero también forma parte de otro tipo de áreas como la minería de texto, la inteligencia artificial y el análisis de datos.

Para implementar la técnica podemos utilizar la librería nltk , en Python. Fácilmente podremos calcular la similitud entre 2 textos.

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
from sklearn.feature_extraction.text import TfidfVectorizer

def calcular_similitud(texto1, texto2):
    # Preprocesamiento de los textos
    stop_words = set(stopwords.words("spanish"))
    lemmatizer = WordNetLemmatizer()
    tokens1 = [lemmatizer.lemmatize(word.lower()) for word in word_tokenize(texto1) if word.isalnum() and word.lower() not in stop_words]
    tokens2 = [lemmatizer.lemmatize(word.lower()) for word in word_tokenize(texto2) if word.isalnum() and word.lower() not in stop_words]

    # Unión de los tokens preprocesados en textos nuevamente
    texto_preprocesado1 = ' '.join(tokens1)
    texto_preprocesado2 = ' '.join(tokens2)

    # Creación del vectorizador TF-IDF
    vectorizer = TfidfVectorizer()
    tfidf_matrix = vectorizer.fit_transform([texto_preprocesado1, texto_preprocesado2])

    # Cálculo de la similitud de coseno entre los vectores TF-IDF
    similitud = (tfidf_matrix * tfidf_matrix.T).toarray()[0, 1]

    return similitud

El resultado de similitud varía entre 0 y 1, donde 0 indica ninguna similitud y 1 indica máxima similitud.

Un ejemplo

texto1 = "Este es un ejemplo de texto."
texto2 = "Este es otro texto similar al primero."

similitud = calcular_similitud(texto1, texto2)
print("La similitud entre los textos es:", similitud)
# La similitud entre los textos es: 0.2605556710562624

Otro donde claramente se está plagiando.

texto1 = "No te sientas obligado a realizarme una donación, pero cada aportación me ayuda a mantener el sitio en activo para que continúe existiendo y me motiva a continuar creando nuevo contenido."
texto2 = "No te sientas obligado a realizarme una aportación, pero cada donación me ayuda a mantener el sitio online para que continúe existiendo y me motiva a seguir haciendo nuevo contenido."

similitud = calcular_similitud(texto1, texto2)
print("La similitud entre los textos es:", similitud)
# La similitud entre los textos es: 0.7025997416361692

Espero que os haya gustado y os sea útil. ¡Hasta la próxima!

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...