Tìm từ gần giống với từ cần tra 1Kho ảng cách Levenshtein

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG TRA TỪ ĐIỂN BẰNG CAMERA TRÊN ĐIỆN THOẠI DI ĐỘNG (Trang 69 - 71)

4 Chương : XỬ LÝ NGÔN NGỮ VÀ TRA TỪ ĐIỂN

4.2.2 Tìm từ gần giống với từ cần tra 1Kho ảng cách Levenshtein

Trong lý thuyết thông tin và khoa học máy tính, khoảng cách Levenshtein là một đại lượng dùng đểđo số sự khác nhau giữa hai chuỗi.

Khoảng cách Levenshtein giữa hai chuỗi ký tự là số lần ít nhất cần phải thực hiện để biến đổi một chuỗi thành chuỗi còn lại. Các thao tác thay đổi là thêm, xóa và thay thế một ký tựđơn.

Ví dụ, khoảng cách Levenshtein giữa hai chuỗi “kitten” và “sitting” là 3 vì 3 thao tác thay đổi sau đã biến “kitten” thành “sitting”:

1. kitten →sitten (thay thế ‘k’ bởi ‘s’) 2. sitten → sittin (thay thế ‘e’ bởi ‘i’) 3. sittin → sitting (thêm ‘g’ vào cuối).

Sau đây là thuật toán tìm khoảng cách Levenshtein giữa hai chuỗi ký tự

s[1..m] và t[1..n]):

// Với mọi i và j, d[i,j] chứa khoảng cách Levenshtein giữa

// i ký tự đầu của s và j ký tự đầu của t

// lưu ý: d có (m+1)x(n+1) giá trị

16

d[0..m,0..n]: integer

for i from 0 to m

d[i, 0] := i // khoảng cách từ bất cứ chuỗi s nào đến chuỗi t

rỗng

for j from 0 to n

d[0, j] := j // khoảng cách từ bất cứ chuỗi t nào đến chuỗi s

rỗng for j from 1 to n { for i from 1 to m { if s[i] = t[j] then d[i, j] := d[i-1, j-1] else d[i, j] := minimum ( d[i-1, j] + 1, // xóa d[i, j-1] + 1, // thêm d[i-1, j-1] + 1 // thay thế ) } } return d[m,n]

Sau đây là thuật toán áp dụng khoảng cách Levenshtein vào việc tìm những từ

gần giống với từ cần tra:

Ø Bước 1: Giả định rằng kết quả nhận dạng chỉ bị sai một ký tự nào đó và chiều dài của chuỗi kết quả nhận dạng (gọi là result) không bị thay đổi.

Điều này nhằm giới hạn không gian tìm kiếm. Để thực hiện điều này, ta bỏ đi hai thao tác “xóa” và “thêm”, chỉ cho phép sử dụng thao tác “thay thế” trong thuật toán tìm khoảng cách Levenshtein.

Ø Bước 2: Tìm tất cả các từ trong từ điển có cùng chiều dài với result, kết quả lưu vào mảng strings.

Ø Bước 3: Với mỗi chuỗi string trong mảng strings, ta sẽ tiến hành đo khoảng cách Lenvenshtein giữa chúng với chuỗi result và chỉ chọn những chuỗi có khoảng cách Levenshtein bằng 1, ta thu được mảng words.

Ø Bước 4: Liệt kê các từ trong mảng words ra cho người dùng và yêu cầu người dùng chọn một trong số những từ đó. Các từ này sẽ được sắp xếp theo thứ tự giảm dần của tần số xuất hiện (chỉ mức độ phổ biến của từ). Khi người dùng chọn một từ nào đó, ứng dụng sẽ hiển thị nghĩa của từđó.

Ví dụ: từ cần tra là “table”, nhưng kết quả nhận dạng là “tablc” (chữ cái ‘e’ bị

nhận dạng sai thành ‘c’). Sau khi thực hiện các bước như trên, ta sẽ thu được các từ

gần giống sau (theo thứ tự giảm dần của mức độ phổ biến): “table”, “tabla”, “tabac”.

Phương pháp này đã giải quyết được bài toán tìm từ gần giống với từ cần tra cứu nhưng nó có hai khuyết điểm, một là tốc độ xử lý chậm vì phải duyệt qua rất nhiều từ trong từđiển để tìm ra danh sách các từ gần đúng; hai là phương pháp này còn liệt kê ra một số từ không phù hợp với ngữ cảnh. Ví dụ, trong trường hợp từ

“tabac”, từ này có được là do thay thế ký tự ‘l’ trong “tablc” thành ‘a’. Điều này là không phù hợp vì trong thực tế chữ cái ‘l’ thì khó có thể bị nhận dạng nhầm thành chữ cái ‘a’.

Vì vậy, luận văn này đã đề xuất ra phương pháp khác nhanh hơn và loại bỏ được các từ không phù hợp ngữ cảnh, đó là phương pháp tìm từ gần giống với từ

cần tra dựa vào ma trận chữ cái tương tự.

Một phần của tài liệu XÂY DỰNG ỨNG DỤNG TRA TỪ ĐIỂN BẰNG CAMERA TRÊN ĐIỆN THOẠI DI ĐỘNG (Trang 69 - 71)

Tải bản đầy đủ (PDF)

(93 trang)