2013-05-09 26 views
5

メモリに収まらないコーパスに基づいてtf-idfモデルを構築したいと思います。私は、チュートリアルを読みますがコーパスは、一度にロードされているようだ:メモリに収まらないコーパスのTfidfVectorizer

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

私が代わりにそれらのすべてをロードするのいずれかによってメモリ1に文書を読み込むことができる場合、私は疑問に思います。

+0

、 'TfidfVectorizer'が減少し、メモリ使用量と速度向上のために見直しが行われましたように、最近の開発版ではなく、安定したリリースを使用するのは良い考えかもしれません。 –

答えて

11

はい、あなたのコーパスをイテレータにすることができます。たとえば、文書がディスク上にある場合、引数としてファイル名のリストを取り、すべてを一度にメモリにロードせずにドキュメントを1つずつ返すイテレータを定義することができます。大規模コーパスを扱う場合

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

私はそれを試してみるつもりです。変換せずに作業できますか? –

+0

Tfidfベクトル表現でさえメモリに収まらない場合は、どのような解決策がありますか? – mchangun

関連する問題