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