計算句子字串的餘弦相似度
餘弦相似度是兩個向量之間相關性的量測。在文字處理的背景下,它可以用來確定兩個句子之間的相似度。要在沒有外部函式庫的情況下計算兩個字串的餘弦相似度,請按照以下步驟操作:
-
對字串進行標記: 將每個字串分解為單獨的單詞,稱為標記。
-
建立詞向量:對於每個字串,建立一個字典(向量),其中鍵是唯一單詞,值是這些單字的頻率。
-
計算點積: 透過對應元素的乘積求和來計算兩個向量的點積。
-
計算幅度: 透過對每個向量的所有元素求平方和求和來找出每個向量的幅度,然後取平方根。
-
歸一化:將點積除以幅度的乘積以獲得歸一化餘弦相似度。
一個簡單的Python 實作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <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>
|
登入後複製
範例用法:
1 2 3 4 5 6 7 8 9 | <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 加權,這可以提高較大資料集的餘弦相似度。
以上是如何在不使用外部函式庫的情況下計算兩個句子之間的餘弦相似度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!