9

メモリに収まらないコーパスに基づいて tf-idf モデルを構築したいと考えています。チュートリアルを読みましたが、コーパスがすぐに読み込まれるようです:

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

ドキュメントをすべてロードするのではなく、1 つずつメモリにロードできるのではないでしょうか。

4

1 に答える 1

13

はい、できます。コーパスをイテレータにするだけです。たとえば、ドキュメントがディスク上に存在する場合、ファイル名のリストを引数として取り、一度にすべてをメモリにロードすることなくドキュメントを 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)
于 2013-05-09T06:39:56.893 に答える