Как мне работать со словарями (цепями Маркова), которые слишком велики для барана?

Я работаю над генератором текста цепи Маркова в обучении python большого корпуса 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, но я читал, что они непрактичны.

Если бы у вас было достаточно памяти, что бы вы делали после тренировки? Вы планируете хранить? Быстро относительно. База данных может показаться хорошим компромиссом. Используйте Python встроенная поддержка для sqlite и посмотрите, достаточно ли он для вас быстр.

Peter Wood 27.10.2018 15:06

Я бы использовал его для создания предложений, которые начинаю с двух слов и нахожу значения, соответствующие этому ключу. Скажем, начни с (I, Went), значения, которые я возвращаю, это [to, back, around], я выбираю одно и добавляю его к предложению, которое теперь будет (I, Went, back). Я продолжаю делать то же самое (Пошел, вернулся) -> [К, Дом, Ибо, Задыхаясь]. Я всегда буду хранить его на диске, поэтому мне не нужно повторно обучать, но мне нужно, чтобы он был быстрым в том смысле, что я даю ему ключ, и он может быстро вернуть список значений, поскольку мне придется это делать в сто раз больше.

Cs Bvi 27.10.2018 15:13
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
81
0

Другие вопросы по теме