Files
999/scripts/apply_1000_unique_emojis.py

126 lines
10 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
DIFFS_FINAL = {
'космос': '🌌 🪐', 'планета': '🪐 🌐', 'созвездие': '🌌 🌠', 'зенит': '☀️ 🔝', 'эфир': '🌌 🪽',
'горизонт': '🌅 📏', 'небосвод': '🌌 🏛️', 'метеор': '☄️ ⚡', 'аврора': '🌌 🌈', 'надир': '🕳️ 🧭',
'солнцеворот': '☀️ 🔄', 'равноденствие': '⚖️ 🌓', 'цель': '🎯 🏹', 'попасть': '🎯 ⚡', 'чтоб': '🏹 ▫️',
'чтобы': '🏹 🧭', 'тьма': '🌑 🖤', 'мрак': '🌑 🌫️', 'темный': '🌑 🕯️', 'война': '⚔️ 🛡️',
'воин': '⚔️ 🪖', 'против': '🛡️ ⚔️', 'чистота': '💎 🕊️', 'будто': '🪞 💭', 'словно': '🪞 ✨',
'девушка': '👧 🌸', 'дочь': '👧 🎀', 'сестра': '👧 🤍', 'создание': '🏛️ 🌱', 'творец': '🏛️ ✨',
'создать': '🛠️ ✨', 'знать': '📜 💡', 'ибо': '💡 🏛️', 'поскольку': '📜 📌', 'успеть': '⏳ ⚡',
'тогда': '⏳ 🧭', 'уж': '⚡ ⌛', 'разный': '🔀 🎭', 'другой': '🔀 👥', 'иной': '🔀 🌌',
'вдруг': '⚡ 💥', 'ж': '💥 ▫️', 'же': '💥 ❗', 'при': '🤝 📍', 'с': '🤝 ➕', 'со': '🤝 🌐',
'сей': '👉 📍', 'этот': '👆 📍', 'то': '👉 ▫️', 'это': '👆 ▫️', 'огонь': '🔥 💥', 'пламя': '🔥 🕯️',
'гнев': '🔥 ⚡', 'воздух': '💨 🍃', 'ветер': '💨 🌪️', 'низ': '⬇️ 🕳️', 'низкий': '⬇️ 📏',
'высота': '🏔️ 🦅', 'высокий': '🏔️ 🔝', 'глубина': '🌊 ⚓', 'глубокий': '🌊 🕳️', 'порядок': '📐 🏛️',
'угол': '📐 📍', 'смерть': '💀 ⏳', 'умереть': '💀 🥀', 'конец': '🏁 ⏳', 'наконец': '🏁 ⚡',
'готовый': '🏁 🛡️', 'сила': '💪 🦁', 'сильно': '💪 ⚡', 'любовь': '❤️ 🕊️', 'любить': '❤️ ✨',
'дух': '🕊️ ✨', 'пусть': '🕊️ 💫', 'позволить': '🕊️ 🔓', 'сон': '💤 🌙', 'спать': '🛏️ 💤',
'забвение': '🌫️ 🍂', 'забыть': '🌫️ 🕳️', 'полнота': '🌕 🏺', 'полный': '🌕 💧', 'выход': '🚪 🌄',
'выйти': '🚪 🌅', 'войти': '🚪 ➡️', 'лёд': '❄️ 🧊', 'холод': '❄️ 💨', 'сияние': '✨ 🌟',
'чудо': '✨ 💫', 'зима': '❄️ 🌨️', 'снег': '❄️ ⚪', 'волна': '🌊 🌊', 'часто': '🌊 ⏱️',
'эпоха': '🏛️ ⏳', 'век': '🏛️ ⌛', 'история': '📜 ⏳', 'прошлый': '🏛️ 📜', 'вчера': '📜 🏛️',
'закон': '📜 ⚖️', 'сомнение': '❓ ⚖️', 'ли': '❓ ▫️', 'шёпот': '🤫 🍃', 'тихо': '🤫 🔇',
'крик': '📢 ⚡', 'кричать': '🗣️ 📢', 'бдение': '🕯️ 👁️', 'быть': '🕯️ 🌐', 'бог': '⚡ 👑',
'стать': '👑 ⬆️', 'будущее': '🌅 🔮', 'завтра': '🌅 📅', 'вера': '🕯️ ✝️', 'верить': '✝️ 🙏',
'просить': '🙏 🕯️', 'воля': '⚡ ✊', 'мочь': '⚡ 🦾', 'встреча': '🤝 👥', 'вместе': '👥 🔗',
'глаз': '👁️ ✨', 'видеть': '👁️ 💡', 'смотреть': '👁️ 🔭', 'зрение': '👁️ 🌅', 'желание': '🌟 💫',
'желать': '💫 💭', 'зал': '🏛️ 🕯️', 'святилище': '🏛️ ⛩️', 'игра': '🎭 🎲', 'играть': '🎲 🃏',
'интерес': '🔍 ✨', 'интересный': '🔍 💡', 'обнаружить': '🔍 🗝️', 'лес': '🌲 🌳', 'чаща': '🌲 🌿',
'момент': '⏱️ ⚡', 'сейчас': '⏱️ 📍', 'сразу': '⚡ ⏱️', 'мысль': '💭 ✨', 'думать': '🧠 💭',
'ум': '🧠 💡', 'вспомнить': '🧠 ⚡', 'надежда': '🕊️ ⚓', 'надеяться': '🕊️ 🌅', 'образ': '🪞 👤',
'себя': '🪞 🗝️', 'основа': '🏛️ 🧱', 'основание': '🧱 📐', 'отсутствие': '🫙 💨', 'пустой': '🫙 ⚪',
'песня': '🎤 🎶', 'петь': '🎶 🕊️', 'помощь': '🤝 🛡️', 'помочь': '🤝 🤲', 'речь': '🗣️ 💬',
'сказать': '💬 ➡️', 'рассказ': '📖 🗣️', 'рассказать': '🗣️ 📜', 'решение': '⚖️ 🗡️', 'решить': '🗡️ ⚡',
'кинжал': '🗡️ 🩸', 'связь': '🪢 🔗', 'связать': '🪢 🧶', 'смысл': '💡 🗝️', 'потому': '💡 ➡️',
'совет': '🗣️ 💡', 'сцена': '🎭 🏛️', 'театр': '🎭 🎟️', 'ухо': '👂 🔔', 'слушать': '👂 🌊',
'слышать': '👂 🎶', 'чувство': '💓 🌊', 'чувствовать': '💓 ✨', 'рок': '⚡ ⏳', 'скоро': '⏱️ ⏳',
'идол': '🗿 🕯️', 'алтарь': '🗿 🔥', 'капище': '🗿 🪵', 'стрела': '🏹 ⚡', 'лук': '🏹 🌲',
'охотник': '🏹 🐾', 'жребий': '🎲 ✨', 'возможно': '🎲 ❓', 'родник': '💧 🌿', 'влажный': '💧 🍃',
'роса': '💧 🌸', 'хижина': '🛖 🌲', 'скит': '🛖 🕯️', 'орел': '🦅 🏔️', 'сокол': '🦅 ⚡',
'странник': '🎒 🚶', 'нести': '🎒 🤲', 'умеренность': '⚖️ 🌿', 'зато': '⚖️ ➕', 'открыть': '🔓 🚪',
'открытый': '🚪 🪟', 'появиться': '✨ 🌅', 'новый': '🌅 🌿', 'прийти': '🚪 🚶', 'уйти': '🚶 🚪',
'близкий': '🫂 📍', 'рядом': '📍 👥', 'далекий': '🔭 🌌', 'далеко': '🔭 🧭', 'долгий': '⏳ 📜',
'долго': '⏳ 🛤️', 'легкий': '🪶 💨', 'легко': '🪶 ✨', 'личный': '🗝️ 🪪', 'мой': '🗝️ 👤',
'свой': '🗝️ 🤍', 'настоящий': '💎 ⚖️', 'правда': '💎 🏛️', 'ранний': '🌅 🐓', 'рано': '🌅 ⏱️',
'более': '📈 ➕', 'больше': '📈 🔝', 'затем': '➡️ ⏳', 'потом': '➡️ ⌛', 'продолжать': '⏳ ➡️',
'надо': '⚠️ 🔨', 'нужно': '⚠️ 🧭', 'в': '📥 📍', 'во': '📥 🚪', 'к': '➡️ 📍', 'ко': '➡️ 🚪',
'о': '💭 🗣️', 'об': '💭 📜', 'как-то': '🌫️ ❓', 'какой-то': '🌫️ 🔍', 'ваш': '🛡️ 👥',
'наш': '👥 🛡️', 'а': '⚖️ ⚡', 'все-таки': '⚖️ 🔄', 'но': '⚡ 🛡️', 'однако': '🛡️ ⚡',
'хотя': '🌧️ ☀️', 'хоть': '🌧️ ▫️', 'лишь': '🎯 ▫️', 'только': '🎯 📍', 'именно': '📍 🎯',
'теперь': '⏳ 📍',
}
# 1. Update lexicon.json
lex = json.load(open('oracle_enricher/data/lexicon.json', 'r', encoding='utf-8'))
for item in lex:
w = item['word']
if w in DIFFS_FINAL:
item['emoji'] = DIFFS_FINAL[w]
assert len(set(x['emoji'] for x in lex)) == 1000, 'Not all 1000 emojis are unique!'
with open('oracle_enricher/data/lexicon.json', 'w', encoding='utf-8') as f:
json.dump(lex, f, ensure_ascii=False, indent=2)
word_to_emoji = {x['word']: x['emoji'] for x in lex}
# 2. Update families.json
fam = json.load(open('oracle_enricher/data/families.json', 'r', encoding='utf-8'))
for w, entry in fam.items():
if w in word_to_emoji and isinstance(entry, dict):
entry['emoji'] = word_to_emoji[w]
with open('oracle_enricher/data/families.json', 'w', encoding='utf-8') as f:
json.dump(fam, f, ensure_ascii=False, indent=2)
# 3. Update out/oracle_kb.json and assets/data/oracle_kb.json
for kb_path in ('oracle_enricher/out/oracle_kb.json', 'assets/data/oracle_kb.json'):
try:
kb = json.load(open(kb_path, 'r', encoding='utf-8'))
for k, v in kb.items():
if isinstance(v, dict):
w = v.get('word')
if w in word_to_emoji:
v['emoji'] = word_to_emoji[w]
with open(kb_path, 'w', encoding='utf-8') as f:
json.dump(kb, f, ensure_ascii=False, indent=2)
except Exception as e:
print(f'Error updating {kb_path}: {e}')
# 4. Update words_data.dart
lines = open('lib/data/words_data.dart', 'r', encoding='utf-8').readlines()
updated_lines = []
curr_w = None
for l in lines:
m_w = re.search(r'word:\s*"([^"]+)"', l)
if m_w:
curr_w = m_w.group(1)
m_em = re.search(r'emoji:\s*"([^"]*)"', l)
if m_em and curr_w and curr_w in word_to_emoji:
l = re.sub(r'emoji:\s*"[^"]*"', f'emoji: "{word_to_emoji[curr_w]}"', l)
updated_lines.append(l)
open('lib/data/words_data.dart', 'w', encoding='utf-8').writelines(updated_lines)
# 5. Update words_alphabetical.txt and .md
alpha_items = sorted(lex, key=lambda x: x['word'])
with open('words_alphabetical.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))
with open('words_alphabetical.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))
# 6. Update lexicon_viewer.html
html = open('lexicon_viewer.html', 'r', encoding='utf-8').read()
raw_lex = json.dumps(lex, ensure_ascii=False)
if 'const rawLexicon = ' in html:
html = re.sub(r'const rawLexicon = \[.*?\];', f'const rawLexicon = {raw_lex};', html, flags=re.DOTALL)
open('lexicon_viewer.html', 'w', encoding='utf-8').write(html)
print('1000 UNIQUE EMOJIS AND DOSSIERS APPLIED CLEANLY EVERYWHERE!')