# -*- coding: utf-8 -*-
"""苏州话词库 · 零依赖读取与检索示例（只用 Python 标准库）
用法：
    python 示例代码_读取词库.py                # 打印统计
    python 示例代码_读取词库.py 谢谢           # 检索某个词
"""
import json, os, sys, csv

HERE = os.path.dirname(os.path.abspath(__file__))
JSON_PATH = os.path.join(HERE, "suzhou_dialect_lexicon.json")
CSV_PATH = os.path.join(HERE, "suzhou_dialect_lexicon.csv")


def load_json(path=JSON_PATH):
    with open(path, encoding="utf-8") as f:
        return json.load(f)


def load_csv(path=CSV_PATH):
    # 注意：CSV 是 UTF-8 with BOM，必须用 utf-8-sig
    with open(path, encoding="utf-8-sig", newline="") as f:
        return list(csv.DictReader(f))


def search(data, keyword):
    """按词条精确 + 包含两种方式检索"""
    hit = []
    for word, val in data.items():
        text = json.dumps(val, ensure_ascii=False) if not isinstance(val, str) else val
        if keyword == word or keyword in word or keyword in text:
            hit.append((word, text))
    return hit


def main():
    data = load_json()
    print("词条总数:", len(data))

    if len(sys.argv) > 1:
        kw = sys.argv[1]
        hits = search(data, kw)
        print("命中 %d 条，前 20 条：" % len(hits))
        for word, text in hits[:20]:
            print("  %s -> %s" % (word, text[:60]))
        return

    # 统计：有释义 / 无释义
    filled = sum(1 for v in data.values() if v)
    print("有释义:", filled, "| 无释义:", len(data) - filled)

    # 与 CSV 交叉校验条数是否一致
    try:
        rows = load_csv()
        print("CSV 行数(不含表头):", len(rows), "| 与 JSON 一致:", len(rows) == len(data))
    except FileNotFoundError:
        print("未找到 CSV，跳过交叉校验")


if __name__ == "__main__":
    main()
