File size: 1,122 Bytes
e6404d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()