feat: complete academic symbol lexicon heal, 2-column Cooper extraction, and updated assets
This commit is contained in:
@@ -0,0 +1,182 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Fill original scripts: Hebrew, classical hanzi, Arabic geomantic names."""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
CANON = ROOT / "oracle_enricher" / "data" / "traditions_canon.json"
|
||||
ASSET = ROOT / "assets" / "data" / "traditions_canon.json"
|
||||
HTML = ROOT / "lexicon_viewer.html"
|
||||
|
||||
SEPHIROTH_HEBREW = {
|
||||
"kether": "כתר",
|
||||
"chokmah": "חכמה",
|
||||
"binah": "בינה",
|
||||
"chesed": "חסד",
|
||||
"geburah": "גבורה",
|
||||
"tiphereth": "תפארת",
|
||||
"netzach": "נצח",
|
||||
"hod": "הוד",
|
||||
"yesod": "יסוד",
|
||||
"malkuth": "מלכות",
|
||||
}
|
||||
|
||||
TRIGRAM_HANZI = {
|
||||
"qian": "乾",
|
||||
"kun": "坤",
|
||||
"zhen": "震",
|
||||
"kan": "坎",
|
||||
"gen": "艮",
|
||||
"xun": "巽",
|
||||
"li": "離",
|
||||
"dui": "兌",
|
||||
}
|
||||
|
||||
# King Wen order, traditional characters (Zhou Yi)
|
||||
GEOMANCY_ARABIC = {
|
||||
"via": ("الطريق", "ат-Тарик", "Via", "Путь"),
|
||||
"populus": ("الجماعة", "аль-Джама'а", "Populus", "Народ"),
|
||||
"conjunctio": ("الاجتماع", "аль-Иджтима'", "Conjunctio", "Соединение"),
|
||||
"carcer": ("الحبس", "аль-Хабс", "Carcer", "Тюрьма"),
|
||||
"fortuna_major": ("النصرة الداخلة", "ан-Насра ад-Дахиля", "Fortuna Major", "Большая Удача"),
|
||||
"fortuna_minor": ("النصرة الخارجة", "ан-Насра аль-Хариджа", "Fortuna Minor", "Малая Удача"),
|
||||
"acquisitio": ("القبض الداخل", "аль-Кабд ад-Дахиль", "Acquisitio", "Приобретение"),
|
||||
"amissio": ("القبض الخارج", "аль-Кабд аль-Харидж", "Amissio", "Потеря"),
|
||||
"laetitia": ("الفرح", "аль-Фарах", "Laetitia", "Радость"),
|
||||
"tristitia": ("الحزن", "аль-Хузн", "Tristitia", "Печаль"),
|
||||
"puella": ("نقي الخد", "наки аль-хадд", "Puella", "Девушка"),
|
||||
"puer": ("الانكيس", "аль-Анкийс", "Puer", "Юноша"),
|
||||
"albus": ("البياض", "аль-Байяд", "Albus", "Белый"),
|
||||
"rubeus": ("الحمرة", "аль-Хумра", "Rubeus", "Красный"),
|
||||
"caput_draconis": ("رأس الجوزهر", "ра'с аль-джузхар", "Caput Draconis", "Голова Дракона"),
|
||||
"cauda_draconis": ("ذنب الجوزهر", "занаб аль-джузхар", "Cauda Draconis", "Хвост Дракона"),
|
||||
}
|
||||
|
||||
HEX_HANZI = {
|
||||
1: "乾",
|
||||
2: "坤",
|
||||
3: "屯",
|
||||
4: "蒙",
|
||||
5: "需",
|
||||
6: "訟",
|
||||
7: "師",
|
||||
8: "比",
|
||||
9: "小畜",
|
||||
10: "履",
|
||||
11: "泰",
|
||||
12: "否",
|
||||
13: "同人",
|
||||
14: "大有",
|
||||
15: "謙",
|
||||
16: "豫",
|
||||
17: "隨",
|
||||
18: "蠱",
|
||||
19: "臨",
|
||||
20: "觀",
|
||||
21: "噬嗑",
|
||||
22: "賁",
|
||||
23: "剝",
|
||||
24: "復",
|
||||
25: "無妄",
|
||||
26: "大畜",
|
||||
27: "頤",
|
||||
28: "大過",
|
||||
29: "坎",
|
||||
30: "離",
|
||||
31: "咸",
|
||||
32: "恆",
|
||||
33: "遯",
|
||||
34: "大壯",
|
||||
35: "晉",
|
||||
36: "明夷",
|
||||
37: "家人",
|
||||
38: "睽",
|
||||
39: "蹇",
|
||||
40: "解",
|
||||
41: "損",
|
||||
42: "益",
|
||||
43: "夬",
|
||||
44: "姤",
|
||||
45: "萃",
|
||||
46: "升",
|
||||
47: "困",
|
||||
48: "井",
|
||||
49: "革",
|
||||
50: "鼎",
|
||||
51: "震",
|
||||
52: "艮",
|
||||
53: "漸",
|
||||
54: "歸妹",
|
||||
55: "豐",
|
||||
56: "旅",
|
||||
57: "巽",
|
||||
58: "兌",
|
||||
59: "渙",
|
||||
60: "節",
|
||||
61: "中孚",
|
||||
62: "小過",
|
||||
63: "既濟",
|
||||
64: "未濟",
|
||||
}
|
||||
|
||||
|
||||
def main() -> None:
|
||||
canon = json.loads(CANON.read_text(encoding="utf-8"))
|
||||
|
||||
for st in canon["kabbalah"]["stations"]:
|
||||
he = SEPHIROTH_HEBREW.get(st["id"])
|
||||
if he:
|
||||
st["hebrew"] = he
|
||||
|
||||
for st in canon["iching"]["stations"]:
|
||||
sid = st["id"]
|
||||
if sid in TRIGRAM_HANZI:
|
||||
st["hanzi"] = TRIGRAM_HANZI[sid]
|
||||
continue
|
||||
if sid.startswith("hex_"):
|
||||
n = int(sid.split("_")[1])
|
||||
hz = HEX_HANZI.get(n)
|
||||
if hz:
|
||||
st["hanzi"] = hz
|
||||
|
||||
for i, st in enumerate(canon["geomancy"]["stations"], start=1):
|
||||
rec = GEOMANCY_ARABIC.get(st["id"])
|
||||
if not rec:
|
||||
continue
|
||||
script, latn, latin, ru = rec
|
||||
st["arabic"] = script
|
||||
st["name"] = f"{i} {latin} ({latn} / {ru})"
|
||||
|
||||
text = json.dumps(canon, ensure_ascii=False, indent=2) + "\n"
|
||||
CANON.write_text(text, encoding="utf-8")
|
||||
ASSET.write_text(text, encoding="utf-8")
|
||||
|
||||
html = HTML.read_text(encoding="utf-8")
|
||||
start = html.find(" const TRADITIONS_CANON = ")
|
||||
end = html.find(" const WORDS_DATA = ")
|
||||
if start > 0 and end > start:
|
||||
html = (
|
||||
html[:start]
|
||||
+ " const TRADITIONS_CANON = "
|
||||
+ json.dumps(canon, ensure_ascii=False, indent=2)
|
||||
+ ";\n\n"
|
||||
+ html[end:]
|
||||
)
|
||||
HTML.write_text(html, encoding="utf-8")
|
||||
|
||||
kb = [(s["id"], s.get("hebrew"), s["name"]) for s in canon["kabbalah"]["stations"]]
|
||||
print("sephiroth", kb)
|
||||
ich = canon["iching"]["stations"]
|
||||
print("trigrams", [(s["id"], s.get("hanzi"), s["name"]) for s in ich if not s["id"].startswith("hex_")])
|
||||
print("hex sample", [(s["id"], s.get("hanzi"), s["name"]) for s in ich if s["id"].startswith("hex_")][:5])
|
||||
print("hex 64", ich[-1]["id"], ich[-1].get("hanzi"), ich[-1]["name"])
|
||||
missing = [s["id"] for s in ich if not s.get("hanzi")]
|
||||
print("missing hanzi", missing)
|
||||
geo = [(s["id"], s.get("arabic"), s["name"]) for s in canon["geomancy"]["stations"]]
|
||||
print("geomancy", geo)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user