Trong công việc, việc xử lý dữ liệu thường gặp phải tình huống cần chỉnh sửa các từ hoặc cụm từ gần giống nhau. Nguyên nhân có thể do nhập liệu sai, nhập liệu không thống nhất từ nhiều nguồn, hoặc do cách viết tắt, bỏ dấu khác nhau. Vậy làm thế nào để tự động phát hiện và chỉnh sửa những điểm không nhất quán này? Bài viết này trên Thủ Thuật sẽ giới thiệu về khoảng cách Levenshtein (Levenshtein distance) và cách ứng dụng nó để tìm chuỗi gần giống nhau trong Excel, giúp bạn tối ưu hóa quy trình xử lý dữ liệu.
Nếu bạn đã quen thuộc với Levenshtein Distance và muốn tìm hiểu cách sử dụng VBA để so sánh nhiều chuỗi cùng lúc, hãy tham khảo bài viết So sánh, tìm chuỗi gần đúng với Levenshtein trong VBA.
Khoảng Cách Levenshtein là gì?
Khoảng cách Levenshtein, hiểu đơn giản, là số đo sự khác biệt giữa hai chuỗi ký tự. Cụ thể hơn, nó là số lượng thao tác tối thiểu cần thực hiện (xóa, chèn hoặc thay thế ký tự) để biến đổi chuỗi này thành chuỗi kia.
Khoảng cách Levenshtein giữa hai chuỗi là số lượng thao tác xóa, chèn hoặc thay thế ký tự đơn lẻ tối thiểu cần thiết để biến đổi chuỗi này thành chuỗi kia.
Ví dụ:
Chuỗi 1: mèo; Chuỗi 2: mẹo
Khoảng cách Levenshtein là 1 vì chỉ cần thay thế ký tự “è” bằng “ẹ”.Chuỗi 1: FPT; Chuỗi 2: FPT Software
Khoảng cách Levenshtein là 8 vì cần thêm 8 ký tự ” Software”.
Công Thức Tính Khoảng Cách Levenshtein
Công thức tính khoảng cách Levenshtein được biểu diễn như sau:
Công thức Levenshtein
Minh họa Levenshtein
Trong đó:
a
,b
: Hai chuỗi cần so sánh.i
,j
: Vị trí ký tự trong chuỗi (tính từ 1).
Giải thích:
- Nếu
i
hoặcj
bằng 0, khoảng cách Levenshtein bằng giá trị lớn nhất củai
vàj
. - Trường hợp khác, khoảng cách Levenshtein là giá trị nhỏ nhất trong ba trường hợp sau:
lev(i-1, j) + 1
(Xóa ký tự thứi
của chuỗia
)lev(i, j-1) + 1
(Chèn ký tự thứj
của chuỗib
vào chuỗia
)lev(i-1, j-1) + cost
(Thay thế ký tự thứi
của chuỗia
bằng ký tự thứj
của chuỗib
nếu chúng khác nhau,cost = 1
; giữ nguyên nếu chúng giống nhau,cost = 0
).
Ví dụ:
Ví dụ tính Levenshtein
Bắt đầu từ lev(a, b)(1, 1)
và kết thúc tại lev(a, b)(3, 3)
.
Áp Dụng Tìm Chuỗi Gần Giống Nhau trong Excel
Dựa trên khoảng cách Levenshtein, ta có thể xây dựng mô hình so sánh hai chuỗi trong Excel.
Bước 1: Nhập Chuỗi
Nhập chuỗi cần so sánh vào hai ô, ví dụ A1 và A2.
Nhập chuỗi
Bước 2: Tạo Bảng Tính
Tạo bảng tính với ký tự “#” tại D2 và C3 để đánh dấu vị trí bắt đầu.
Tạo bảng
Bước 3: Tách Ký Tự
Tách các ký tự của chuỗi và điền vào bảng. Sử dụng công thức =MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)
tại C4 và =TRANSPOSE(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))
tại E2 (đối với Excel 365). Đối với phiên bản Excel khác, có thể sử dụng công thức mảng.
Tách ký tự
Bước 4: Điền Giá Trị Levenshtein
- Ô D3: Điền giá trị 0.
- Cột D (từ D4) và hàng E (từ E3): Điền dãy số tự nhiên bắt đầu từ 1.
- Các ô còn lại: Sử dụng công thức
=IF(ISTEXT($C4)*ISTEXT(E$2),IF(MIN($D4,E$3)=0,MAX($D4,E$3),MIN(D4+1,E3+1,IF(EXACT(LOWER($C4),LOWER(E$2)),D3,D3+1))),"")
tại E4 và kéo thả cho các ô còn lại. HàmLOWER
giúp xử lý trường hợp ký tự hoa/thường.
Điền giá trị
Bước 5: Tính Tỷ Lệ Trùng Khớp
Tính tỷ lệ trùng khớp bằng công thức: =(LEN(A1)+LEN(A2)-INDIRECT("R"&LEN(A1)+3&"C"&LEN(A2)+4,FALSE))/(LEN(A1)+LEN(A2))
Kết quả
Kết Luận
Hy vọng bài viết này trên Thủ Thuật đã giúp bạn hiểu rõ về khoảng cách Levenshtein và cách áp dụng nó để tìm chuỗi gần giống nhau trong Excel. Bạn có thể áp dụng phương pháp này để so sánh dữ liệu, kiểm tra chính tả, và nhiều ứng dụng khác trong công việc. Tham khảo thêm bài viết về Group đối tượng sử dụng Fuzzy Matching trong Power Query để tìm hiểu thêm về các kỹ thuật xử lý dữ liệu tương tự.
Discussion about this post