4

我有一组文件和一个查询文档。我的目的是通过与每个文档的查询文档进行比较来返回最相似的文档。要首先使用余弦相似度,我必须将文档字符串映射到向量。而且我已经创建了一个计算每个文档的 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。欢迎任何答案。

4

1 回答 1

2

您也应该传递vectorIndextomakeVector并使用它来查找文档和查询中术语的索引。忽略未出现在 中的术语vectorIndex

请注意,在处理文档时,您真的应该使用scipy.sparse矩阵而不是 Numpy 数组,否则您将很快耗尽内存。

(或者,考虑使用Vectorizerin scikit-learn 为您处理所有这些,使用scipy.sparse矩阵并计算 tf-idf 值。免责声明:我编写了该类的一部分。)

于 2012-02-28T16:15:49.373 回答