2017-03-21 40 views
0

我有8個文檔,並且我運行了TF-IDF來獲取數組。我不明白我是如何找出哪一個是給定輸入查詢的最佳文檔匹配?從一組文檔中輸入查詢的最佳匹配

all_documents = [doc1, doc2, ...., doc7] 
sklearn_tfidf = TfidfVectorizer(norm='l2',min_df=0, use_idf=True, smooth_idf=False, sublinear_tf=True, tokenizer=tokenize) 
sklearn_representation = sklearn_tfidf.fit_transform(all_documents).toarray() 
+0

通過最好的文檔,你是指最接近輸入查詢的文檔嗎?你必須使用'TfidfVectorizer'來輸入查詢,然後從你有的7個文件中找到到矢量的距離(這可以是餘弦距離/歐氏距離)。 – titipata

+0

@titipat感謝您的方法。但據我所知,找到任何提到的距離矢量的長度應該是相同的。我將如何做到這一點? – user3235169

回答

0

使用TfidfVectorizer變換輸入到tf-idf格式。然後,您可以使用距離度量(餘弦,歐幾里得,曼哈頓,...)來計算最接近您輸入的文檔。

每個文檔都應該使用相同的詞彙表。我假設你的8個文檔向量具有相同的長度?您創建的sklearn_tfidf對象具有屬性vocabulary_,該屬性包含向量中使用的所有單詞。您的輸入查詢應該減少到只包含這些詞。

Document1: dogs are cute 
Document2: cats are awful 

引出的[dogs, cats, are, cute, awful]一個詞彙。包含除這些5之外的其他單詞的查詢不能使用。例如,如果您的查詢是cute animals,那麼animals沒有意義,因爲在其中一個文檔中找不到它。該查詢因此簡化爲以下矢量:[0,0,0,1,0],因爲cute是唯一可以在文檔中找到的單詞。

+0

感謝您的方法。但據我所知,找到任何提到的距離矢量的長度應該是相同的。我將如何做到這一點? – user3235169

+0

每個文檔應該使用相同的詞彙表。我假設你的8個文檔向量具有相同的長度?您創建的'sklearn_tfidf'對象具有一個屬性'vocabulary_',其中包含向量中使用的所有單詞。您的輸入查詢應該減少到只包含這些詞。 – PinkFluffyUnicorn

+0

是的,每個矢量的長度是1058.但是,如何將輸入字符串轉換爲長度爲1058的矢量? – user3235169