2015-12-02 106 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,]); 

可能是较大的数据集更好的一个。

相关问题