Key-value базы данных для хранения словарей =========================================== В алгоритмах использовались данные в виде ассоциативных и простых массивов. Чтобы не загружать все словари сразу в память, в pymorphy данные берутся из одной из key-value базы данных. Интерфейс доступа при этом остается как для dict. Т.е. требование к хранилищу - поддерживать ``[]`` и ``in`` (``__getitem__``, ``__setitem__`` и ``__contains__``). .. _supported-storages: Поддерживаемые типы хранилищ ---------------------------- SQLite ^^^^^^ Файлы со словарями имеют расширение "``.sqlite``". Набор словарей для русского языка: ``ru.sqlite.zip``. Пример подключения:: m = get_moprh('dicts/ru') # или так: get_moprh('dicts/ru', 'sqlite') Преимущество - в совместимости. Не требует установки, кроссплатформенный формат хранения данных. Если какие-то проблемы с использованием других вариантов, можно использовать SQLite. Вариант по умолчанию. Этот самый медленный вариант. Shelve ^^^^^^ Файлы со словарями имеют расширение "``.shelve``". Набор словарей для русского языка: ``ru.shelve.zip``. Пример подключения:: m = get_moprh('dicts/ru', 'shelve') Это включенная в стандартную поставку библиотека, которая предоставляет dict-like доступ к базам данных BSDDB, GDB, BDB и DumbDB. Плюс - включена в стандартную поставку и потребляет меньше всего оперативной памяти. Минус - меньшая скорость работы, чем у альтернативных вариантов, и не всегда переносимый формат словарей. Из-за этого нельзя быть уверенным, что скачанный словарь заработает на конкретной машине. Чтобы вариант гарантированно заработал, может потребоваться переконвертиртация словаря для поддерживаемого формата данных на конкретной машине. Переконвертация осуществляется с помощью скрипта encode_dicts.py, который есть в репозитории (он не устанавливается через easy_install и pip). Стоит учесть, что файл, размещенный для скачивания, создан, используя BSDDB 4.6. Поэтому для работы нужен python с поддержкой bsddb 4.6. Если поддерживается версия 4.5 (как в debian lenny), то словари можно перевести в более старый формат:: $ for f in *.shelve; do db4.6_dump $f | db4.5_load new_$f; done Tokyo Cabinet ^^^^^^^^^^^^^ Файлы со словарями имеют расширение "``.tcb``" и "``.tch``" для Btree+ и Hash-вариантов базы. Наборы словарей для русского языка: ``ru.tcb.zip`` и ``ru.tch.zip``. .. note:: Btree-вариант занимает меньше места, но работает чуть медленнее. Пример подключения:: m = get_moprh('dicts/ru', 'tch') Наследник BSDDB, BDB, GDBM, QDBM. Обеспечивает хорошую скорость работы и небольшой размер словарей. Лицензия LGPL. Требует установки tokyocabinet средствами ОС. debian :: $ sudo aptitude install tokyocabinet-bin $ pip install pytc macports :: $ sudo port install tokyocabinet $ pip install pytc Официальный сайт: http://1978th.net/tokyocabinet/ CDB ^^^ Файлы со словарями имеют расширение "``.cdb``". Набор словарей для русского языка: ``ru.cdb.zip``. Пример подключения:: m = get_moprh('dicts/ru', 'cdb') Самый быстрый вариант, ест меньше памяти, чем Tokyo Cabinet, автор D. J. Bernstein. Установка:: $ pip install python-cdb Для установки потребуются установленные средства сборки (gcc, заголовочные файлы питона). Минус - лицензия GPL. А pymorphy - под лицензией MIT. И я вот не знаю, можно ли вообще его использовать. Официальный сайт: http://cr.yp.to/cdb.html Официальный сайт библиотеки для python: http://pilcrow.madison.wi.us/ Выбор хранилища --------------- * Хочется быстро все попробовать, не заморачиваясь за установку: SQLite. * Нужна большая скорость: CDB или Tokyo Cabinet. * Нужна максимальная скорость: используем pickle (осторожно, потребуется 200-300Мб оперативной памяти). * Очень мало оперативной памяти: Shelve (BSDDB), отключаем кеширование. Кеширование сильно ускоряет работу и включено по умолчанию, но оно увеличивает потребление памяти в соответствии с тем, сколько разных парадигм и правил было запрошено.