Files
999/scripts/assign_rich_emojis.py

974 lines
32 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import re
LEXICON_JSON = 'oracle_enricher/data/lexicon.json'
FAMILIES_JSON = 'oracle_enricher/data/families.json'
KB_ASSET_JSON = 'assets/data/oracle_kb.json'
KB_OUT_JSON = 'oracle_enricher/out/oracle_kb.json'
WORDS_DATA_DART = 'lib/data/words_data.dart'
WORDS_TXT = 'words_alphabetical.txt'
WORDS_MD = 'words_alphabetical.md'
VIEWER_HTML = 'lexicon_viewer.html'
EXPLICIT_EMOJIS = {
# 1. 12 Zodiac signs & Constellations
'овен': '♈ 🐏',
'телец': '♉ 🐂',
'близнецы': '♊ 👥',
'рак': '♋ 🦀',
'лев': '♌ 🦁',
'дева': '♍ 🌾',
'весы': '♎ ⚖️',
'скорпион': '♏ 🦂',
'стрелец': '♐ 🏹',
'козерог': '♑ 🐐',
'водолей': '♒ 🏺',
'рыбы': '♓ 🐟',
# 2. 7 Planets & Cosmos
'солнце': '☀️ 👑',
'луна': '🌙 🌊',
'меркурий': '☿️ 📜',
'венера': '♀️ 🌹',
'марс': '♂️ ⚔️',
'юпитер': '♃ ⚡',
'сатурн': '♄ ⏳',
'космос': '🌌 🪐',
# 3. 7 Alchemical Metals
'золото': '🪙 ☀️',
'серебро': '🥈 🌙',
'медь': '🥉 ♀️',
'железо': '⚙️ ⚔️',
'олово': '🪞 ⚡',
'свинец': '🧱 ⏳',
'ртуть': '💧 ⚗️',
# 4. 7 Virtues
'мудрость': '🦉 📜',
'мужество': '🦁 🛡️',
'умеренность': '⚖️ 🌿',
'справедливость': '⚔️ ⚖️',
'вера': '🕯️ ✝️',
'надежда': '🕊️ ⚓',
'любовь': '❤️ 🕊️',
# 5. 7 Deadly Sins
'гордыня': '👑 🪞',
'зависть': '🐍 👁️',
'гнев': '🔥 ⚡',
'уныние': '🌧️ 🥀',
'алчность': '💰 🪙',
'чревоугодие': '🍞 🍷',
'похоть': '💋 🔥',
# 6. 14 Musical Terms & Acoustics
'до': '🎵 🔔',
'ре': '🎶 🌊',
'ми': '🎼 🌿',
'фа': '🎺 ☀️',
'соль': '🧂 ☀️',
'ля': '🎻 🕊️',
'си': '🪕 ✨',
'диез': '♯ 🔺',
'бемоль': '♭ 🔻',
'звук': '🔊 🌊',
'тишина': '🤫 🌌',
'эхо': '📢 🏔️',
'ритм': '🥁 💓',
'мелодия': '🎼 🎶',
# 7. 14 Colors
'красный': '🔴 🔥',
'оранжевый': '🟠 🌅',
'жёлтый': '🟡 ☀️',
'зелёный': '🟢 🌿',
'зеленый': '🟢 🌿',
'голубой': '💠 🩵',
'синий': '🔵 🌊',
'фиолетовый': '🟣 🔮',
'белый': '⚪ 🕊️',
'чёрный': '⚫ 🌑',
'черный': '⚫ 🌑',
'серый': '🔘 🌫️',
'розовый': '🌸 💖',
'пурпурный': '👑 🪻',
'коричневый': '🟤 🪵',
'прозрачный': '💎 🪟',
# 8. 14 Senses, Tastes & Smells
'сладкий': '🍯 🍓',
'горький': '☕ 🌿',
'кислый': '🍋 ⚡',
'солёный': '🧂 🌊',
'острый': '🌶️ 🗡️',
'вяжущий': '🍂 🪵',
'пресный': '💧 ⚪',
'аромат': '🌸 🪔',
'вонь': '🦨 ☣️',
'свежесть': '🍃 ❄️',
'пряный': '🌿 🌰',
'терпкий': '🍇 🍷',
'гниль': '🍄 🍂',
'гарь': '🌋 💨',
# 9. 14 Bodily Senses & Tactility
'зрение': '👁️ 🌅',
'слух': '👂 🔔',
'осязание': '✋ 🪶',
'вкус': '👅 🍯',
'обоняние': '👃 🌸',
'равновесие': '⚖️ 🧘',
'чутьё': '🐺 🧭',
'мягкий': '🪶 ☁️',
'твёрдый': '🪨 💎',
'пушистый': '🐱 ☁️',
'гладкий': '🧊 🪞',
'шершавый': '🪵 🧗',
'горячий': '♨️ 🔥',
'холодный': '❄️ 🧊',
# 10. Daily Cycle
'полночь': '🕛 🌑',
'заря': '🌄 ✨',
'рассвет': '🌅 ☀️',
'утро': '☕ 🌅',
'день': '☀️ 🏙️',
'полдень': '🕛 ☀️',
'вечер': '🌇 🍷',
'закат': '🌆 🌅',
'сумерки': '🌃 🌫️',
'ночь': '🌙 🌌',
# 11. Fundamental Elements
'огонь': '🔥 ⚡',
'вода': '💧 🌊',
'воздух': '💨 🍃',
'земля': '🌍 ⛰️',
'свет': '✨ ☀️',
'тьма': '🌑 🖤',
'лёд': '❄️ 🧊',
'пламя': '🔥 🕯️',
'искра': '⚡ ✨',
'пепел': '🌫️ ⚱️',
'дым': '💨 🌫️',
'пар': '♨️ 🌫️',
'тень': '👤 🌑',
'луч': '☀️ ⚡',
'сияние': '✨ 🌟',
'мрак': '🌑 🖤',
'зима': '❄️ 🌨️',
'весна': '🌱 🌸',
'осень': '🍂 🍁',
'лето': '☀️ 🌻',
'молния': '⚡ 🌩️',
'гром': '🌩️ 🔊',
'дождь': '🌧️ 💧',
'туман': '🌫️ 🌁',
'роса': '💧 🍃',
'иней': '❄️ 🌾',
'буря': '🌪️ ⚡',
'ветер': '💨 🍃',
'волна': '🌊 🌊',
'прилив': '🌊 🌕',
'отлив': '🌊 🌑',
'лава': '🌋 🔥',
'радуга': '🌈 ✨',
'снег': '❄️ 🌨️',
'жар': '🔥 🌡️',
'холод': '❄️ 🧊',
'небо': '🌌 ☁️',
'бездна': '🕳️ 🌌',
'верх': '⬆️ 🏔️',
'низ': '⬇️ 🕳️',
'высота': '🏔️ 🦅',
'глубина': '🌊 ⚓',
'север': '❄️ 🧭',
'юг': '☀️ 🧭',
'восток': '🌅 🧭',
'запад': '🌇 🧭',
# 12. Actions / Verbs (all 109 verbs)
'бежать': '🏃 💨',
'бояться': '😨 🌑',
'бросить': '🤾 💨',
'быть': '🕯️ 👁️',
'верить': '🕯️ ✝️',
'вернуться': '🔄 🏠',
'вести': '🧭 🚶',
'взять': '🤲 ✊',
'видеть': '👁️ ✨',
'возникнуть': '✨ 🌱',
'войти': '🚪 ➡️',
'вспомнить': '🧠 💡',
'встать': '🧍 ⬆️',
'выглядеть': '🪞 👁️',
'вызвать': '📯 ⚡',
'выйти': '🚪 🌅',
'дать': '🤲 🎁',
'действовать': '⚡ 🔨',
'делать': '🛠️ 🧱',
'держать': '✊ 🔒',
'думать': '🧠 💭',
'ехать': '🏇 🛤️',
'ждать': '⏳ 👁️',
'желать': '🌟 💫',
'жить': '🌿 💓',
'забыть': '🌫️ 🍂',
'заметить': '👁️ ⚡',
'звать': '📢 📯',
'знать': '📜 💡',
'значить': '🗝️ 📖',
'играть': '🎭 🎲',
'идти': '🚶 🛤️',
'иметь': '💼 🔑',
'искать': '🧭 🔍',
'казаться': '🌫️ 🪞',
'касаться': '✋ ✨',
'кричать': '📢 ⚡',
'лежать': '🛏️ 🧘',
'любить': '❤️ 🕊️',
'молчать': '🤫 🤐',
'мочь': '⚡ ✊',
'надеяться': '🕊️ ⚓',
'назвать': '🗣️ 🏷️',
'найти': '🗝️ 💎',
'находиться': '📍 🧭',
'начать': '🏁 🌱',
'нести': '🎒 🚶',
'нравиться': '✨ 💖',
'обнаружить': '🔍 💡',
'объяснить': '📜 🗣️',
'оставить': '🥀 🚪',
'остаться': '⚓ 🏛️',
'ответить': '🗣️ ✉️',
'открыть': '🔓 🚪',
'передать': '🤝 📜',
'петь': '🎤 🎶',
'писать': '✍️ 📜',
'пить': '🍷 💧',
'поднять': '⬆️ 🤲',
'позволить': '🕊️ 🔓',
'показать': '👆 👁️',
'получить': '🎁 🤲',
'помнить': '🧠 🏛️',
'помочь': '🤝 🛡️',
'понимать': '💡 🧠',
'попасть': '🎯 🏹',
'потерять': '🍂 🕳️',
'появиться': '✨ 🌅',
'предложить': '🤲 📜',
'прийти': '🚪 🚶',
'принести': '🎁 🚶',
'принять': '🤲 🤍',
'продолжать': '⏳ ➡️',
'просить': '🙏 🕯️',
'пытаться': '🧗 ⚡',
'рассказать': '🗣️ 📜',
'расти': '🌱 🌳',
'решить': '⚖️ 🗡️',
'связать': '🪢 🔗',
'сидеть': '🪑 🧘',
'сказать': '🗣️ 💬',
'служить': '🛡️ 🕯️',
'случиться': '⚡ 🎲',
'слушать': '👂 🔔',
'слышать': '👂 🌊',
'смотреть': '👁️ 🔭',
'снять': '🎭 ⬇️',
'собираться': '🎒 🧭',
'согласиться': '🤝 🕊️',
'создать': '🏛️ ✨',
'спать': '💤 🌙',
'спросить': '❓ 🗣️',
'ставить': '🧱 📍',
'стараться': '🧗 🔨',
'стать': '⚡ 👑',
'стоить': '🪙 ⚖️',
'стоять': '🧍 ⚓',
'существовать': '🌌 🕯️',
'убить': '⚔️ 💀',
'уйти': '🚪 🚶',
'умереть': '💀 ⏳',
'уметь': '🛠️ 💡',
'успеть': '⏳ ⚡',
'учиться': '📖 🧙',
'хватать': '✊ 🦅',
'ходить': '🚶 🐾',
'хотеть': '🔥 💭',
'читать': '📖 👓',
'чувствовать': '💓 🌊',
# 13. Adjectives (all remaining)
'близкий': '🫂 📍',
'большой': '🐘 🏔️',
'великий': '👑 🏛️',
'влажный': '💧 🌿',
'внешний': '🌐 🪟',
'внутренний': '🧘 🗝️',
'высокий': '🏔️ 🦅',
'глубокий': '🌊 ⚓',
'готовый': '🏁 ⚡',
'далекий': '🔭 🌌',
'длинный': '📏 🛤️',
'добрый': '☀️ 🤍',
'долгий': '⏳ 📜',
'дорогой': '💎 🪙',
'единый': '⭕ 🔗',
'живой': '🌱 💓',
'знакомый': '🤝 💡',
'знаменитый': '🌟 👑',
'интересный': '🔍 ✨',
'короткий': '✂️ ⏱️',
'легкий': '🪶 💨',
'личный': '🗝️ 👤',
'любимый': '💖 🌹',
'малый': '🔬 🔹',
'молодой': '🌱 👶',
'настоящий': '💎 ⚖️',
'низкий': '⬇️ 🕳️',
'новый': '✨ 🌅',
'открытый': '🔓 🚪',
'плохой': '🥀 🌑',
'поздний': '🦉 🌙',
'полный': '🌕 🏺',
'последний': '🔚 ⏳',
'похожий': '🪞 👥',
'правый': '⚖️ ➡️',
'прекрасный': '🌺 ✨',
'простой': '🪵 ⚪',
'прошлый': '🏛️ 📜',
'прямой': '📏 🏹',
'пустой': '🫙 💨',
'равный': '⚖️ 🟰',
'разный': '🔀 🎭',
'ранний': '🌅 🐓',
'свободный': '🦅 🕊️',
'серьезный': '🗿 ⚖️',
'сильный': '🦁 💪',
'сложный': '🧩 🌀',
'старый': '👴 ⏳',
'странный': '🌀 👁️',
'страшный': '👹 ⚡',
'сухой': '🏜️ 🍂',
'темный': '🌑 🖤',
'тяжелый': '🪨 ⚖️',
'хороший': '🌟 👍',
'целый': '🌕 🛡️',
'чистый': '💧 🕊️',
'чужой': '👤 🚪',
'широкий': '🌊 ↔️',
# 14. Grammar Particles, Pronouns, Numerals
'а': '⚖️ ⚡',
'без': '🚫 🫙',
'более': '📈 ➕',
'больше': '📈 ➕',
'будто': '🪞 ✨',
'бы': '💭 🔮',
'быстро': '⚡ 💨',
'в': '📥 📍',
'ваш': '🛡️ 👥',
'вдруг': '⚡ 💥',
'ведь': '💡 🗣️',
'весь': '🌐 ⭕',
'вместе': '🤝 👥',
'вместо': '🔀 🪑',
'во': '📥 📍',
'возможно': '🎲 ✨',
'вокруг': '🔄 🌐',
'вообще': '🌐 🌊',
'вот': '👉 ⚡',
'впервые': '🌱 1️⃣',
'вперед': '➡️ 🏹',
'все': '🌐 👥',
'все-таки': '⚖️ ⚡',
'всегда': '♾️ ⏳',
'всего': '🌐 ▫️',
'вчера': '🏛️ 📜',
'вы': '👥 👑',
'где': '📍 ❓',
'где-то': '📍 🌫️',
'да': '🟢 ✔️',
'давно': '⏳ 🏛️',
'даже': '⚡ ❗',
'далеко': '🔭 🌌',
'два': '2️⃣ 👥',
'двадцать': '2️⃣0️⃣ ⏳',
'десять': '🔟 🏛️',
'для': '🎯 🎁',
'долго': '⏳ 📜',
'домой': '🏠 🚶',
'другой': '🔀 🎭',
'его': '👤 🗝️',
'едва': '🤏 ⏱️',
'ее': '👩 🗝️',
'если': '🔀 ❓',
'еще': '⏳ ➕',
'ж': '⚡ 💥',
'же': '⚡ 💥',
'за': '🚪 🛡️',
'завтра': '🌅 🔮',
'затем': '➡️ ⏳',
'зато': '⚖️ 🌿',
'здесь': '📍 ⚓',
'и': '➕ 🔗',
'ибо': '📜 💡',
'из': '📤 🏞️',
'из-за': '⛈️ ⚡',
'или': '⚖️ 🔀',
'именно': '🎯 📍',
'иначе': '🔀 ⚡',
'иногда': '🎲 ⏳',
'иной': '🔀 🎭',
'их': '👥 🗝️',
'к': '➡️ 📍',
'как': '🪞 ❓',
'как-то': '🌫️ ❓',
'какой': '❓ 🔍',
'какой-то': '🌫️ ❓',
'ко': '➡️ 📍',
'когда': '⏳ ❓',
'который': '👉 🗝️',
'кроме': '🚫 ✂️',
'кто': '❓ 👤',
'кто-то': '👤 🌫️',
'куда': '🧭 ❓',
'легко': '🪶 💨',
'ли': '❓ ⚖️',
'либо': '🔀 🎲',
'лишь': '🎯 ▫️',
'мало': '💧 ▫️',
'между': '↔️ ⚖️',
'многий': '🌊 👥',
'много': '🌊 ➕',
'можно': '🟢 🕊️',
'мой': '🗝️ 👤',
'мы': '👥 🤝',
'на': '🔝 📍',
'над': '☁️ ⬆️',
'надо': '⚠️ 🔨',
'назад': '⬅️ ⏳',
'наконец': '🏁 ⏳',
'наш': '🛡️ 👥',
'не': '🚫 🛡️',
'недавно': '⏱️ 🌿',
'некий': '🌫️ ✨',
'нельзя': '🔴 🚫',
'немного': '🤏 💧',
'нет': '🔴 ✖️',
'ни': '🚫 ⚪',
'никак': '🚫 ⚡',
'никогда': '🚫 ⏳',
'никто': '🚫 👤',
'ничто': '🚫 🕳️',
'но': '🛡️ ⚡',
'ну': '🗣️ ⚡',
'нужно': '⚠️ 🔨',
'о': '💭 🗣️',
'об': '💭 🗣️',
'оба': '👥 🟰',
'один': '1️⃣ ☝️',
'однажды': '🌟 📖',
'однако': '🛡️ ⚡',
'около': '🔄 📍',
'он': '👨 👤',
'она': '👩 👤',
'они': '👥 🌐',
'оно': '⚪ 🔮',
'от': '⬅️ 📍',
'откуда': '🏛️ ❓',
'очень': '🔥 ❗',
'перед': '🚪 👁️',
'плохо': '👎 🥀',
'по': '🛤️ ➡️',
'под': '⬇️ 🛡️',
'пока': '⏳ ⏳',
'поскольку': '📜 💡',
'после': '🔚 ➡️',
'потом': '➡️ ⏳',
'потому': '💡 🗝️',
'почему': '❓ 💡',
'почему-то': '❓ 🌫️',
'почти': '🤏 🎯',
'поэтому': '➡️ 💡',
'правда': '💎 ⚖️',
'прежде': '⬅️ 📜',
'при': '🤝 📍',
'причем': '➕ 📜',
'про': '📖 💭',
'против': '⚔️ 🛡️',
'прямо': '📏 ➡️',
'пусть': '🕊️ ✨',
'пять': '5️⃣ ⭐',
'рано': '🌅 🐓',
'рядом': '🫂 📍',
'с': '🤝 📍',
'сам': '👤 ⚡',
'самый': '🔝 ⭐',
'свой': '🗝️ 🤍',
'себя': '🪞 👤',
'сегодня': '☀️ 📅',
'сей': '👉 📍',
'сейчас': '⏱️ ⚡',
'сильно': '💪 ⚡',
'сколько': '❓ 🔢',
'скоро': '⚡ ⏳',
'слишком': '🌊 ⚠️',
'словно': '🪞 ✨',
'сначала': '🏁 1️⃣',
'снова': '🔄 🔁',
'со': '🤝 📍',
'совсем': '💯 ⭕',
'сразу': '⚡ ⏱️',
'среди': '👥 🌾',
'сто': '💯 🏛️',
'столь': '📈 ⚡',
'сюда': '↙️ 📍',
'так': '👉 ✔️',
'такой': '🪞 ▫️',
'там': '📍 🔭',
'твой': '🗝️ 🫵',
'теперь': '⏳ 📍',
'тихо': '🤫 🍃',
'то': '👉 📍',
'тогда': '⏳ ⚡',
'только': '🎯 ▫️',
'тот': '👈 🔭',
'точно': '🎯 📐',
'три': '3️⃣ 🔺',
'трудно': '🪨 🧗',
'туда': '↗️ 🧭',
'ты': '🫵 👤',
'у': '📍 🏡',
'уж': '⏳ ⚡',
'уже': '⌛ ⚡',
'хорошо': '👍 ✨',
'хоть': '🌧️ ☀️',
'хотя': '🌧️ ☀️',
'часто': '🌊 🌊',
'чем': '⚖️ ❓',
'через': '🌉 ➡️',
'четыре': '4️⃣ 🟩',
'что': '❓ 🔮',
'что-то': '🔮 🌫️',
'чтоб': '🎯 🏹',
'чтобы': '🎯 🏹',
'шесть': '6️⃣ 🔯',
'это': '👆 📍',
'этот': '👉 📍',
'я': '👁️ 👤',
'ясно': '☀️ 💡',
# 15. Nouns (specific archetypal pairs)
'бдение': '🕯️ 👁️',
'благодать': '✨ 🕊️',
'благословение': '🤲 ✨',
'болезнь': '🥀 🩹',
'борьба': '🤼 ⚔️',
'брат': '👦 🤝',
'будущее': '🌅 🔮',
'буря': '🌪️ ⚡',
'вдова': '🖤 🥀',
'ведьма': '🧙‍♀️ 🌙',
'век': '🏛️ ⏳',
'верёвка': '🪢 🧵',
'вестник': '📯 🕊️',
'вещь': '📦 🏺',
'взгляд': '👁️ 🎯',
'вид': '🏞️ 👁️',
'вина': '⛓️ 😔',
'вино': '🍷 🍇',
'власть': '👑 ⚡',
'внимание': '🎯 👁️',
'война': '⚔️ 🛡️',
'волос': '💇 🌾',
'воля': '⚡ ✊',
'встреча': '🤝 👥',
'вуаль': '🕸️ 👰',
'вход': '🚪 🔑',
'высота': '🏔️ 🦅',
'выход': '🚪 🌅',
'глаз': '👁️ ✨',
'год': '📅 ⏳',
'голова': '👤 🧠',
'голос': '🗣️ 🎶',
'гримуар': '📖 🔮',
'грудь': '🫁 🛡️',
'дверь': '🚪 🗝️',
'движение': '🏃 ➡️',
'двойник': '👥 🪞',
'двор': '🏡 🌿',
'дворец': '🏰 👑',
'дельфин': '🐬 🌊',
'деревня': '🏘️ 🌾',
'долина': '🏞️ 🌾',
'дорога': '🛤️ 🧭',
'дочь': '👧 🌸',
'древо': '🌳 🪵',
'дубрава': '🌳 🌿',
'дух': '🕊️ ✨',
'душа': '🕯️ 💖',
'дым': '💨 🌫️',
'дыхание': '🫁 💨',
'единорог': '🦄 ✨',
'желание': '🌟 💫',
'жена': '👰 💍',
'жрица': '🔮 🌙',
'журавль': '🪿 🌾',
'завеса': '🎭 🌫️',
'закон': '📜 ⚖️',
'зал': '🏛️ 🕯️',
'защита': '🛡️ 🏰',
'заяц': '🐇 🐾',
'знамение': '☄️ 📜',
'знание': '💡 📖',
'зов': '📯 📢',
'ива': '🌿 💧',
'игра': '🎭 🎲',
'идея': '💡 ⚡',
'идол': '🗿 🕯️',
'изгнанник': '🚶 🌑',
'изобилие': '🌾 🍇',
'имя': '🏷️ 📜',
'интерес': '🔍 ✨',
'искупление': '🕊️ 🕯️',
'искусство': '🎨 🏛️',
'искушение': '🍎 🐍',
'история': '📜 ⏳',
'источник': '⛲ 💧',
'итог': '🏁 ⚖️',
'кабан': '🐗 🌲',
'кадило': '🪔 💨',
'кадуцей': '⚕️ 🐍',
'капище': '🗿 🔥',
'карма': '☸️ 🔄',
'карта': '🗺️ 🧭',
'картина': '🖼️ 🎨',
'катакомбы': '🏛️ 💀',
'кедр': '🌲 🏔️',
'кинжал': '🗡️ ⚡',
'кипарис': '🌲 🏛️',
'кит': '🐋 🌊',
'кладбище': '🪦 🥀',
'коза': '🐐 🌾',
'компас': '🧭 ⭐',
'копьё': '🗡️ 🛡️',
'король': '👑 🏰',
'кость': '🦴 💀',
'костёр': '🔥 🪵',
'котёл': '🫕 ⚗️',
'край': '⛰️ 🌅',
'крик': '📢 ⚡',
'кристалл': '💎 🔮',
'кровь': '🩸 💓',
'круг': '⭕ 🔄',
'купель': '🏺 💧',
'лавр': '🌿 👑',
'ласточка': '🐦 🌅',
'лебедь': '🦢 💧',
'линия': '📏 〰️',
'лира': '🎻 🎶',
'лицо': '👤 🎭',
'мальчик': '👦 🌱',
'мандала': '☸️ 🌸',
'маяк': '🗼 💡',
'мера': '⚖️ 📏',
'место': '📍 🏛️',
'месть': '🗡️ 🔥',
'месяц': '🌙 ⭐',
'мир': '🕊️ 🌿',
'момент': '⏱️ ⚡',
'мудрец': '🧙 📜',
'муж': '👨 💍',
'мужик': '🧔 🪵',
'музыка': '🎼 🎶',
'муравей': '🐜 🌿',
'мысль': '🧠 💭',
'название': '🏷️ 📖',
'направление': '🧭 ➡️',
'народ': '👥 🏛️',
'нектар': '🍯 🌺',
'ненависть': '🔥 🗡️',
'нищета': '🏚️ 🥀',
'нищий': '🤲 🍂',
'нога': '🦵 👣',
'нос': '👃 🌬️',
'обет': '📜 🕯️',
'обитель': '🏡 🕊️',
'образ': '🪞 👤',
'обрыв': '🧗 🕳️',
'опыт': '🧠 ⏳',
'оружие': '⚔️ 🏹',
'основа': '🏛️ 🧱',
'основание': '🏛️ 🧱',
'ось': '🌐 📍',
'ответ': '✉️ 🗣️',
'откровение': '📜 ⚡',
'отношение': '🤝 🪢',
'отсутствие': '🫙 💨',
'отчаяние': '🌧️ 😔',
'отшельник': '🧙 🏔️',
'охотник': '🏹 🌲',
'палач': '🪓 🖤',
'палец': '☝️ 🖐️',
'пантера': '🐆 🌑',
'пара': '👥 🤍',
'перевал': '🏔️ 🛤️',
'перекресток': '➕ 🧭',
'песня': '🎤 🎶',
'петух': '🐓 🌅',
'печаль': '😢 🌧️',
'пилигрим': '🚶 🧭',
'пир': '🍷 🍖',
'письмо': '✉️ 📜',
'плач': '😭 💧',
'плечо': '🦾 🛡️',
'плющ': '🌿 🏛️',
'подземелье': '🕳️ 🗝️',
'пол': '🪵 🏛️',
'поле': '🌾 🌻',
'половина': '🌓 ✂️',
'помощь': '🤝 🛡️',
'пора': '⏳ 🌾',
'посвящение': '🕯️ 👑',
'пост': '🍞 🧘',
'поэт': '🪶 📜',
'правило': '📜 📏',
'право': '⚖️ 📜',
'принцип': '🏛️ ⚖️',
'природа': '🌿 🌲',
'пристань': '⚓ ⛵',
'причина': '🗝️ 💡',
'проклятие': '☠️ ⚡',
'пропасть': '🕳️ 🧗',
'пророчество': '📜 👁️',
'пространство': '🌌 📐',
'прощение': '🕊️ 🤲',
'радость': '☀️ 😄',
'раз': '1️⃣ ⚡',
'развитие': '🌱 📈',
'рассказ': '📖 🗣️',
'ребята': '🧒 👧',
'реликвия': '🏺 ✨',
'речь': '🗣️ 💬',
'решение': '⚖️ 🗡️',
'рисунок': '🎨 📜',
'рог': '📯 🦏',
'род': '🌳 🩸',
'родитель': '👨‍👩‍👧 🕊️',
'родник': '💧 🌿',
'рок': '⚡ ⏳',
'роман': '📖 ❤️',
'рост': '🌱 ⬆️',
'рот': '👄 🗣️',
'роща': '🌳 🍃',
'рука': '✋ 🤲',
'ручей': '🏞️ 💧',
'рысь': '🐾 🌲',
'связь': '🪢 🔗',
'святилище': '🏛️ 🕯️',
'семья': '👨‍👩‍👧 🏡',
'семя': '🌱 🌰',
'сердце': '❤️ 💓',
'сестра': '👧 🌸',
'сирота': '🥀 🧒',
'скала': '⛰️ 🪨',
'скверна': '☣️ 🖤',
'скит': '🛖 🌲',
'скорбь': '🥀 🖤',
'скрижаль': '📜 🪨',
'слабость': '🥀 ⏳',
'слово': '💬 🪶',
'случай': '🎲 ⚡',
'смех': '😄 ✨',
'смирение': '🙇 🕊️',
'смысл': '💡 🗝️',
'событие': '⚡ 📅',
'совет': '🗣️ 📜',
'создание': '🏛️ ✨',
'сознание': '🧠 ✨',
'солдат': '🪖 ⚔️',
'сомнение': '❓ ⚖️',
'состояние': '🌊 🧘',
'сосуд': '🏺 🫙',
'спаситель': '🕊️ 👑',
'спина': '👤 🛡️',
'спираль': '🌀 🐚',
'спутник': '🛰️ 🌙',
'среда': '🌿 🌐',
'стихи': '📜 🪶',
'сторона': '🧭 ↔️',
'страсть': '🔥 ❤️',
'стыд': '😳 🥀',
'суд': '⚖️ 🏛️',
'сцена': '🎭 🏛️',
'счастье': '🍀 ☀️',
'сын': '👦 🏹',
'талисман': '🧿 🪙',
'танец': '💃 🎶',
'творец': '🏛️ ✨',
'тело': '👤 🩸',
'театр': '🎭 🏛️',
'течение': '🌊 ➡️',
'тигр': '🐅 🐾',
'тотем': '🐾 🪵',
'точка': '📍 ⚫',
'тревога': '⚡ 😟',
'тропа': '🛤️ 🌲',
'труд': '🔨 🌾',
'тысяча': '1️⃣0️⃣0️⃣0️⃣ 🏛️',
'угасание': '🕯️ 💨',
'угол': '📐 🏛️',
'удар': '💥 ⚡',
'улица': '🏙️ 🛤️',
'ум': '🧠 💡',
'успех': '🏆 🌟',
'ухо': '👂 🔔',
'ущелье': '🏞️ 🧗',
'филин': '🦉 🌲',
'фонарь': '🏮 💡',
'форма': '🔷 📐',
'характер': '🗿 ⚡',
'хижина': '🛖 🌲',
'хлеб': '🍞 🌾',
'ход': '♟️ ➡️',
'хозяин': '👑 🔑',
'хранитель': '🗝️ 🛡️',
'художник': '🎨 🖌️',
'цвет': '🎨 🌈',
'цель': '🎯 🏹',
'центр': '🎯 ⭕',
'церковь': '⛪ 🕊️',
'цикл': '🔄 ⏳',
'часть': '🧩 ▫️',
'чаща': '🌲 🌳',
'человек': '👤 🕯️',
'чертог': '🏛️ 👑',
'чувство': '💓 🌊',
'чудо': '✨ 🌟',
'шаг': '👣 🚶',
'шаман': '🪶 🥁',
'шатёр': '⛺ 🌌',
'шрам': '⚡ 🩹',
'шёпот': '🤫 🍃',
'эпоха': '🏛️ ⏳',
'явь': '👁️ ☀️',
'яд': '🧪 ☠️',
'язык': '👅 🗣️',
'яйцо': '🥚 🐣',
'якорь': '⚓ 🌊',
}
def resolve_emoji(word, current_emoji, pos, category):
w = word.lower().strip()
if w in EXPLICIT_EMOJIS:
return EXPLICIT_EMOJIS[w]
if current_emoji and current_emoji not in ('🔮 ✨', '⚡ ➡️', '🧭 🏹', '✨ 🎨', '🏛️ 🧭', '🪢 🔗', '🔮 📜', '✨ 🏺', '👤 ✨', '🐾 ✨'):
return current_emoji
return '✨ 🔮'
def main():
print('=== ASSIGNING RICH EMOJIS TO ALL 1000 WORDS ===')
with open(LEXICON_JSON, 'r', encoding='utf-8') as f:
lexicon = json.load(f)
assert len(lexicon) == 1000, f'Expected 1000 items, got {len(lexicon)}'
word_to_emoji = {}
missing_count = 0
for item in lexicon:
w = item['word']
em = resolve_emoji(w, item.get('emoji', ''), item.get('pos', ''), item.get('category', ''))
item['emoji'] = em
word_to_emoji[w] = em
if em == '✨ 🔮':
missing_count += 1
print(f'Warning: unmapped word: {w}')
print(f'Assigned emojis. Unmapped count: {missing_count}')
# Save lexicon.json
with open(LEXICON_JSON, 'w', encoding='utf-8') as f:
json.dump(lexicon, f, ensure_ascii=False, indent=2)
print(f'Updated {LEXICON_JSON}')
# Update families.json
try:
with open(FAMILIES_JSON, 'r', encoding='utf-8') as f:
families = json.load(f)
for w, entry in families.items():
if w in word_to_emoji and isinstance(entry, dict):
entry['emoji'] = word_to_emoji[w]
with open(FAMILIES_JSON, 'w', encoding='utf-8') as f:
json.dump(families, f, ensure_ascii=False, indent=2)
print(f'Updated {FAMILIES_JSON}')
except Exception as e:
print(f'Error updating families.json: {e}')
# Update KB asset & out
for kb_path in (KB_ASSET_JSON, KB_OUT_JSON):
try:
with open(kb_path, 'r', encoding='utf-8') as f:
kb = json.load(f)
for k, entry in kb.items():
w_name = entry.get('word', '')
if w_name in word_to_emoji:
entry['emoji'] = word_to_emoji[w_name]
with open(kb_path, 'w', encoding='utf-8') as f:
json.dump(kb, f, ensure_ascii=False, indent=2)
print(f'Updated {kb_path}')
except Exception as e:
print(f'Error updating {kb_path}: {e}')
# Update lib/data/words_data.dart
with open(WORDS_DATA_DART, 'r', encoding='utf-8') as f:
dart_lines = f.readlines()
updated_dart_lines = []
current_w = None
for line in dart_lines:
m_word = re.search(r'word:\s*"([^"]+)"', line)
if m_word:
current_w = m_word.group(1)
m_emoji = re.search(r'emoji:\s*"([^"]*)"', line)
if m_emoji and current_w and current_w in word_to_emoji:
line = re.sub(r'emoji:\s*"[^"]*"', f'emoji: "{word_to_emoji[current_w]}"', line)
updated_dart_lines.append(line)
with open(WORDS_DATA_DART, 'w', encoding='utf-8') as f:
f.writelines(updated_dart_lines)
print(f'Updated {WORDS_DATA_DART}')
# Update words_alphabetical.txt and .md
alpha_items = sorted(lexicon, key=lambda x: x['word'])
with open(WORDS_TXT, 'w', encoding='utf-8') as f:
for it in alpha_items:
f.write("#%03d %s %s" % (it["id"], it["word"], it["emoji"]) + chr(10))
print(f"Updated {WORDS_TXT}")
with open(WORDS_MD, "w", encoding="utf-8") as f:
f.write("# Алфавитный указатель Оракула 999" + chr(10) + chr(10))
f.write("| № | Слово | Иконка | Категория | Ч. речи |" + chr(10))
f.write("|---|---|---|---|---|" + chr(10))
for it in alpha_items:
f.write(("| #%03d | **%s** | %s | %s | %s |" % (it["id"], it["word"], it["emoji"], it["category"], it["pos"])) + chr(10))
print(f"Updated {WORDS_MD}")
print(f'Updated {WORDS_MD}')
# Update lexicon_viewer.html
with open(VIEWER_HTML, 'r', encoding='utf-8') as f:
html_content = f.read()
escaped_lexicon = json.dumps(lexicon, ensure_ascii=False)
if 'const rawLexicon = ' in html_content:
html_content = re.sub(r'const rawLexicon = \[.*?\];', f'const rawLexicon = {escaped_lexicon};', html_content, flags=re.DOTALL)
with open(VIEWER_HTML, 'w', encoding='utf-8') as f:
f.write(html_content)
print(f'Updated embedded rawLexicon in {VIEWER_HTML}')
print('=== ALL 1000 WORDS RICHLY EMOJI-MAPPED SUCCESSFULLY ===')
if __name__ == '__main__':
main()