字串距離相似度量
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_winkler 與 jaccard / 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 分類下的命令提供。