Поддерживаемые типы хранилищ ============================ .. _supported-storages: Общая информация ---------------- Алгоритмы в pymorphy устроены так, что требуют для работы данные в виде словарей и массивов. Изначально pymorphy использовал структуры ``list`` и ``dict`` для хранения данных о словах и словообразовании. Это работало быстро, но требовало большого количества оперативной памяти. Поэтому сейчас для того, чтобы не загружать все словари сразу в память, данные берутся из одной из key-value базы данных. .. note:: Интерфейс доступа к key-value хранилищам при этом остался тем же. Т.е. требование к хранилищу (обертке над хранилищем) - притворяться массивом или словарем, а именно - поддерживать ``[]`` и ``in`` (``__getitem__``, ``__setitem__`` и ``__contains__``). Словари лежат тут: https://bitbucket.org/kmike/pymorphy/downloads/ и называются по формуле ``<язык>.<тип базы>-<формат данных>.zip``. .. warning:: Не скачивайте словари вида ``<язык>.<тип базы>.zip`` (например, ``ru.sqlite.zip`` - без 'json'), эти словари устаревшие: работают медленнее, в sqlite-словарях серьезная ошибка. В разделе для скачивания они пока оставлены в целях совместимости. Типы хранилищ ------------- SQLite ^^^^^^ Файлы со словарями имеют расширение "``.sqlite``". Набор словарей для русского языка: `ru.sqlite-json.zip `_. Пример подключения:: m = get_morph('dicts/ru') # или так: get_morph('dicts/ru', 'sqlite') Преимущество - в совместимости. Не требует установки, кроссплатформенный формат хранения данных. Если какие-то проблемы с использованием других вариантов, можно использовать SQLite. Вариант по умолчанию. Этот самый медленный вариант. CDB ^^^ Файлы со словарями имеют расширение "``.cdb``". Набор словарей для русского языка: `ru.cdb-json.zip `_. Пример подключения:: m = get_morph('dicts/ru', 'cdb') Это самый быстрый вариант (не считая варианта с полной загрузкой словарей в память). Установка:: $ pip install python-cdb Для установки потребуются установленные средства сборки (gcc, заголовочные файлы питона). Минус - лицензия GPL. А pymorphy - под лицензией MIT. И я вот не знаю, можно ли вообще его использовать. Официальный сайт: http://cr.yp.to/cdb.html Официальный сайт библиотеки для python: http://pilcrow.madison.wi.us/ Автор - D. J. Bernstein. Shelve ^^^^^^ Файлы со словарями имеют расширение "``.shelve``". Набор словарей для русского языка: `ru.shelve-json.zip `_. Пример подключения:: m = get_morph('dicts/ru', 'shelve') Этот вариант потребляет меньше всего оперативной памяти при работе. 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_morph('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/ Выбор хранилища --------------- * Хочется быстро все попробовать, не заморачиваясь за установку: SQLite. * Нужна большая скорость: CDB или Tokyo Cabinet. * Нужна максимальная скорость: используем pickle (осторожно, потребуется 200-300Мб оперативной памяти). * Очень мало оперативной памяти: Shelve (BSDDB), отключаем кеширование. Кеширование сильно ускоряет работу и включено по умолчанию, но оно увеличивает потребление памяти в соответствии с тем, сколько разных парадигм и правил было запрошено.