我有一组文件和一个查询文档。我的目的是通过与每个文档的查询文档进行比较来返回最相似的文档。首先使用余弦相似性我必须将文档字符串映射到矢量。另外我已经创建了一个tf-idf函数来计算每个文档。
要获取字符串的索引,我有这样的函数;
def getvectorKeywordIndex(self, documentList):
""" create the keyword associated to the position of the elements within the document vectors """
#Mapped documents into a single word string
vocabularyString = " ".join(documentList)
vocabularylist= vocabularyString.split(' ')
vocabularylist= list(set(vocabularylist))
print 'vocabularylist',vocabularylist
vectorIndex={}
offset=0
#Associate a position with the keywords which maps to the dimension on the vector used to represent this word
for word in vocabularylist:
vectorIndex[word]=offset
offset+=1
print vectorIndex
return vectorIndex,vocabularylist #(keyword:position),vocabularylist
和余弦相似性我的功能是;
def cosine_distance(self,index, queryDoc):
vector1= self.makeVector(index)
vector2= self.makeVector(queryDoc)
return numpy.dot(vector1, vector2) / (math.sqrt(numpy.dot(vector1, vector1)) * math.sqrt(numpy.dot(vector2, vector2)))
TF-IDF是;
def tfidf(self, term, key):
return (self.tf(term,key) * self.idf(term))
我的问题是如何通过使用索引和词汇表以及此函数内部的tf-idf来创建makevector。 欢迎任何答案。
答案 0 :(得分:1)
您也应该将vectorIndex
传递给makeVector
并使用它来查找文档和查询中的字词索引。忽略未出现在vectorIndex
。
请注意,在处理文档时,您应该使用scipy.sparse
矩阵而不是Numpy数组,否则您将很快耗尽内存。
(或者,考虑使用scikit-learn中的Vectorizer
来处理所有这些,使用scipy.sparse
矩阵并计算tf-idf值。免责声明:我写了该类的部分内容。)