字串余弦相似度 python

2021-10-05 19:31:25 字數 2171 閱讀 4673

import numpy as np

import re

defget_word_vector

(s1, s2)

:"""

:param s1: 句子1

:param s2: 句子2

:return: 返回中英文句子切分後的向量

"""# 把句子按字分開,中文按字分,英文按單詞,數字按空格

regex = re.

compile

('[\\w]*'

) res = re.

compile

(r"([\u4e00-\u9fa5])"

) p1 = regex.split(s1.lower())

str1_list =

forstr

in p1:

if res.split(

str)

==none

:str

)else

: ret = res.split(

str)

for ch in ret:

# print(str1_list)

p2 = regex.split(s2.lower())

str2_list =

forstr

in p2:

if res.split(

str)

==none

:str

)else

: ret = res.split(

str)

for ch in ret:

# print(str2_list)

list_word1 =

[w for w in str1_list if

len(w.strip())

>0]

# 去掉為空的字元

list_word2 =

[w for w in str2_list if

len(w.strip())

>0]

# 去掉為空的字元

# 列出所有的詞,取並集

key_word =

list

(set

(list_word1 + list_word2)

)# 給定形狀和型別的用0填充的矩陣儲存向量

word_vector1 = np.zeros(

len(key_word)

) word_vector2 = np.zeros(

len(key_word)

)# 計算詞頻

# 依次確定向量的每個位置的值

for i in

range

(len

(key_word)):

# 遍歷key_word中每個詞在句子中的出現次數

for j in

range

(len

(list_word1)):

if key_word[i]

== list_word1[j]

: word_vector1[i]+=1

for k in

range

(len

(list_word2)):

if key_word[i]

== list_word2[k]

: word_vector2[i]+=1

# 輸出向量

return word_vector1, word_vector2

defcos_dist

(vec1, vec2)

:"""

:param vec1: 向量1

:param vec2: 向量2

:return: 返回兩個向量的余弦相似度

"""dist1 =

float

(np.dot(vec1, vec2)

/(np.linalg.norm(vec1)

* np.linalg.norm(vec2)))

return dist1

v1,v2 = get_word_vector(

'字串1'

,'字串2'

)a=cos_dist(v1,v2)

print

(a)

原文:

python 余弦相似度

余弦相似度相關係數 建立樣本與分詞 s1 本週末去釣魚 s1 cut i for i in jieba.cut s1,cut all true s2 下週去花卉市場買花 s2 cut i for i in jieba.cut s2,cut all true word set set s1 cut u...

余弦相似度及基於python的余弦相似度實現

余弦相似度,又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度。對於兩個向量,可以想象成空間中的兩條線段,都是從原點 0,0,出發,指向不同的方向。兩條線段之間形成乙個夾角 如果夾角為0度,則意味著方向相同 線段重合 如果夾角為90度,意味著形成直角,方向完全不相似 如果夾角為180...

字串相似度

這個演算法 於網上,但忘記了出處,對其使使用了 issame封裝,然後用在了自己的網頁資料抓取 中。求解兩個字串的相似度int calculatestringdistance const string stra,const string strb intret c lena 1 lenb 1 for...