Перейти к содержанию

Частотный словарь Ляшевской и Шарова

FreqDict(data_dir=DEFAULT_DATASET_DIR)

Частотный словарь современного русского языка О. Н. Ляшевской и С. А. Шарова (Freq2011): 52 138 лемм современного подкорпуса НКРЯ (1950-2007, 92 млн словоупотреблений) с частотой ipm, диапазоном R (число сегментов корпуса из 100, в которых встретилась лемма), коэффициентом Жуйана D, числом текстов и частью речи в разметке MyStem (s, v, a, adv, s.PROP для имен собственных).

Словарь загружается с сайта dict.ruslang.ru (только HTTP, 493 КБ). Лицензия не указана, авторы просят ссылаться на первоисточник:

Цитирование

Ляшевская О. Н., Шаров С. А. Частотный словарь современного русского языка (на материалах Национального корпуса русского языка). М.: Азбуковник, 2009.

Для поиска леммы с несколькими частями речи (а - союз, частица, междометие) склеиваются: ipm суммируется, R, D и число текстов берутся максимальные; лемма приводится к нижнему регистру, ё заменяется на е, как в словаре. Разобранный словарь кэшируется по пути к файлу и читается один раз на процесс, поэтому создавать FreqDict() для каждого текста не накладно. Словарь используется классом LexicalStats и как эталонный корпус в keyness (объем корпуса словаря - CORPUS_SIZE, 92 млн словоупотреблений).

Исключения:

  • SourceTypeError - data_dir, который не строка и не Path.
from ruts.datasets import FreqDict

fd = FreqDict()
fd.download()
fd.info["citation"]
'Ляшевская О. Н., Шаров С. А. Частотный словарь современного русского языка (на материалах Национального корпуса русского языка). М.: Азбуковник, 2009.'

Параметры

Параметр Тип По умолчанию Описание
data_dir str / Path DEFAULT_DATASET_DIR Путь к директории со словарем; по умолчанию dicts в DEFAULT_DATA_DIR

Атрибуты

Атрибут Тип Описание
entries dict[str, Entry] Справочник статей по нормализованной лемме
min_ipm float Минимальная частота в словаре (0.4)
word_ipm dict[str, float] Частоты по статье, к которой приводится словоформа без части речи, - эталон keyness
info dict[str, str] Наименование словаря и справочная информация о нем
Entry(lemma, pos, ipm, range, dispersion, docs)

Статья словаря: именованный кортеж.

Поле Тип Описание
lemma str Лемма
pos tuple[str, ...] Части речи леммы в разметке MyStem
ipm float Частота на миллион словоупотреблений, сумма по частям речи
range int Число сегментов корпуса из 100, в которых встретилась лемма
dispersion int Коэффициент Жуйана D
docs int Число текстов, в которых встретилась лемма

Методы

download(force=False) загружает словарь из сети и извлекает файл. Загруженный архив сверяется с контрольной суммой SHA-256 (файл на сайте не менялся с 2013 года); поврежденный или подмененный файл удаляется с ошибкой DownloadError, чтобы повторная загрузка не пропускалась. Если архив уже есть, а файла словаря нет, архив извлекается заново.

Параметр Тип По умолчанию Описание
force bool False Загрузить словарь, даже если он уже загружен

Файл, который не удалось загрузить, тоже дает DownloadError, архив, который не удалось извлечь, - DataFileError.

check_data() проверяет, что файл словаря на месте, и возвращает True; незагруженный словарь дает DatasetNotFoundError с командами загрузки, как и обращение к статьям и частотам.

lookup(lemma) возвращает статью словаря по лемме в любом регистре, с ё или без, None для леммы вне словаря; ipm(lemma) - частоту леммы на миллион словоупотреблений, 0 для леммы вне словаря.

Параметр Тип По умолчанию Описание
lemma str - Лемма

Лемма, которая не строка, дает SourceTypeError.

fd.lookup("кот")
fd.lookup("Ещё")
fd.ipm("котёнок"), fd.ipm("котоведение")
"кот" in fd, len(fd)
Entry(lemma='кот', pos=('s',), ipm=40.3, range=98, dispersion=90, docs=947)
Entry(lemma='еще', pos=('adv', 'part'), ipm=2409.4, range=100, dispersion=97, docs=22654)
(14.5, 0.0)
(True, 51682)

get_records(pos=None, min_ipm=None, limit=None) возвращает генератор записей словаря в порядке файла (алфавитном) с фильтрацией по части речи и минимальной частоте; get_texts с теми же параметрами - генератор лемм.

Параметр Тип По умолчанию Описание
pos str None Часть речи в разметке MyStem
min_ipm float None Минимальная частота
limit int None Количество записей

Неизвестная часть речи и limit, который не целое неотрицательное число, дают ParameterError.

for record in fd.get_records(pos="s", min_ipm=2700, limit=2):
    print(record)
list(fd.get_texts(pos="s", min_ipm=2700, limit=2))
{'lemma': 'год', 'pos': 's', 'ipm': 3727.5, 'range': 100, 'dispersion': 94, 'docs': 29477}
{'lemma': 'человек', 'pos': 's', 'ipm': 2723.0, 'range': 100, 'dispersion': 97, 'docs': 20423}
['год', 'человек']