Python | Medir la similitud entre dos oraciones usando la similitud del coseno

La similitud de coseno es una medida de similitud entre dos vectores distintos de cero de un espacio de producto interno que mide el coseno del ángulo entre ellos.
Semejanza = (AB) / (||A||.||B||) donde A y B son vectores.

En este programa se utilizan la similitud de coseno y el módulo de herramientas nltk. Para ejecutar este programa, nltk debe estar instalado en su sistema. Para instalar el módulo nltk, siga los pasos a continuación:

1. Open terminal(Linux).
2. sudo pip3 install nltk
3. python3
4. import nltk
5. nltk.download(‘all’)

Funciones utilizadas:

nltk.tokenize: Se utiliza para la tokenización. La tokenización es el proceso mediante el cual una gran cantidad de texto se divide en partes más pequeñas llamadas tokens. word_tokenize(X)dividir la oración dada X en palabras y devolver la lista.

nltk.corpus: en este programa, se utiliza para obtener una lista de palabras vacías. Una palabra vacía es una palabra de uso común (como «el», «un», «un», «en»).

A continuación se muestra la implementación de Python:

# Program to measure the similarity between 
# two sentences using cosine similarity.
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
  
# X = input("Enter first string: ").lower()
# Y = input("Enter second string: ").lower()
X ="I love horror movies"
Y ="Lights out is a horror movie"
  
# tokenization
X_list = word_tokenize(X) 
Y_list = word_tokenize(Y)
  
# sw contains the list of stopwords
sw = stopwords.words('english') 
l1 =[];l2 =[]
  
# remove stop words from the string
X_set = {w for w in X_list if not w in sw} 
Y_set = {w for w in Y_list if not w in sw}
  
# form a set containing keywords of both strings 
rvector = X_set.union(Y_set) 
for w in rvector:
    if w in X_set: l1.append(1) # create a vector
    else: l1.append(0)
    if w in Y_set: l2.append(1)
    else: l2.append(0)
c = 0
  
# cosine formula 
for i in range(len(rvector)):
        c+= l1[i]*l2[i]
cosine = c / float((sum(l1)*sum(l2))**0.5)
print("similarity: ", cosine)

Producción:

similarity:  0.2886751345948129

Publicación traducida automáticamente

Artículo escrito por nitishanon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *