Để tính delta (sự khác biệt), ta nên dùng module difflib của Python. Module này có các lớp và hàm khác nhau để so sánh chuỗi (sequences). Nó có thể so sánh file, file HTML, v.v.
Để dùng module này, cần nhập module difflib trong mã Python.
import difflib
Một số lớp và hàm của module difflib:
Lớp difflib.SequenceMatcher
Lớp này dùng để so sánh hai chuỗi (sequence) bất kỳ kiểu. Nó có các phương thức khác nhau. Một số phương thức:
- set_seqs(a, b) – Thiết lập hai sequence sẽ so sánh. Nó tính toán và cache thông tin chi tiết về file thứ hai. Vì vậy, khi so khớp nhiều file, ta nên thiết lập sequence đầu tiên lặp lại.
- set_seq1(a) – Thiết lập sequence đầu tiên.
- set_seq2(b) – Thiết lập sequence thứ hai.
- find_longest_match(alo, ahi, blo, bhi) – Tìm khối khớp dài nhất trong khoảng alo-ahi cho sequence 1 và blo-bhi cho sequence 2.
- get_matching_blocks() – Tìm danh sách các sequence khớp theo thứ tự giảm dần.
- ratio() – Tìm tỷ lệ tương đồng của các sequence dưới dạng float.
Mã ví dụ
import difflib
myStr1 = 'Python Programming'
myStr2 = 'Python Standard Library'
seq_match = difflib.SequenceMatcher(lambda x: x==' ', myStr1, myStr2)
print("Tỷ lệ khớp sequence: " + str(round(seq_match.ratio(), 3)))
for match_block in seq_match.get_matching_blocks():
print(match_block)
Kết quả
Tỷ lệ khớp sequence: 0.488 Match(a=0, b=0, size=7) Match(a=8, b=13, size=1) Match(a=11, b=19, size=2) Match(a=18, b=23, size=0)