二維余弦相似度計算公式:cos
(θ
)cos(\theta)
cos(θ)
=x 1x
2+y1
y2x1
2+y1
2∗x2
2+y2
2\over*\sqrt }
x12+y
12
∗x22
+y2
2x
1x2
+y1
y2
n維余弦相識度計算公式:cos
(θ
)cos(\theta)
cos(θ)
=∑ k→
1k→n
x1kx
2k∑k
→1k→
nx1k
∗∑k→
1k→n
x2
k_x_}}\over_}}*\sqrt _}}}
k→1∑k→
nx1
k∗
k→1∑
k→n
x2k
k→1
∑k→n
x1k
x2k
makedown公式:
'''
$cos(\theta)$=$\over*\sqrt }$
$cos(\theta)$=$_x_}}\over_}}*\sqrt _}}}$'''
從不同資料來源抽取的資料進行etl時候需要從多個相同的備選字段選取乙個作為etl後的字段,於是想到利用余弦相似性選取候選列表裡比較靠近質點向量的作為選取屬性。
此函式相對簡單,至於更為複雜的可能需要自己新增userdict和stopword,或者對字典進行調整。
對所選的字段沒有特殊規定,只希望選取有一定的原則(什麼原則則無要求),這是簡單的演算法符合需求的原因。
import jieba
import numpy
import sklearn.feature_extraction.text
defgetcentervectormatrix
(text)
:'''text為待分析的文字資料列表(矩陣版本)'''
if text:
_text=
jieba.enable_paddle(
)for item in text:
' '.join(jieba.lcut(item,cut_all=
false
,use_paddle=
true))
) vectorizer = sklearn.feature_extraction.text.countvectorizer(
)#生成列表的tf-idf詞頻稀疏矩陣
csr_matrix=vectorizer.fit_transform(_text)
#轉換成矩陣
matrix=csr_matrix.todense(
) rows,columns=matrix.shape
#求列表向量的質點
particle=
for c in
range
(columns)
: sum_column=
float
(sum
(matrix[
:,c]))
round
(sum_column/rows,8)
) particle=numpy.array(particle)
#取離質點最近的向量
distance_max=numpy.dot(matrix[0]
,particle)
/(numpy.linalg.norm(matrix[0]
)*(numpy.linalg.norm(particle)))
number_choice=
0for r in
range
(rows)
: distance=numpy.dot(matrix[r]
,particle)
/(numpy.linalg.norm(matrix[r])*
(numpy.linalg.norm(particle)))
if distance_maxdistance_max=distance
number_choice=r
return text[number_choice]
else
:return
none
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...
python學習筆記之利用jieba庫進行詞頻分析
jieba github倉庫位址 詞頻統計 import jieba 沒有安裝jieba庫可以在 使用命令列 pip install jieba 進行自動安裝 deffrequency 讀取檔案 txt open 檔案所在目錄.txt r encoding utf 8 read 這裡檔案路徑位置填寫...