В алгоритмах использовались данные в виде ассоциативных и простых массивов. Чтобы не загружать все словари сразу в память, в pymorphy данные берутся из одной из key-value базы данных. Интерфейс доступа при этом остается как для dict. Т.е. требование к хранилищу - поддерживать [] и in (__getitem__, __setitem__ и __contains__).
Файлы со словарями имеют расширение “.sqlite”. Набор словарей для русского языка: ru.sqlite.zip. Пример подключения:
m = get_moprh('dicts/ru') # или так: get_moprh('dicts/ru', 'sqlite')
Преимущество - в совместимости. Не требует установки, кроссплатформенный формат хранения данных. Если какие-то проблемы с использованием других вариантов, можно использовать SQLite. Вариант по умолчанию.
Этот самый медленный вариант.
Файлы со словарями имеют расширение “.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
Файлы со словарями имеют расширение “.tcb” и “.tch” для Btree+ и Hash-вариантов базы. Наборы словарей для русского языка: ru.tcb.zip и ru.tch.zip.
Примечание
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”. Набор словарей для русского языка: 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/
Кеширование сильно ускоряет работу и включено по умолчанию, но оно увеличивает потребление памяти в соответствии с тем, сколько разных парадигм и правил было запрошено.