Unicode 文字正規化與 Slug

fuzzysearch_index.tokenize 只做小寫化,OCR find_text_matches 只做 .lower() + 子字串 比對 —— 因此 "Café"``(NFC)、”Café”(NFD)與 OCR ``"cafe" 會比對不相等。本功能補上它們在比對 前應執行的正規化層。

純標準函式庫(unicodedata / re);不匯入 PySide6。每個函式皆為純函式(輸入文字、輸出文字), 因此在 CI 中完全具決定性。

無頭 API

from je_auto_control import (
    normalize_text, deaccent, slugify, normalize_quotes, fold_whitespace,
)

normalize_text("CAFÉ  Menu")          # "café menu"(NFKC + casefold + 空白)
deaccent("résumé")                     # "resume"
slugify("Café Menu! 2026")             # "cafe-menu-2026"
normalize_quotes("“Hi” — it’s…")       # '"Hi" - it\'s...'

normalize_text 套用 Unicode form``(預設 ``NFKC)、選用 casefold 與空白折疊,讓不同碼點形式的相同 文字比對相等。deaccent 去除組合附加符號;``fold_whitespace`` 把連續空白收成單一空格;``normalize_quotes`` 把智慧引號、破折號、省略號與 NBSP 對應成 ASCII;``slugify`` 產生 ASCII slug(去重音、小寫、以分隔符連接 英數段)。在 fuzzy/search/OCR 比對前先執行 normalize_text 可讓比對對重音與形式不敏感。

執行器命令

AC_normalize_text 回傳 {text}``(可選 ``form / casefold / collapse_ws);``AC_slugify`` 回傳 {slug}。兩者皆以 MCP 工具(ac_normalize_text / ac_slugify)以及 Script Builder 中 Data 分類下 的命令提供。