Как мне работать со словарными (цепями Маркова), которые слишком велики для оперативной памяти? - PullRequest
0 голосов
/ 27 октября 2018

Я работаю над цепным генератором текста Маркова в обучении питону большого корпуса 20 ГБ +. Он берет простой текст и разбивает его на пары, текущие два выбранных слова и следующее слово. Это часть списка:

[(('as', 'a'), 'subject'), (('a', 'subject'), 'for'), (('subject', 'for'), 'the'), (('for', 'the'), 'remarks'), (('the', 'remarks'), 'of'), (('remarks', 'of'), 'the'), (('of', 'the'), 'evening'), (('the', 'evening'), 'the'), (('evening', 'the'), 'perpetuation'), (('the', 'perpetuation'), 'of'), (('perpetuation', 'of'), 'our'), (('of', 'our'), 'political')]

Затем я помещаю это в словарь, поэтому, если у меня есть ключ (два слова), который встречается несколько раз, я могу просто поместить значение в виде массива с несколькими значениями:

{('as', 'a'): ['subject', 'nation'], ('a', 'subject'): ['for'], ('subject', 'for'): ['the'], ('for', 'the'): ['remarks', 'executive', 'government', 'laws', 'redress', 'sake', 'constitution'], ('the', 'remarks'): ['of']}

Я делаю это снова для тысяч файлов, добавляемых в этот словарь, через некоторое время он слишком велик для оперативной памяти. Есть ли способ хранить такой словарь на диске? Структура данных:

  • должно быть быстро
  • редактируемый после создания
  • легко найти

У меня были самые лучшие идеи - база данных или CSV-файл, но я прочитал, что они нецелесообразны.

...