2013-11-21 47 views
27

我試圖讓使用Sklearn的TfidfVectorizer對象的單個文件的TF-IDF向量。我創建基於一些培訓文檔的詞彙量和使用fit_transform訓練TfidfVectorizer。然後,我想爲任何給定的測試文檔找到tf-idf向量。使用Sklearn的TfidfVectorizer變換

from sklearn.feature_extraction.text import TfidfVectorizer 

self.vocabulary = "a list of words I want to look for in the documents".split() 
self.vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
       stop_words='english') 
self.vect.fit_transform(self.vocabulary) 

... 

doc = "some string I want to get tf-idf vector for" 
tfidf = self.vect.transform(doc) 

的問題是,這將返回n行,其中n是我的文檔字符串大小的矩陣。我希望它只返回一個表示整個字符串的tf-idf的向量。我怎樣才能讓這個字符串看作單個文檔,而不是每個字符都是文檔?另外,我是很新的文本挖掘,所以如果我做錯了什麼概念,那將是巨大的瞭解。任何幫助表示讚賞。

回答

36

如果要計算TF-IDF只在一定的詞彙量,使用vocabulary參數TfidfVectorizer構造,

vocabulary = "a list of words I want to look for in the documents".split() 
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', 
      stop_words='english', vocabulary=vocabulary) 

然後,以適應,即計算數,與給定corpus,即一個可迭代文檔,使用fit

vect.fit(corpus) 

方法fit_transform

0123縮短

最後,transform方法接受一個語料庫,因此對於單個文檔,您應該將其作爲列表傳遞,或者將其視爲可迭代的符號,每個符號都是文檔。

doc_tfidf = vect.transform([doc]) 
+3

那麼fit_transform和transform之間有什麼區別?我已經閱讀過文檔,但我不太清楚。我們使用fit_transform計算每個項目的出現在文件列表?然後變換...需要那些數,並計算TF-IDF向量的文件列表? – Sterling

+4

@Sterling你使用'fit'或'fit_transform'(見更新)訓練TFIDF改造和'transform'不計數更新申請 – alko

相關問題