Comment calculer la similarité cosinus entre les chaînes de phrases en Python sans bibliothèques externes ?

Linda Hamilton
Libérer: 2024-10-31 14:30:02
original
1021 Les gens l'ont consulté

How to Calculate Cosine Similarity Between Sentence Strings in Python Without External Libraries?

Calcul de la similarité cosinus de chaînes de phrases sans bibliothèques externes

Pour calculer la similarité cosinus entre deux chaînes de texte sans modules externes, une simple implémentation Python peuvent être employés. La formule fondamentale de similarité cosinus est utilisée dans ce processus :

cos(θ) = (A · B) / (||A|| · ||B||)
Copier après la connexion

Où :

  • A et B sont deux vecteurs représentant les phrases.
  • A · B est le produit scalaire des vecteurs A et B.
  • ||A|| et ||B|| sont les grandeurs respectives des vecteurs A et B.

Implémentation

Le code Python suivant fournit une implémentation pratique de cette formule :

<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

Pour utiliser ce code, convertissez les chaînes de phrases en vecteurs à l'aide de la fonction text_to_vector, puis calculez la similarité cosinus à l'aide de la fonction get_cosine :

<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

Cela affichera la similarité cosinus entre les deux chaînes de phrases. Notez que la pondération tf-idf n'est pas incluse dans cette implémentation, mais peut être ajoutée si un corpus approprié est disponible.

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