126 lines
10 KiB
Python
126 lines
10 KiB
Python
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!')
|