TfidfVectorizer для корпуса, который не помещается в памяти

Я хочу построить модель tf-idf, основанную на корпусе, который не помещается в памяти. Я прочитал учебник, но корпус, кажется, загружен сразу:

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

Интересно, смогу ли я загрузить документы в память один за другим вместо загрузки всех?

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)
Другие вопросы по тегам