2012-02-28 6 views
2

У меня есть набор файлов и запрос doc.Мой целью является возвращение наиболее похожих документов путем сравнения с документом запроса для каждого документа. Чтобы использовать косинус-сходство, сначала мне нужно сопоставить строки документа с векторами. Также я уже создал функцию tf-idf, которая вычисляет для каждого документа.Вернуть наиболее похожий документ по сравнению с документом запроса, используя сходство с косинусом в python

Чтобы получить индекс строк, у меня есть такая функция;

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 is;

def tfidf(self, term, key): 

    return (self.tf(term,key) * self.idf(term)) 

Моя проблема заключается в том, что, как я могу создать makevector, используя индекс и словарный список, а также тс-IDF внутри этой функции. Любой ответ приветствуется.

ответ

1

Вы также должны пройти vectorIndex до makeVector и использовать его для поиска индексов для условий в документах и ​​запросах. Игнорировать термины, которые не отображаются в vectorIndex.

Помните, что при работе с документами вы должны действительно использовать матрицы scipy.sparse вместо массивов Numpy, или вы быстро исчерпаете память.

(В качестве альтернативы, рассмотреть вопрос об использовании Vectorizer в scikit-узнать, который обрабатывает все это для вас, использует scipy.sparse матрицы и вычисляет Tf-IDF значения Оговорка:.. Я написал части этого класса)

 Смежные вопросы

  • Нет связанных вопросов^_^