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

Linda Hamilton
發布: 2024-10-31 14:30:02
原創
1029 人瀏覽過

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

無需外部函式庫即可計算句子字串的餘弦相似度

無需外部模組即可計算兩個文字字串之間的餘弦相似度,一個簡單的Python 實作可以就業。此過程中使用了基本的餘弦相似度公式:

cos(θ) = (A · B) / (||A|| · ||B||)
登入後複製

其中:

  • A 和 B 是代表句子的兩個向量。
  • A · B是向量 A 和 B 的點積。
  • ||A||和||B||是向量 A 和 B 各自的大小。

實作

以下Python 程式碼提供了此公式的實際實作:

<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>
登入後複製

要使用此程式碼,請使用text_to_vector函數將句子字串轉換為向量,然後使用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>
登入後複製

這將輸出兩個句子字串之間的餘弦相似度。請注意,此實作中不包含 tf-idf 權重,但如果有合適的語料庫,則可以新增。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板