Maison > développement back-end > Tutoriel Python > Comment puis-je calculer la similarité cosinus entre deux phrases sans utiliser de bibliothèques externes ?

Comment puis-je calculer la similarité cosinus entre deux phrases sans utiliser de bibliothèques externes ?

Mary-Kate Olsen
Libérer: 2024-11-01 08:20:30
original
992 Les gens l'ont consulté

How can I calculate cosine similarity between two sentences without using external libraries?

Calcul de la similarité cosinus pour les chaînes de phrases

La similarité cosinus est une mesure de la corrélation entre deux vecteurs. Dans le cadre du traitement de texte, il peut être utilisé pour déterminer la similitude entre deux phrases. Pour calculer la similarité cosinus pour deux chaînes sans bibliothèques externes, suivez ces étapes :

  1. Tokeniser les chaînes : Divisez chaque chaîne en mots individuels, appelés jetons.
  2. Créer des vecteurs de mots : Pour chaque chaîne, créez un dictionnaire (vecteur) où les clés sont des mots uniques et les valeurs sont les fréquences de ces mots.
  3. Calculer le produit scalaire : Calculez le produit scalaire des deux vecteurs en additionnant les produits des éléments correspondants.
  4. Calculez les grandeurs : Trouvez la grandeur de chaque vecteur en mettant au carré et en additionnant tous ses éléments, puis en prenant la racine carrée.
  5. Normaliser : Divisez le produit scalaire par le produit des grandeurs pour obtenir la similarité cosinus normalisée.

Une implémentation Python simple :

<code class="python">import math
import re
from collections import Counter

WORD = re.compile(r"\w+")

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])

    sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())])
    sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)

    if not denominator:
        return 0.0
    else:
        return float(numerator) / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)</code>
Copier après la connexion

Exemple d'utilisation :

<code class="python">text1 = "This is a foo bar sentence ."
text2 = "This sentence is similar to a foo bar sentence ."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>
Copier après la connexion

Sortie :

Cosine: 0.861640436855
Copier après la connexion

Notez que cette implémentation n'inclut pas la pondération TF-IDF, ce qui peut améliorer la précision de similarité cosinus pour des ensembles de données plus grands.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal