我有尺寸6.如何計算餘弦相似度兩個字符串向量之間的咒罵r
a=c("HDa","2Pb","2","BxU","BuQ","Bve")
b=c("HCK","2Pb","2","09","F","G")
的2個載體誰能解釋我應該怎麼辦呢?
我有尺寸6.如何計算餘弦相似度兩個字符串向量之間的咒罵r
a=c("HDa","2Pb","2","BxU","BuQ","Bve")
b=c("HCK","2Pb","2","09","F","G")
的2個載體誰能解釋我應該怎麼辦呢?
使用lsa
包以及用於該包
# create some files
library('lsa')
td = tempfile()
dir.create(td)
write(c("HDa","2Pb","2","BxU","BuQ","Bve"), file=paste(td, "D1", sep="/"))
write(c("HCK","2Pb","2","09","F","G"), file=paste(td, "D2", sep="/"))
# read files into a document-term matrix
myMatrix = textmatrix(td, minWordLength=1)
EDIT該手冊:示出了如何爲mymatrix
對象
myMatrix
#myMatrix
# docs
# terms D1 D2
# 2 1 1
# 2pb 1 1
# buq 1 0
# bve 1 0
# bxu 1 0
# hda 1 0
# 09 0 1
# f 0 1
# g 0 1
# hck 0 1
# Calculate cosine similarity
res <- lsa::cosine(myMatrix[,1], myMatrix[,2])
res
#0.3333
你能解釋你的代碼嗎?當你比較「HDa」和「HCK」時,這並不重要,它們都有普通字母「H」。他們是完全不同的。我們的代碼工作就像那樣 –
當你爲工作分配索引時,代碼將使用你的輸入向量創建一個'textmatrix-document',即'HDa'是將會與'HCK'不同,請參閱我的編輯。然後,「餘弦」函數將計算兩個文檔之間的餘弦相似度(例如,你的例子中的「a」和「b」) – user2380782
非常感謝。它真的爲我工作 –
首先需要可能的術語詞典,然後將您的向量轉換爲二進制向量,其中相應術語的位置爲1,其他位置爲0。如果您命名新載體a2
和b2
,你可以用同樣cor(a2, b2)
計算餘弦值,但要注意餘弦同樣介於-1和1你可以像這樣的東西它映射到[0,1]:0.5*cor(a2, b2) + 0.5
創建字典後,可以使用軟件包'lsa'並運行'cos'函數,例如'cos(a2,b2)' – user2380782
這是正確的方法,但這看起來更像一條評論而不是一個答案,因爲它顯示了一般方法而不是一個具體的解決方案。另外,cor(a2,b2,method ='pearson)'與餘弦相似度(幾乎)相同。 – LyzandeR
@ user2380782我認爲函數是'lsa :: cosine' – LyzandeR
CSString_vector <- c("Hi Hello","Hello");
corp <- tm::VCorpus(VectorSource(CSString_vector));
controlForMatrix <- list(removePunctuation = TRUE,wordLengths = c(1, Inf), weighting = weightTf)
dtm <- DocumentTermMatrix(corp,control = controlForMatrix);
matrix_of_vector = as.matrix(dtm);
res <- lsa::cosine(matrix_of_vector[1,], matrix_of_vector[2,]);
可能是較大的數據集更好的一個。
對於您的示例,您希望的輸出是什麼? – etienne
我希望將結果視爲介於0和1之間的值 –
在這種情況下,'0.667 0.00 0.00 1.00 1.00 1.00'是您想要的還是'0.333 1.00 1.00 0.00 0.00 0.00'? – etienne