首頁  >  文章  >  後端開發  >  如何在沒有外部函式庫的情況下用Python計算句子之間的餘弦相似度?

如何在沒有外部函式庫的情況下用Python計算句子之間的餘弦相似度?

DDD
DDD原創
2024-10-30 07:48:28512瀏覽

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

計算句子字串之間的餘弦相似度

給定兩個表示句子的字串,需要在不使用外部庫的情況下計算它們的餘弦相似度。讓我們探索一個 Python 實作來實現這一點。

餘弦相似度測量兩個向量之間的角度,通常表示向量空間中的文件或句子。高餘弦相似度值表示句子相似,而低值表示句子不同。

第 1 步:標記化與向量化

為了計算餘弦相似度,我們必須將句子轉換為向量。我們使用一個簡單的基於單字的分詞器,將句子分成單字併計算它們的出現次數:

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

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

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)</code>

第2 步:計算餘弦相似度

餘弦相似度公式是:

cosine = (Numerator) / (Denominator)

其中:

  • 分子是兩個向量的點積。
  • 分母是兩個向量的大小的乘積。
<code class="python">import math

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

第3 步:範例用法

使用上述函數,我們可以計算兩個句子之間的餘弦相似度:

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

輸出會顯示較高的餘弦相似度值,表示句子相似。

以上是如何在沒有外部函式庫的情況下用Python計算句子之間的餘弦相似度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn