Идея: вместо случайного набора символов генерировать осмысленную русскую фразу из частотного словаря. Фраза запоминается легко, а энтропия остаётся высокой за счёт большого числа слов в каждой позиции.
Берём шаблон:
Прил₁(им.п.) Сущ₁(им.п.) Нар Глагол(3 л. ед.ч.) Прил₂(вин.п.) Сущ₂(вин.п.)
Для каждой позиции случайно выбирается слово из соответствующего словаря. Прилагательное согласуется с существительным по роду (им.п.) и по роду + одушевлённости (вин.п.). Окончания берутся напрямую из словаря — без морфологического анализатора во время генерации.
Неряшливый уролог поодиночке обнесёт голословную свирель
Случайный клык организованно вожмёт дипломный расплав
Теневыносливая сложность порядочно выручает осенний рюш
Ночная вилка преднамеренно различается суровую ось
Магическая заповедь лестно метнётся ироничный календарь
Словари составлены по пересечению частотного словаря Ляшевской–Шарова (только слова, реально встречавшиеся в НКРЯ) и морфологической базы OpenCorpora (все словоформы с разметкой).
| Позиция | Часть речи | Слов | Бит |
|---|---|---|---|
| Прил₁, Прил₂ | прилагательные | 10 000 | 13.3 |
| Сущ₁, Сущ₂ | существительные | 20 000 | 14.3 |
| Нар | наречия | 2 200 | 11.1 |
| Глагол | глаголы | 12 300 | 13.6 |
Итого для шаблона Прил+Сущ+Нар+Гл+Прил+Сущ:
13.3 + 14.3 + 11.1 + 13.6 + 13.3 + 14.3 = 79.9 бит
Параметр --top K ограничивает словари K самыми частыми словами — фразы
становятся проще и привычнее, энтропия снижается:
--top |
Бит | Характер фраз |
|---|---|---|
| (все) | 79.9 | редкие слова встречаются |
| 3000 | 68.9 | уверенно узнаваемые слова |
| 500 | 53.8 | только самые общеупотребительные |
# собрать словари (один раз, ~30 сек)
python3 build_dicts.py
# сгенерировать одну фразу
python3 gen.py
# несколько фраз
python3 gen.py -n 5
# только из самых частых слов + показать энтропию
python3 gen.py --top 3000 --entropy -n 3build_dicts.py — сборка словарей из исходников
gen.py — генератор фраз
data/
raw/
ruslang/ — частотный словарь Ляшевской–Шарова
opencorpora/ — морфологическая база OpenCorpora
dicts/
nouns.json — существительные: лемма, род, одушевлённость, им./вин. форма
adjs.json — прилагательные: лемма, все формы им./вин. по родам
verbs.json — глаголы: лемма, вид, форма 3 л. ед.ч.
advs.json — наречия: лемма
meta.json — размеры словарей, энтропия, дата сборки
-
О. Н. Ляшевская, С. А. Шаров. Частотный словарь современного русского языка (на материалах Национального корпуса русского языка). М.: Азбуковник, 2009. — dict.ruslang.ru/freq.php
-
OpenCorpora — открытый корпус русского языка с морфологической разметкой. — opencorpora.org/dict.php
