SequenceMatcher

SequenceMatcher 來自 Python 標準庫 difflib
是序列比對工具,常用於 diff、模糊比對前處理、近似重複檢測。

重點:


不只比對字串

除了字串,也能比對 list / token 序列:

from difflib import SequenceMatcher

a = ["我", "喜歡", "NLP"]
b = ["我", "很", "喜歡", "NLP"]

sm = SequenceMatcher(None, a, b)
print(sm.ratio())

核心機制(更精確)

SequenceMatcher 會尋找兩個序列中的最長連續匹配區塊,
並在前後區段遞迴比對,最後彙整為整體相似度與差異操作。


ratio() 是什麼,不是什麼

概念公式:

ratio=2MT

注意:


常用 API

ratio()

get_matching_blocks()

get_opcodes()


autojunk(實務常見坑)

SequenceMatcher 預設 autojunk=True
在長序列中會忽略部分過度常見元素,避免比對過慢或失真。

若需要更可控、可重現的行為,可關閉:

SequenceMatcher(None, a, b, autojunk=False)

Python 範例(字串)

from difflib import SequenceMatcher

a = "I like machine learning"
b = "I love machine leaning"

sm = SequenceMatcher(None, a, b, autojunk=False)

print("ratio:", sm.ratio())
print("matching blocks:", sm.get_matching_blocks())
print("opcodes:")
for op in sm.get_opcodes():
    print(op)
ratio: 0.87...  # 依輸入內容而定
("equal" / "replace" / "delete" / "insert" ...)

什麼情境好用


限制與注意事項


視覺化與參考

可以看到有被比對到的區塊:
Pasted image 20260312112046.png


相關筆記

Powered by Forestry.md