Files
999/scripts/rebuild_oracle_lexicon.py
T
Alexyz 7f91366201 feat: Random.org dice and daily word matrix, interpreter voices, curated lexicon
Wire cleromancy rolls and the once-per-UTC-day 000-999 word shuffle to RANDOM.ORG JSON-RPC, with a local CSPRNG fallback. Add settings for interpreter personas and a cleaner default oracle prompt. Replace proper names and bureaucratic filler in the 1000-word lexicon with sacred symbols.
2026-09-08 13:46:11 +05:00

491 lines
52 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Rebuild the Oracle 999 lexicon: drop names/bureaucracy, keep function words, expand the sacred core to exactly 1000."""
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "lib/data/words_data.dart"
OUT = SRC
CAT_ORDER = [
"Образ / Архетип",
"Космический Знак",
"Сакральный Символ",
"Священный Предмет",
"Сакральное Место",
"Тотем / Архетип",
"Архетип Человека",
"Действие / Трансформация",
"Свойство / Качество",
"Вектор / Обстоятельство",
"Связь / Направление",
"Направление",
"Определение",
"Узел / Отношение",
"Импульс / Оттенок",
"Фокус сознания",
"Числовой код",
]
CORE_ORDER = [
"огонь", "вода", "воздух", "земля", "свет", "тьма", "день", "ночь", "утро", "вечер",
"север", "юг", "восток", "запад", "небо", "бездна", "верх", "низ", "высота", "глубина",
"порядок", "хаос", "жизнь", "смерть", "рождение", "угасание", "начало", "конец",
"добро", "зло", "истина", "ложь", "сила", "слабость", "любовь", "ненависть", "мир", "война",
"свобода", "плен", "дух", "тело", "явь", "сон", "память", "забвение", "пустота", "полнота",
"вход", "выход", "друг", "враг", "чистота", "скверна", "дар", "жертва", "тайна", "откровение",
"тишина", "зов", "ключ", "замок", "мать", "отец", "мудрец", "безумец",
"звезда", "солнце", "луна", "комета", "затмение", "рассвет", "закат", "зенит", "эфир", "вечность",
"судьба", "рок", "знамение", "пророчество",
"алтарь", "святилище", "храм", "купель", "чаша", "посох", "меч", "щит", "корона", "цепь",
"кольцо", "свиток", "зеркало", "свеча", "нить", "печать", "завеса", "колокол", "факел", "кристалл",
"океан", "пустыня", "пещера", "лабиринт", "скала", "гора", "долина", "остров", "источник", "родник",
"водопад", "перекресток", "порог", "врата", "мост", "башня", "сад", "роща",
"древо", "корень", "семя", "плод", "цветок", "роза", "лотос",
"змей", "орел", "волк", "ворон", "лев", "сова", "лебедь", "дракон", "феникс",
"странник", "хранитель", "воин", "целитель", "пророк", "вестник", "страж", "царь", "жрец", "маг",
"отшельник", "творец", "спутник",
]
CORE = set(CORE_ORDER)
FUNC_POS = {
"предлог", "союз", "частица", "местоимение", "местоименное прил.", "наречие-местоимение",
}
DROP = {
# names / toponyms / abbreviations
"александр", "америка", "андрей", "борис", "виктор", "владимир", "европа", "иван",
"иванович", "игорь", "михаил", "москва", "николай", "россия", "рф", "сергей", "ссср",
"сталин", "сша",
# ordinals
"первый", "второй", "третий",
# bureaucratic / mundane nouns
"автор", "анализ", "армия", "база", "безопасность", "большинство", "бумага", "вариант",
"возможность", "возраст", "врач", "время", "выбор", "генерал", "глава", "группа", "губа",
"данные", "действие", "дело", "директор", "доктор", "задача", "здание", "значение",
"изменение", "использование", "исследование", "карман", "качество", "класс", "количество",
"команда", "комплекс", "контроль", "культура", "курс", "литература", "масса", "материал",
"метод", "минута", "мнение", "модель", "население", "наука", "начальник", "неделя",
"необходимость", "номер", "образование", "обстоятельство", "общество", "объем", "операция",
"организация", "оценка", "очередь", "период", "писатель", "план", "площадь", "повод",
"подготовка", "позиция", "политика", "положение", "понятие", "практика", "предложение",
"предмет", "председатель", "представитель", "представление", "президент", "пример",
"проведение", "продукт", "производство", "работа", "разговор", "размер", "регион",
"республика", "реформа", "роль", "ряд", "самолет", "содержание", "соответствие", "состав",
"спектакль", "способ", "средство", "срок", "степень", "страна", "строительство", "текст",
"тема", "техника", "технология", "тип", "товарищ", "требование", "услуга", "участие",
"участник", "участок", "факт", "федерация", "фильм", "хозяйство", "член", "школа",
"господин",
# journalistic adjectives
"американский", "боевой", "больший", "бывший", "военный", "городской", "детский", "должен",
"единственный", "известный", "местный", "мировой", "московский", "народный", "небольшой",
"немецкий", "нужный", "нынешний", "обычный", "отдельный", "очередной", "рабочий",
"российский", "русский", "собственный", "современный", "способный", "средний", "старший",
"судебный", "человеческий",
# bureaucratic verbs
"заявить", "использовать", "иметься", "называться", "отметить", "относиться", "позволять",
"получаться", "получиться", "предлагать", "представить", "представлять", "привести",
"принимать", "приходиться", "провести", "проводить", "произойти", "происходить", "работать",
"следовать", "составлять", "состоять", "считать", "требовать", "удаться", "установить",
"являться", "заниматься", "определить", "оказаться", "оказываться", "приехать", "позвонить",
"купить", "сообщить", "составить", "выступать", "получать",
# meta / journalistic adverbs
"весьма", "видимо", "видно", "вовсе", "вполне", "впрочем", "далее", "действительно",
"довольно", "достаточно", "значит", "известно", "кажется", "конечно", "кстати", "менее",
"может", "наиболее", "например", "необходимо", "несмотря", "обычно", "одновременно",
"особенно", "полностью", "практически", "совершенно", "также",
}
# word, category, description — exactly 236 universal core symbols
NEW_CORE = [
# --- Образ / Архетип (80) ---
("лёд", "Образ / Архетип", "Застывший поток, остановка движения, хрупкая прозрачность сохранённой памяти."),
("пламя", "Образ / Архетип", "Живой огонь преображения, неудержимый подъём, свет, требующий пищи."),
("искра", "Образ / Архетип", "Первый толчок замысла, крошечное начало великого горения."),
("пепел", "Образ / Архетип", "Остаток сожжённого, смирение формы, почва для нового ростка."),
("дым", "Образ / Архетип", "След исчезнувшего, молитва, уходящая в небо, завеса между мирами."),
("пар", "Образ / Архетип", "Граница воды и воздуха, переход состояний, невидимая сила нагрева."),
("тень", "Образ / Архетип", "Спутник света, сокрытая сторона души, то, без чего нет объёма."),
("луч", "Образ / Архетип", "Направленный свет, пронзающий тьму, избранный путь озарения."),
("сияние", "Образ / Архетип", "Избыток света, слава присутствия, излучение без источника-огня."),
("мрак", "Образ / Архетип", "Плотная тьма без звёзд, испытание слепотой, лоно невидимого."),
("сумерки", "Образ / Архетип", "Порог дня и ночи, час двусмысленности, время духов и знаков."),
("полдень", "Образ / Архетип", "Пик явленности, беспощадная ясность, тень, сжатая под ногами."),
("полночь", "Образ / Архетип", "Сердце ночи, точка перелома суток, час глубоких решений."),
("зима", "Образ / Архетип", "Сон земли, испытание холодом, время корней и внутреннего огня."),
("весна", "Образ / Архетип", "Пробуждение соков, нежность начала, возврат жизненной силы."),
("осень", "Образ / Архетип", "Сбор плодов, золотое увядание, мудрость отпускания."),
("молния", "Образ / Архетип", "Мгновенный удар неба, озарение-разрыв, воля без отлагательства."),
("гром", "Образ / Архетип", "Голос небес после вспышки, предупреждение, сотрясение основ."),
("дождь", "Образ / Архетип", "Благодатное омовение, слёзы неба, питание иссохшей земли."),
("туман", "Образ / Архетип", "Скрывающий покров, растворение границ, время не доверять глазам."),
("роса", "Образ / Архетип", "Тихий дар утра, чистота, собранная без грозы."),
("иней", "Образ / Архетип", "Хрупкий узор холода, красота, тающая от дыхания."),
("буря", "Образ / Архетип", "Ярость стихий, очистительный слом, проверка, крепки ли корни."),
("волна", "Образ / Архетип", "Ритм океана, подъём и спад, сила, возвращающаяся к берегу."),
("прилив", "Образ / Архетип", "Нарастание сил, прибытие дара, заполнение пустот."),
("отлив", "Образ / Архетип", "Отход вод, обнажение дна, время увидеть скрытое."),
("лава", "Образ / Архетип", "Расплавленная сердцевина, разрушительное творение новой земли."),
("радуга", "Образ / Архетип", "Завет после грозы, мост цветов, знак примирения стихий."),
("эхо", "Образ / Архетип", "Возвращённый голос, последствие слова, память пространства."),
("миг", "Образ / Архетип", "Атом времени, дверь, открытая лишь на вдох."),
("цикл", "Образ / Архетип", "Вечный круговорот, возврат урока, закон повторения до понимания."),
("эпоха", "Образ / Архетип", "Большой цикл судьбы, смена мирового дыхания."),
("карма", "Образ / Архетип", "Неустранимый посев дел, возвращающийся плод каждого выбора."),
("грех", "Образ / Архетип", "Нарушение внутренней правды, трещина в целостности духа."),
("вина", "Образ / Архетип", "Груз содеянного, зов к искуплению, якорь прошлого."),
("стыд", "Образ / Архетип", "Огонь обнажённости, страж границ, сигнал совести."),
("гордыня", "Образ / Архетип", "Раздутое «я», слепота высоты, падение, уже начавшееся внутри."),
("смирение", "Образ / Архетип", "Сила, преклонившая голову, податливость, в которой нет слабости."),
("отчаяние", "Образ / Архетип", "Дно колодца, точка, где остаётся только крик к Небу."),
("сомнение", "Образ / Архетип", "Трещина в вере, страж от слепоты, яд, если пьют без меры."),
("мудрость", "Образ / Архетип", "Зрение сквозь время, тихий плод прожитых ошибок."),
("справедливость", "Образ / Архетип", "Весы мира, восстановление меры, меч, не знающий лица."),
("месть", "Образ / Архетип", "Круг боли, возвращающий удар, огонь, сжигающий держащего."),
("прощение", "Образ / Архетип", "Размыкание цепи, отпускание яда, свобода обоих берегов."),
("клятва", "Образ / Архетип", "Слово, ставшее узами, печать воли, которую нельзя снять легко."),
("обет", "Образ / Архетип", "Добровольный зарок, стена и крылья избранного пути."),
("искушение", "Образ / Архетип", "Приманка тени, проверка подлинности желания."),
("искупление", "Образ / Архетип", "Цена возврата к целому, труд очищения долга."),
("посвящение", "Образ / Архетип", "Переход через порог знания, смерть старого имени."),
("чудо", "Образ / Архетип", "Вмешательство иного порядка, разрыв привычной причинности."),
("благословение", "Образ / Архетип", "Поток благой силы, рука, лежащая на судьбе."),
("проклятие", "Образ / Архетип", "Заклятый яд слова, узел, требующий расплетения."),
("яд", "Образ / Архетип", "Скрытая порча, лекарство в капле, смерть в чаше."),
("нектар", "Образ / Архетип", "Пища бессмертия, сладость истины, дар, которого нельзя требовать."),
("голод", "Образ / Архетип", "Пустота, движущая к поиску, испытание нуждой."),
("жажда", "Образ / Архетип", "Зов к источнику, сухость духа, неутолённое стремление."),
("покой", "Образ / Архетип", "Неподвижность целого, мир после бури, священная остановка."),
("тревога", "Образ / Архетип", "Сторожевой звон, предчувствие сдвига, ум без места."),
("гнев", "Образ / Архетип", "Огонь границы, сила «нет», разрушительный без узды."),
("печаль", "Образ / Архетип", "Дождь сердца, честная дань утрате, очищение через тяжесть."),
("скорбь", "Образ / Архетип", "Глубокое озеро потери, время, когда мир сужается до боли."),
("страсть", "Образ / Архетип", "Пожирающий жар желания, двигатель творения и гибели."),
("холод", "Образ / Архетип", "Отстранение, ясность без тепла, сон чувств."),
("жар", "Образ / Архетип", "Лихорадка жизни, перегрев воли, пламя, близкое к болезни."),
("изобилие", "Образ / Архетип", "Переполнение даров, рог судьбы, испытание мерой."),
("нищета", "Образ / Архетип", "Обнажённость без покровов, свобода от лишнего, урок нуля."),
("болезнь", "Образ / Архетип", "Весть тела, остановка привычного, зов к исцелению корня."),
("рана", "Образ / Архетип", "Открытый край опыта, место, где входит и свет, и яд."),
("шрам", "Образ / Архетип", "Зажившая память, знак пройденного огня, печать урока на коже."),
("безмолвие", "Образ / Архетип", "Глубже тишины, отказ от слова, слух, ставший безграничным."),
("шёпот", "Образ / Архетип", "Тайная речь, совет на ухо, сила малого звука."),
("крик", "Образ / Архетип", "Прорыв невыносимого, зов о помощи, разрыв завесы."),
("смех", "Образ / Архетип", "Освобождение сжатого, священное несерьёзное, победа над страхом."),
("плач", "Образ / Архетип", "Вода глаз, разрешение камня в груди, дождь исцеления."),
("танец", "Образ / Архетип", "Молитва тела, согласие с ритмом мира, путь без слов."),
("бдение", "Образ / Архетип", "Сторожение в ночи, отказ от сна ради смысла."),
("пост", "Образ / Архетип", "Священный голод, очищение от лишнего, заточка воли."),
("пир", "Образ / Архетип", "Праздник полноты, союз за столом, опасность избытка."),
("благодать", "Образ / Архетип", "Незаслуженный дар свыше, масло на рану мира."),
("дыхание", "Образ / Архетип", "Нить жизни, обмен с миром, первая и последняя молитва тела."),
# --- Космический Знак (14) ---
("заря", "Космический Знак", "Первый цвет неба, обещание дня, нежность начала света."),
("горизонт", "Космический Знак", "Линия невозможного касания, предел видимого, зов идти дальше."),
("небосвод", "Космический Знак", "Чаша над головой, кров судьбы, поле, по которому ходят светила."),
("созвездие", "Космический Знак", "Узор судеб на тёмном поле, союз далёких огней, дающих имя пути."),
("планета", "Космический Знак", "Странник орбиты, характер влияния, тело, держащее свой закон."),
("метеор", "Космический Знак", "Короткий огонь падения, исполнение желания, след, сгорающий в полёте."),
("аврора", "Космический Знак", "Полярное сияние духа, завеса меж мирами, танец невидимых сил."),
("надир", "Космический Знак", "Противоточка зенита, глубинная опора, низ, без которого нет верха."),
("солнцеворот", "Космический Знак", "Перелом годового колеса, возврат света или тьмы, священный канун."),
("полнолуние", "Космический Знак", "Полная чаша ночи, пик чувства, безумие и ясность одновременно."),
("новолуние", "Космический Знак", "Тёмное зерно месяца, посев втайне, сила начинать в невидимом."),
("равноденствие", "Космический Знак", "Равный шаг света и тьмы, точка меры, хрупкий космический баланс."),
("зодиак", "Космический Знак", "Пояс зверей неба, круг архетипов, через который проходит Солнце."),
("орбита", "Космический Знак", "Закон возвращения, путь вокруг центра, верность своему кругу."),
# --- Сакральный Символ (28) ---
("спираль", "Сакральный Символ", "Путь, который возвращается выше, рост через виток, живая геометрия."),
("узел", "Сакральный Символ", "Связка судеб, заклятие или союз, то, что нельзя разрубить без цены."),
("яйцо", "Сакральный Символ", "Целое до рождения, защищённый потенциал, мир, ещё не расколотый."),
("весы", "Сакральный Символ", "Мера правды, час выбора, требование не перевесить чашу."),
("якорь", "Сакральный Символ", "Верность глубине, остановка дрейфа, тяжесть, спасающая в буре."),
("крест", "Сакральный Символ", "Схождение вертикали духа и горизонтали мира, принятие полной меры."),
("руна", "Сакральный Символ", "Сжатое имя силы, знак, который действует, когда его произносят."),
("мандала", "Сакральный Символ", "Священный круг порядка, карта внутреннего космоса, целостность узора."),
("уроборос", "Сакральный Символ", "Змей, кусающий хвост, вечное самопожирание и саморождение цикла."),
("грааль", "Сакральный Символ", "Невзятая чаша духа, святыня поиска, дар лишь чистым намерениям."),
("колесо", "Сакральный Символ", "Фортуна и закон оборота, взлёт, падение и снова взлёт."),
("ось", "Сакральный Символ", "Неподвижный стержень вращения мира, точка, вокруг которой всё пляшет."),
("рог", "Сакральный Символ", "Сила зверя и изобилие, зов сбора, власть, растущая из плоти."),
("кадуцей", "Сакральный Символ", "Жезл согласия противоположностей, исцеление через сплетение змеев."),
("тотем", "Сакральный Символ", "Родовой зверь-хранитель, живой герб души, запрет и защита крови."),
("идол", "Сакральный Символ", "Застывший образ силы, опасность поклонения форме вместо сути."),
("скрижаль", "Сакральный Символ", "Высеченный закон, слово, ставшее камнем, нестираемая заповедь."),
("гримуар", "Сакральный Символ", "Книга тайных имён, опасное знание, ключ, требующий зрелости."),
("дуб", "Сакральный Символ", "Царь леса, стойкость веков, священная ось между корнем и кроной."),
("ива", "Сакральный Символ", "Плачущая гибкость, вода в дереве, сила, что гнётся и не ломается."),
("берёза", "Сакральный Символ", "Чистота северного света, обновление кожи, нежность и живучесть."),
("кедр", "Сакральный Символ", "Нетленное дерево, благовонный столп, память, не гниющая во времени."),
("кипарис", "Сакральный Символ", "Страж порога смерти, вечнозелёная скорбь, дерево иного берега."),
("плющ", "Сакральный Символ", "Верность опоре, медленное овладение, жизнь, держащаяся чужого ствола."),
("полынь", "Сакральный Символ", "Горькая трава ясности, изгнание морока, лекарство, которое не сладко."),
("папоротник", "Сакральный Символ", "Цветок Ивановой ночи, скрытый огонь в тени, удача для ищущего."),
("лавр", "Сакральный Символ", "Венок победы и поэта, слава, которую нельзя сорвать без цены."),
("олива", "Сакральный Символ", "Ветвь мира, масло света, долготерпение среди камней."),
# --- Священный Предмет (32) ---
("карта", "Священный Предмет", "Лик пути, расклад возможностей, зеркало, говорящее образами."),
("компас", "Священный Предмет", "Верность северу души, стрелка, не лгущая в тумане."),
("стрела", "Священный Предмет", "Намерение, пущенное в полёт, слово, которое уже не вернуть."),
("лук", "Священный Предмет", "Напряжённая воля, гибкая сила, готовность к точному выстрелу."),
("копьё", "Священный Предмет", "Прямая воля на расстоянии, укол правды, оружие стража порога."),
("кинжал", "Священный Предмет", "Сокровенное оружие близи, скрытое решение, клинок в рукаве судьбы."),
("топор", "Священный Предмет", "Рассекающий удар, рубка лишнего, орудие и строительства, и казни."),
("молот", "Священный Предмет", "Сила кузницы, удар, придающий форму, гром ремесла и суда."),
("верёвка", "Священный Предмет", "Связь и путы, спасение и петля, то, чем вяжут судьбы."),
("сосуд", "Священный Предмет", "Вместилище дара или яда, мера того, что вы способны удержать."),
("лампа", "Священный Предмет", "Ручной свет в темноте, знание, которое носят с собой."),
("фонарь", "Священный Предмет", "Страж ночной тропы, круг света среди неизвестного."),
("маска", "Священный Предмет", "Личина роли, защита лица, опасность забыть, кто под ней."),
("вуаль", "Священный Предмет", "Полускрытость тайны, стыдливость святыни, дымка между вами и сутью."),
("плащ", "Священный Предмет", "Покров странника, невидимость, достоинство, которое носят на плечах."),
("барабан", "Священный Предмет", "Сердцебиение ритуала, зов к сбору, ритм, подчиняющий шаг."),
("флейта", "Священный Предмет", "Голос ветра в тростнике, зачарование, зов, ведущий за собой."),
("арфа", "Священный Предмет", "Струны души, гармония сфер, музыка, примиряющая небо и землю."),
("лира", "Священный Предмет", "Оружие поэта, строй космоса, дар укрощать зверя песней."),
("жребий", "Священный Предмет", "Священный случай, кость вопроса, согласие принять выпавшее."),
("кость", "Священный Предмет", "Остов формы, память предков, оракул, брошенный на землю."),
("амулет", "Священный Предмет", "Малая стража на теле, сжатая молитва, щит, который носят скрытно."),
("талисман", "Священный Предмет", "Заряженный знак удачи, якорь намерения, вещь, держащая заклинание."),
("реликвия", "Священный Предмет", "Остаток святого присутствия, мост к предку, сила через касание."),
("кадило", "Священный Предмет", "Дым молитвы, очищение воздуха, качающийся ритм священнодействия."),
("ладан", "Священный Предмет", "Благовоние восхождения, сладкий дым, несущий слово вверх."),
("мирра", "Священный Предмет", "Горький дар погребения и царей, масло скорби и коронации."),
("котёл", "Священный Предмет", "Лоно превращений, варево судеб, место, где многое становится одним."),
("кубок", "Священный Предмет", "Чаша союза, клятва за столом, глоток, связывающий пьющих."),
("хлеб", "Священный Предмет", "Плоть земли, дар насущный, преломление, делающее чужих своими."),
("вино", "Священный Предмет", "Кровь лозы, опьянение духа, таинство радости и жертвы."),
("соль", "Священный Предмет", "Завет нетления, вкус правды, охрана от гниения и порчи."),
# --- Сакральное Место (26) ---
("колодец", "Сакральное Место", "Глубина, откуда пьют, голос снизу, опасная и живая тьма воды."),
("кладбище", "Сакральное Место", "Сад предков, порог иного берега, тишина, учащая мере жизни."),
("тропа", "Сакральное Место", "Узкий путь знающих, след, протоптанный теми, кто шёл раньше."),
("перевал", "Сакральное Место", "Высшая точка перехода, ветер двух склонов, решение идти дальше."),
("пропасть", "Сакральное Место", "Разрыв земли, испытание головокружением, край, за которым нет дна."),
("болото", "Сакральное Место", "Зыбкая середина, место застревания, опасность принять топь за путь."),
("озеро", "Сакральное Место", "Зеркало в земле, стоячая глубина, душа, смотрящая на себя."),
("ручей", "Сакральное Место", "Малый живой ток, начало реки, скромная сила, которая не иссякает."),
("маяк", "Сакральное Место", "Огонь для заблудших, одинокая башня смысла в море хаоса."),
("кузница", "Сакральное Место", "Священный жар ремесла, место, где ударом рождается форма."),
("катакомбы", "Сакральное Место", "Подземные ходы памяти, скрытая церковь, путь в темноте костей."),
("чертог", "Сакральное Место", "Чертог силы, зал присутствия, пространство, где являются властители."),
("дворец", "Сакральное Место", "Обитель порядка и соблазна власти, красота, требующая стражи."),
("хижина", "Сакральное Место", "Малый кров отшельника, простота, в которой живёт большое."),
("шатёр", "Сакральное Место", "Переносной храм странника, временный круг своего среди чужого."),
("костёр", "Сакральное Место", "Сердце ночного стана, огонь собрания, круг, отгоняющий тьму."),
("пристань", "Сакральное Место", "Место прибытия и прощания, пауза между морями пути."),
("капище", "Сакральное Место", "Языческий престол сил, открытый алтарь под небом, место договора с духами."),
("дубрава", "Сакральное Место", "Священный лес дубов, вече предков, шепчущий свод листвы."),
("чаща", "Сакральное Место", "Густая глубь леса, потерянность, испытание без ориентиров."),
("ущелье", "Сакральное Место", "Узкий ход меж скал, вынужденный путь, эхо каждого шага."),
("обрыв", "Сакральное Место", "Край, где кончается земля, требование прыжка или поворота."),
("подземелье", "Сакральное Место", "Низ мира, место испытания и клада, спуск за своей тенью."),
("очаг", "Сакральное Место", "Сердце дома, хранимый огонь рода, точка, вокруг которой собираются свои."),
("скит", "Сакральное Место", "Уединённая обитель молитвы, пустынь духа вдали от шума."),
("обитель", "Сакральное Место", "Общий дом посвящённых, устав и кров, школа тишины."),
# --- Тотем / Архетип (30) ---
("медведь", "Тотем / Архетип", "Сон и мощь, хозяин чащи, сила, которая умеет уходить в зиму."),
("лиса", "Тотем / Архетип", "Хитрость тропы, рыжий ум границы, искусство быть непойманным."),
("олень", "Тотем / Архетип", "Благородство леса, венценосные рога года, чуткость и гордый шаг."),
("конь", "Тотем / Архетип", "Ветер под седлом, верный ход судьбы, сила, несущая всадника."),
("паук", "Тотем / Архетип", "Ткач сетей, терпеливый охотник центра, узор, в котором вязнут."),
("бабочка", "Тотем / Архетип", "Душа после кокона, хрупкое преображение, красота короткого дня."),
("рыба", "Тотем / Архетип", "Молчаливая мудрость вод, добыча и спасение, жизнь в невидимой глубине."),
("кит", "Тотем / Архетип", "Левиафан глубин, память океана, огромность, поющая в бездне."),
("петух", "Тотем / Архетип", "Глашатай рассвета, страж порога ночи, гордыня и верный крик."),
("бык", "Тотем / Архетип", "Земная мощь, упрямство плодородия, сила, которую нельзя сдвинуть легко."),
("коза", "Тотем / Архетип", "Живучесть склонов, жертва и свобода, тварь, идущая там, где не ступают."),
("баран", "Тотем / Архетип", "Лоб удара, начало зодиака, упрямство первопроходца."),
("скорпион", "Тотем / Архетип", "Тайное жало, смерть и воскресение, страж того, что хранят в тени."),
("журавль", "Тотем / Архетип", "Вестник дальних стран, танец верности, птица, несущая души."),
("сокол", "Тотем / Архетип", "Удар с высоты, зрение охотника, посланник царской воли."),
("кабан", "Тотем / Архетип", "Ярость чащи, клык земли, опасная прямота неукрощённой силы."),
("тигр", "Тотем / Архетип", "Полосатый огонь джунглей, царственная опасность, красота хищника."),
("пантера", "Тотем / Архетип", "Ночная бархатная смерть, грация тени, сила, которая не шумит."),
("рысь", "Тотем / Архетип", "Тайное зрение севера, бесшумный прыжок, страж скрытых троп."),
("заяц", "Тотем / Архетип", "Робкая лунная тварь, плодовитость страха, скорость спасения."),
("черепаха", "Тотем / Архетип", "Долготерпение, дом на себе, мудрость, не спешащая к гибели."),
("пчела", "Тотем / Архетип", "Соты порядка, сладкий труд, жалящая служительница общего блага."),
("муравей", "Тотем / Архетип", "Малая сила множества, путь, которого не стыдятся, строительство снизу."),
("голубь", "Тотем / Архетип", "Вестник мира, нежность духа, птица, несущая ветвь после потопа."),
("ласточка", "Тотем / Архетип", "Возврат весны, быстрый дом под стрехой, весть, что зима кончилась."),
("филин", "Тотем / Архетип", "Ночной мудрец, круглое зрение тьмы, голос, от которого стынет кровь."),
("грифон", "Тотем / Архетип", "Страж сокровищ, союз орла и льва, тварь, не пускающая недостойных."),
("единорог", "Тотем / Архетип", "Неуловимая чистота, сила, клонящаяся лишь к невинности."),
("сфинкс", "Тотем / Архетип", "Загадка на пороге, смерть за неверный ответ, страж тайны человека."),
("дельфин", "Тотем / Архетип", "Радость глубин, спаситель утопающих, ум, играющий в волне."),
# --- Архетип Человека (26) ---
("ведьма", "Архетип Человека", "Знающая края, хозяйка трав и луны, сила, живущая вне закона толпы."),
("шаман", "Архетип Человека", "Ходок меж мирами, лекарь трещин, тот, кто платит собой за проход."),
("король", "Архетип Человека", "Бремя короны, ответственность за порядок, солнце человеческого круга."),
("королева", "Архетип Человека", "Лунная власть сердца, держащая трон изнутри, плодородие и закон дома."),
("нищий", "Архетип Человека", "Обнажённый перед миром, святой или сломленный, учитель пустых рук."),
("дитя", "Архетип Человека", "Невинное начало, открытые глаза, будущее, которое ещё можно направить."),
("старец", "Архетип Человека", "Снег на кроне, живая летопись, благословение последнего слова."),
("дева", "Архетип Человека", "Закрытый сад потенциала, чистота, ещё не отданная миру."),
("охотник", "Архетип Человека", "Выслеживание сути, терпение тропы, тот, кто кормит племя точным ударом."),
("кузнец", "Архетип Человека", "Мастер огня и железа, придающий судьбе форму ударами воли."),
("пилигрим", "Архетип Человека", "Идущий к святыне, обет дороги, жизнь, ставшая путём."),
("изгнанник", "Архетип Человека", "Вычтенный из круга, горькая свобода чужбины, урок бездомности."),
("предатель", "Архетип Человека", "Разрыв клятвы, нож в спине союза, тень, без которой не узнать верности."),
("спаситель", "Архетип Человека", "Тот, кто входит в чужую беду, свет, платящий собой за других."),
("демон", "Архетип Человека", "Испытатель воли, олицетворение страсти, сила, требующая имени и узды."),
("ангел", "Архетип Человека", "Вестник иного порядка, страж и посланник, присутствие без тяжести плоти."),
("богиня", "Архетип Человека", "Женский лик Божественного, лоно и корона, сила, дающая и забирающая."),
("палач", "Архетип Человека", "Холодный слуга предела, рука закона без гнева, конец, который кто-то должен явить."),
("судья", "Архетип Человека", "Держатель весов, слово, рассекающее спор, ответственность за меру."),
("шут", "Архетип Человека", "Священный перевёртыш, правда в колпаке, единственный, кому можно сказать королю."),
("вдова", "Архетип Человека", "Хранительница после утраты, чёрный покров силы, жизнь по ту сторону союза."),
("сирота", "Архетип Человека", "Дитя без корня, поиск рода в мире, душа, что растит себе опору сама."),
("близнец", "Архетип Человека", "Парность судьбы, зеркало рядом, урок «я» и «другой» как одно."),
("двойник", "Архетип Человека", "Тень, ходящая вашим лицом, встреча с собой в чужой плоти."),
("жрица", "Архетип Человека", "Служительница тайны, уста оракула, женщина порога меж мирами."),
("рыцарь", "Архетип Человека", "Обет служения, клинок чести, сила, преклонившаяся перед высшим."),
]
assert len(NEW_CORE) == 236, len(NEW_CORE)
NEW_WORDS = [w for w, _, _ in NEW_CORE]
assert len(NEW_WORDS) == len(set(NEW_WORDS)), "duplicate new words"
def parse_existing(text: str):
pattern = re.compile(
r"WordItem\(\s*id:\s*(\d+),\s*word:\s*\"([^\"]+)\",\s*partOfSpeech:\s*\"([^\"]+)\","
r"\s*frequency:\s*([0-9.]+),\s*category:\s*\"([^\"]+)\",\s*description:\s*\"([^\"]*)\",?\s*\)",
re.S,
)
items = []
for i, w, p, f, c, d in pattern.findall(text):
items.append({
"id": int(i),
"word": w,
"pos": p,
"freq": float(f),
"category": c,
"desc": d,
})
return items
def dart_escape(s: str) -> str:
return s.replace("\\", "\\\\").replace('"', '\\"')
def fmt_freq(f: float) -> str:
if abs(f - round(f)) < 1e-9:
return f"{f:.1f}"
text = f"{f:.1f}"
return text
def main():
items = parse_existing(SRC.read_text(encoding="utf-8"))
assert len(items) == 1000, len(items)
existing_words = {it["word"] for it in items}
drop = set(DROP)
drop -= CORE
for it in items:
if it["pos"] in FUNC_POS:
drop.discard(it["word"])
missing = drop - existing_words
if missing:
raise SystemExit(f"drop not in dataset: {sorted(missing)}")
overlap = set(NEW_WORDS) & (existing_words - drop)
if overlap:
raise SystemExit(f"new words collide with kept: {sorted(overlap)}")
kept = [it for it in items if it["word"] not in drop]
assert len(kept) + len(NEW_CORE) == 1000, (len(kept), len(NEW_CORE), len(kept) + len(NEW_CORE))
by_word = {it["word"]: it for it in kept}
new_by_word = {w: (cat, desc) for w, cat, desc in NEW_CORE}
core_index = {w: i for i, w in enumerate(CORE_ORDER)}
new_index = {w: i for i, w in enumerate(NEW_WORDS)}
grouped = {cat: [] for cat in CAT_ORDER}
extra_cats = []
def bucket(word, pos, freq, category, desc, kind):
rec = {
"word": word,
"pos": pos,
"freq": freq,
"category": category,
"desc": desc,
"kind": kind, # 0 core, 1 new, 2 rest
}
if category not in grouped:
grouped[category] = []
extra_cats.append(category)
grouped[category].append(rec)
for w in CORE_ORDER:
it = by_word[w]
bucket(it["word"], it["pos"], it["freq"], it["category"], it["desc"], 0)
for w, cat, desc in NEW_CORE:
bucket(w, "существительное", 99.0, cat, desc, 1)
for it in kept:
if it["word"] in CORE:
continue
bucket(it["word"], it["pos"], it["freq"], it["category"], it["desc"], 2)
def sort_key(rec):
if rec["kind"] == 0:
return (0, core_index[rec["word"]])
if rec["kind"] == 1:
return (1, new_index[rec["word"]])
return (2, rec["word"])
ordered = []
for cat in CAT_ORDER + extra_cats:
recs = grouped.get(cat, [])
recs.sort(key=sort_key)
ordered.extend(recs)
assert len(ordered) == 1000, len(ordered)
words = [r["word"] for r in ordered]
assert len(words) == len(set(words))
lines = [
"// AUTO-GENERATED: 1000 Oracle & Divination Russian Words Dataset (000 to 999)",
"// Sacred Lexicon with Balanced Polarities, Archetypes, and Symbolic Interpretations",
"// Grouped by category. Function words kept for allegory; names/bureaucracy replaced.",
"import '../models/word_model.dart';",
"",
"const List<WordItem> kRussianTop1000Words = [",
]
for idx, rec in enumerate(ordered):
lines.append(" WordItem(")
lines.append(f" id: {idx},")
lines.append(f" word: \"{dart_escape(rec['word'])}\",")
lines.append(f" partOfSpeech: \"{dart_escape(rec['pos'])}\",")
lines.append(f" frequency: {fmt_freq(rec['freq'])},")
lines.append(f" category: \"{dart_escape(rec['category'])}\",")
lines.append(f" description: \"{dart_escape(rec['desc'])}\",")
lines.append(" ),")
lines.append("];")
lines.append("")
OUT.write_text("\n".join(lines), encoding="utf-8")
from collections import Counter
counts = Counter(r["category"] for r in ordered)
print(f"Wrote {OUT} with {len(ordered)} words")
print(f"Dropped {len(drop)}, added {len(NEW_CORE)}, kept {len(kept)}")
print("Category counts:")
for cat, n in counts.items():
print(f" {n:3d} {cat}")
leftover = sorted(w for w in DROP if w not in existing_words)
print("leftover drop (not in file)", leftover)
if __name__ == "__main__":
main()