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:
- Detección de plagio.
- Recuperación de información.
- Análisis de opiniones (análisis de sentimientos, se pueden comparar las opiniones).
- Resumen automático.
- 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!
{{ comments.length }} comentarios