Một chiến lược phục hồi lỗi mức cụm từ (phrase-level recovery) phổ biến trong trình biên dịch là tự động thay thế 1 token bị nghi sai chính tả bằng từ khoá hợp lệ gần nhất.
Cho tập m từ khoá hợp lệ, phân biệt (chỉ gồm chữ cái thường). Với mỗi token nghi vấn t (chỉ gồm chữ cái thường), tìm từ khoá k trong tập sao cho khoảng cách chỉnh sửa Levenshtein d(t,k) (số phép chèn/xoá/thay thế 1 ký tự tối thiểu để biến t thành k) là nhỏ nhất. Nếu có nhiều từ khoá cùng đạt khoảng cách nhỏ nhất, chọn từ khoá nhỏ nhất theo thứ tự từ điển (so sánh chuỗi thông thường).
Gọi d∗ là khoảng cách nhỏ nhất tìm được và L=⌊∣t∣/2⌋ (nửa độ dài t, làm tròn xuống).
Ví dụ: từ khoá {int, for, while, return}; token whille (độ dài 6, L=3): khoảng cách đến while là 1 (thừa 1 ký tự l) ≤3 ⇒ sửa thành while. Token xyzxyz (độ dài 6, L=3): khoảng cách nhỏ nhất đến mọi từ khoá đều >3 ⇒ giữ nguyên xyzxyz.
Dòng 1: m (1≤m≤200). Dòng 2: m từ khoá cách nhau dấu cách (mỗi từ chỉ gồm chữ cái thường, độ dài 1..20). Dòng 3: q (1≤q≤200). q dòng tiếp theo, mỗi dòng 1 token cần xét (chữ cái thường, độ dài 1..20).
q dòng, dòng thứ i là kết quả (từ khoá đã sửa hoặc token giữ nguyên) tương ứng với token thứ i.
Ví dụ:
Đầu vào:
2
a b
3
a
ab
abc
Đầu ra:
a
a
abc
Đầu vào:
4
int for while return
4
int
fr
whille
xyzxyz
Đầu ra:
int
for
while
xyzxyz
Đang tải editor...