2013-05-09 36 views
5

我想根據不適合內存的語料庫構建tf-idf模型。我讀的教程,但胼似乎一下子被加載:TfidfVectorizer適用於不適合內存的語料庫

from sklearn.feature_extraction.text import TfidfVectorizer 
corpus = ["doc1", "doc2", "doc3"] 
vectorizer = TfidfVectorizer(min_df=1) 
vectorizer.fit(corpus) 

我不知道如果我可以通過一個文件加載到內存中的一個而不是加載所有的人。

+0

當處理大型語料庫時,使用最近的開發版本而不是穩定版本可能是一個好主意,因爲對TfidfVectorizer進行了大修以減少內存使用量並提高了速度。 – 2013-05-09 20:20:49

回答

11

是的,你可以讓你的語料庫成爲迭代器。例如,如果您的文檔駐留在光盤上,則可以定義一個迭代器,該文件將文件名列表作爲參數,並逐個返回文檔,而無需將所有內容一次性加載到內存中。

from sklearn.feature_extraction.text import TfidfVectorizer 

def make_corpus(doc_files): 
    for doc in doc_files: 
     yield load_doc_from_file(doc) #load_doc_from_file is a custom function for loading a doc from file 

file_list = ... # list of files you want to load 
corpus = make_corpus(file_list) 
vectorizer = TfidfVectorizer(min_df=1) 
vectorizer.fit(corpus) 
+0

我要測試一下。可以不經變換而工作? – 2013-08-23 13:12:28

+0

任何解決方案,即使Tfidf向量表示不能適應內存? – mchangun 2013-10-23 12:04:03

相關問題