Key-value базы данных для хранения словарей

В алгоритмах использовались данные в виде ассоциативных и простых массивов. Чтобы не загружать все словари сразу в память, в pymorphy данные берутся из одной из key-value базы данных. Интерфейс доступа при этом остается как для dict. Т.е. требование к хранилищу - поддерживать [] и in (__getitem__, __setitem__ и __contains__).

Поддерживаемые типы хранилищ

Словари лежат тут: https://bitbucket.org/kmike/pymorphy/downloads/ и называются по формуле <язык>.<тип базы>-<формат данных>.zip.

Предупреждение

Не скачивайте словари вида <язык>.<тип базы>.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.

Примечание

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), отключаем кеширование.

Кеширование сильно ускоряет работу и включено по умолчанию, но оно увеличивает потребление памяти в соответствии с тем, сколько разных парадигм и правил было запрошено.

Project Versions

Содержание

Предыдущий раздел

Обозначения для грамматической информации в pymorphy

Следующий раздел

Key-value - бэкенды

На этой странице