字串距離相似度量

fuzzy 只提供 difflib 的 gestalt ratio。本功能補上它缺少的編輯距離與 token 集合度量 —— Levenshtein / Damerau-Levenshtein、Jaro 與 Jaro-Winkler(短名稱/標籤的標準),以及字元 n-gram 的 Jaccard / Dice —— 更適合比對打字錯誤與重排 token,尤其來自 OCR。

純標準函式庫;不匯入 PySide6。每個函式皆為純函式(輸入兩個字串、輸出數字),因此在 CI 中完全 具決定性。可先搭配 normalize_text 讓比對對重音與形式不敏感。

無頭 API

from je_auto_control import (
    levenshtein, damerau_levenshtein, jaro_winkler, jaccard, dice,
    similarity, normalize_text,
)

levenshtein("kitten", "sitting")            # 3
damerau_levenshtein("ab", "ba")             # 1(轉置)
jaro_winkler("MARTHA", "MARHTA")            # ~0.961
jaccard("night", "nacht", n=2)              # 字元 bigram 重疊

# 任一度量的正規化 [0, 1] 分數(編輯距離 → 1 - d/max_len):
similarity(normalize_text(a), normalize_text(b), metric="jaro_winkler")

levenshtein / damerau_levenshtein 回傳整數編輯距離(後者把相鄰轉置算作一次編輯)。jaro / jaro_winklerjaccard / dice 回傳 [0, 1] 相似度。similarity 是統一入口 —— 直接回傳 Jaro/Jaccard/Dice,並把編輯距離轉成 1 - distance / max_len,讓所有度量在同一尺度上可比較。

執行器命令

AC_text_similarity 對兩個字串 a / b 與選用的 metric 回傳 {score}。它以 MCP 工具 ac_text_similarity 以及 Script Builder 中 Data 分類下的命令提供。