Key-value - бэкенды

Примечание

Этот раздел справки сгенерирован автоматически.

Ниже описаны скорее детали реализации. Чтоб использовать pymorphy, их знать необязательно.

Если вы не планируете участвовать в разработке pymorphy, полезнее ознакомиться со следующим документом: Поддерживаемые типы хранилищ

Базовый класс

class pymorphy.backends.base.DictDataSource

Базовые классы: object

Absctract base class for dictionary data source. Subclasses should make class variables (rules, lemmas, prefixes, gramtab, endings, possible_rule_prefixes) accessible through dict or list syntax (“duck typing”)

Абстрактный базовый класс для источников данных pymorphy. У подклассов должны быть свойства rules, lemmas, prefixes, gramtab, endings, possible_rule_prefixes, к которым можно было бы обращаться как к словарям, спискам или множествам.

rules

для каждой парадигмы - список правил (приставка, грам. информация, префикс):

{paradigm_id->[ (suffix, ancode, prefix) ]}
lemmas

для каждой леммы - список номеров парадигм (способов образования слов), доступных для данной леммы (основы слова):

{base -> [paradigm_id]}
prefixes

фиксированые префиксы:

set([prefix])
gramtab

грамматическая информация: словарь, ключи которого - индексы грам. информации (анкоды), значения - кортежи (часть речи, информация о грам. форме, какая-то непонятная буква):

{ancode->(type,info,letter)}
rule_freq

частоты для правил, используется при подготовке словарей:

{paradigm_id->freq}
endings

для каждого возможного 5 буквенного окончания - словарь, в котором ключи - номера возможных парадигм, а значения - номера возможных правил:

{word_end->{paradigm_id->(possible_paradigm_ids)}}
possible_rule_prefixes

набор всех возможных приставок к леммам:

[prefix]
calculate_rule_freq()

Подсчитать частоту, с которой встречаются различные правила. Требуется для предсказателя, чтобы выбирать наиболее распространенные варианты.

convert_and_save(data_obj)

Взять данные из data_obj (наследник DataDictSource) и сохранить из в специфичном для класса формате.

load()

Загрузить данные

DB-источники данных

class pymorphy.backends.shelve_source.ShelveDataSource(path='', db_type=None, cached=True)

Базовые классы: pymorphy.backends.base.DictDataSource

Источник данных для морфологического анализатора pymorphy, берущий информацию из key-value базы данных, используя модифицированный интерфейс shelve из стандартной библиотеки. Позволяет не держать все данные в памяти и в то же время обеспечивает достаточно быструю скорость работы.

Грамматическая информация и префиксы загружаются в память сразу.

convert_and_save(data_obj)
load()

Интерфейс к SQLite

class pymorphy.backends.shelve_source.sqlite_shelve.SqliteDict(filename=None, connection=None, table='shelf')

Базовые классы: object

A dictionary that stores its data in a table in sqlite3 database

clear()
close()
has_key(key)
sync()
class pymorphy.backends.shelve_source.sqlite_shelve.SqliteShelf(filename=None, flag='', key_type='str', dump_method='json', cached=True, connection=None, table='shelf')

Базовые классы: pymorphy.backends.shelve_source.shelf_with_hooks.ShelfWithHooks

close()

Интерфейс к Shelve (BSDDB, GDBM, DBM)

class pymorphy.backends.shelve_source.shelf_with_hooks.ShelfWithHooks(filename, flag, key_type='str', dump_method='json', cached=True, writeback=False)

Базовые классы: shelve.DbfilenameShelf

Shelf class with key and value transform hooks.

DUMP_METHODS = {'json': {'dumps': <function json_dumps at 0x1071f9488>, 'loads': <function loads at 0x1071f9410>}, 'marshal': {'dumps': <built-in function dumps>, 'loads': <built-in function loads>}}
KEY_TRANSFORM_METHODS = {'int': {'encode': <function <lambda> at 0x1071f9668>, 'decode': <function <lambda> at 0x1071f96e0>}, 'str': {'encode': <function <lambda> at 0x1071f9758>, 'decode': <function <lambda> at 0x1071f97d0>}, 'unicode': {'encode': <function <lambda> at 0x1071f9578>, 'decode': <function <lambda> at 0x1071f95f0>}}
close()
get(key, default=None)
has_key(key)
keys()
pymorphy.backends.shelve_source.shelf_with_hooks.json_dumps(value)

Интерфейс к CDB

class pymorphy.backends.shelve_source.cdb_shelve.CdbReadDict(filename)

Базовые классы: object

close()
has_key(key)
class pymorphy.backends.shelve_source.cdb_shelve.CdbShelf(filename, flag, key_type='str', dump_method='json', cached=True, writeback=False)

Базовые классы: pymorphy.backends.shelve_source.shelf_with_hooks.ShelfWithHooks

close()
class pymorphy.backends.shelve_source.cdb_shelve.CdbWriteDict(filename)

Базовые классы: object

close()

Интерфейс к Tokyo Cabinet

class pymorphy.backends.shelve_source.pytc_shelve.PytcBtreeShelf(filename, flag, key_type='str', dump_method='json', cached=True, writeback=False)

Базовые классы: pymorphy.backends.shelve_source.pytc_shelve.PytcHashShelf

DB_CLASS

псевдоним класса BDB

class pymorphy.backends.shelve_source.pytc_shelve.PytcHashShelf(filename, flag, key_type='str', dump_method='json', cached=True, writeback=False)

Базовые классы: pymorphy.backends.shelve_source.shelf_with_hooks.ShelfWithHooks

DB_CLASS

псевдоним класса HDB

close()

Бэкенд для разбора исходных MRD-файлов

Алгоритм работы с ним “как есть” должен быть совсем не таким, как в pymorphy, pymorphy с исходными MRD-файлами работает крайне неэффективно.

Этот бэкенд используется только для переконвертации исходных словарей.

class pymorphy.backends.mrd_source.MrdDataSource(dict_name, gramtab_name, strip_EE=True)

Базовые классы: pymorphy.backends.base.DictDataSource

Источник данных для морфологического анализатора pymorphy, берущий информацию из оригинальных mrd-файлов (в которых кодировка была изменена с 1251 на utf-8). Используется для конвертации оригинальных данных в простые для обработки ShelveDict или PickledDict.

load()
static setup_psyco()

Оптимизировать узкие места в MrdDataSource с помощью psyco

Pickle-источник данных

class pymorphy.backends.pickle_source.PickleDataSource(file)

Базовые классы: pymorphy.backends.base.DictDataSource

Источник данных для морфологического анализатора pymorphy, берущий информацию из файлов, куда с помощью pickle были сохранены данные. Самый быстрый, но ест уйму памяти (> 100 MB).

convert_and_save(data_obj)
load()