2015-12-02 87 views

回答

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 
+0

你能解釋你的代碼嗎?當你比較「HDa」和「HCK」時,這並不重要,它們都有普通字母「H」。他們是完全不同的。我們的代碼工作就像那樣 –

+0

當你爲工作分配索引時,代碼將使用你的輸入向量創建一個'textmatrix-document',即'HDa'是將會與'HCK'不同,請參閱我的編輯。然後,「餘弦」函數將計算兩個文檔之間的餘弦相似度(例如,你的例子中的「a」和「b」) – user2380782

+0

非常感謝。它真的爲我工作 –

0

首先需要可能的術語詞典,然後將您的向量轉換爲二進制向量,其中相應術語的位置爲1,其他位置爲0。如果您命名新載體a2b2,你可以用同樣cor(a2, b2)計算餘弦值,但要注意餘弦同樣介於-1和1你可以像這樣的東西它映射到[0,1]:0.5*cor(a2, b2) + 0.5

+0

創建字典後,可以使用軟件包'lsa'並運行'cos'函數,例如'cos(a2,b2)' – user2380782

+0

這是正確的方法,但這看起來更像一條評論而不是一個答案,因爲它顯示了一般方法而不是一個具體的解決方案。另外,cor(a2,b2,method ='pearson)'與餘弦相似度(幾乎)相同。 – LyzandeR

+0

@ user2380782我認爲函數是'lsa :: cosine' – LyzandeR

0
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,]); 

可能是較大的數據集更好的一個。

相關問題