import json import os _DATA_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "synonym_groups.json") _SYNONYM_GROUPS = None _SYNONYM_INDEX = None def _load_groups() -> list[set[str]]: global _SYNONYM_GROUPS, _SYNONYM_INDEX if _SYNONYM_GROUPS is not None: return _SYNONYM_GROUPS try: with open(_DATA_PATH, "r", encoding="utf-8") as f: data = json.load(f) _SYNONYM_GROUPS = [set(g) for g in data.get("groups", [])] except (FileNotFoundError, json.JSONDecodeError): _SYNONYM_GROUPS = [] _SYNONYM_INDEX = {} for group in _SYNONYM_GROUPS: for member in group: _SYNONYM_INDEX[member.lower().strip()] = group return _SYNONYM_GROUPS def get_synonym_groups() -> list[set[str]]: return _load_groups() def _find_synonym_group(tag: str) -> set[str] | None: if _SYNONYM_INDEX is None: _load_groups() return _SYNONYM_INDEX.get(tag.lower().strip()) def reload_synonym_groups(): global _SYNONYM_GROUPS, _SYNONYM_INDEX _SYNONYM_GROUPS = None _SYNONYM_INDEX = None _load_groups()