Для этого вам нужно iterator
.
Как взято из веб-сайт gensim :
class MySentences(object):
def __init__(self, dirname):
self.dirname = dirname
def __iter__(self):
for fname in os.listdir(self.dirname):
for line in open(os.path.join(self.dirname, fname)):
yield line.lower().split()
sentences = MySentences('/some/directory') # a memory-friendly iterator
sentences
- это iterator
, который будет открывать каждый файл при необходимости , используйте его, а затем уничтожьте экземпляр.Поэтому в любой момент в памяти только один файл.
С веб-сайта:
, если наш ввод разбросан по нескольким файлам на диске, с одним предложением в строке, а затем вместозагружая все в список в памяти, мы можем обработать входной файл за файлом, строка за строкой
Чтобы использовать его в вашем случае, просто замените вашу строку dictionary
на:
dictionary = corpora.Dictionary(line for line in sentences)
где sentences
- это переменная, которую мы определили ранее, которой был задан путь к папке с несколькими .txt
файлами.
Чтобы узнать больше об итераторах, итераторах и генераторах, ознакомьтесь с этот блог .