Maison >développement back-end >Tutoriel Python >Comment calculer la similarité cosinus de deux chaînes de texte en Python pur ?

Comment calculer la similarité cosinus de deux chaînes de texte en Python pur ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 08:05:02895parcourir

How to Calculate Cosine Similarity of Two Text Strings in Pure Python?

Comment calculer la similarité cosinus de deux chaînes de texte sans bibliothèques externes

Dans l'analyse de texte, la similarité cosinus est une mesure de la similarité entre deux des textes basés sur leur vocabulaire commun. Bien que des bibliothèques externes puissent être utilisées pour calculer cette mesure, il est également possible d'implémenter une simple fonction Python pur :

<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>

Cette fonction prend deux vecteurs vec1 et vec2 en entrée et calcule leur similarité cosinus. Voici comment l'utiliser pour comparer deux chaînes de texte text1 et text2 :

<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>

Sortie :

Cosine: 0.861640436855

Cela indique que les deux chaînes de texte sont très similaires.

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!

Déclaration:
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