Giả sử đã xuất hiện khúc đầu độ dài i-1 của P trên S, tính tới vị trí j, có nghĩa đã có P(i - 1) = sufi - 1(S(j - 1)) hay độ mờ tại vị trí j - 1 là j-i = i - 1. Xét ký tự Sj, có thể xảy ra hai khả năng:
Trƣờng hợp 1: Sj = Pi (hay độ mờ tại vị trí j là j = i). Tăng i, j lên 1. Với trƣờng hợp này tốc độ thao tác của thuật toán KMP nhƣ trong tiếp cận mờ.
Trƣờng hợp 2: Sj Pi (hay độ mờ tại vị trí j là j i)
Hình 2.1. Dịch chuyển con trỏ trên mẫu
Trong KMP, con trỏ j trên S giữ nguyên, chỉ dịch chuyển con trỏ trên mẫu (dùng lệnh i:= next[i]. Vì vậy phải mất thời gian dịch chuyển theo bảng next, thậm chí nhiều lần. Ví dụ nhƣ: ? next [i] P P S i i j-i = i - 1
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Với P = aababaab, sử dụng bảng next (trong ví dụ mục 2.3) để tìm sự xuất hiện của mẫu trong dòng ký tự S nhƣ sau:
S = a a c ... j = 3 P = a a b a b a a b i = 3
dịch lần thứ nhất a a b a b a a b i = next[i] = 2 dịch lần thứ 2 a a b a b a a b i = next[i] = 0
Ta thấy có 2 lần dùng i:= next[i] và 2 lần so sánh Sj và Pi (i khác nhau). Nói chung có thể xảy ra nhiều lần dùng next trong khi con trỏ trên S vẫn giữ nguyên. Điều này làm chậm đáng kể so với tiếp cận mờ: mỗi lần nhận một ký tự Sj là một lần điều chỉnh giá trị mờ theo otomat: j = TFuzz ( j-1, Sj). Lệnh này thực hiện rất nhanh nếu TFuzz đƣợc biểu diễn dƣới dạng một mảng và đƣợc tính toán cẩn thận trƣớc theo thông tin trên mẫu P.
Kết quả sau so sánh tốc độ thực hiện việc tìm sự xuất hiện mẫu P trong tệp dữ liệu lớn S theo hai thuật toán KMP và tiếp cận mờ trên máy PC IBM tốc độ 233MHz.
Bảng 2.7. Kết quả tìm sự xuất hiện mẫu P trong tệp S theo KMP và tiếp cận mờ
Mẫu P Kích thƣớc tệp S TKMP TFuzzy-KMP 1) aababcab 1400 KB 17% s 11% s 2) MDSVF6V 140.000 KB 35 s 30 s 3) bacabccaa 1200 KB 16% s 10% s 4) S068FAB50 140.000 KB 37 s 30 s 2.3. Thuật toán KMP - BM mờ
2.3.1. Ý tƣởng của thuật toán
Trong thuật toán Boyer - Moore (BM), các ký tự trên mẫu P đƣợc duyệt từ phải sang trái, bắt đầu từ Pm. Tại thời điểm gặp ký tự không trùng khớp, chẳng hạn Pi = a còn Sj = b, khi đó sẽ quyết định dịch con trỏ trên mẫu. Phép dịch chuyển ứng với mỗi ký tự trên P, nếu sự không trùng khớp xảy ra ở đó,
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
đƣợc xác định trong bƣớc tiền xử lý mẫu P. Trong thuật toán “ký tự không khớp” này của BM, có một trƣờng hợp cho phép dịch chuyển tốt nhất (xa nhất) là khi ký tự b không xuất hiện trong mẫu P. Từ chi tiết này, kết hợp với kiểu sánh mẫu nhƣ trong KMP, ta sẽ có một “thuật toán theo tiếp cận mờ tổng quát kiểu KMP và BM”, trong đó độ mờ vẫn đƣợc tính toán dựa trên hàm TFuzz, đồng thời sẽ có những bƣớc nhảy dài trên xâu đích, đem lại hiệu quả tìm kiếm cao [4].
Ý tƣởng của thuật toán này là: gọi ptr là con trỏ trên xâu đích S (khởi đầu ptr = 0 và độ mờ tại đó bằng 0 báo hiệu chƣa tìm thấy mẫu). Mỗi lần xét một khối w gồm m + 1 ký tự liên tục trên S, bắt đầu từ vị trí ptr, ta gọi khối này là “khối ký tự quan sát” và ký hiệu wi là ký tự thứ i trong w (với w1 = Sptr). Dựa trên bảng TFuzz, tính độ mờ xuất hiện mẫu khi gặp ký tự w1 (hay chính là Sptr), ký hiệu độ mờ này là n1, đồng thời xác định bƣớc nhảy tiếp theo để từ đó sẽ xét khối ký tự w mới, ký hiệu bƣớc nhảy là n2. Nếu n1 là độ mờ tại Sptr thì có nghĩa sufn1(S(ptr)) = P(n1). Xảy ra các khả năng sau:
Nếu n1 = m, chứng tỏ đã xuất hiện mẫu bắt đầu từ vị trí ptr - m + 1 trên S. Để không bỏ sót sự xuất hiện lồng nhau của mẫu, đặt n2 = 1. Nếu n1 lớn hơn độ mờ tại vị trí đƣợc xét trƣớc vị trí ptr, có nghĩa đang có hy vọng tìm thấy mẫu nên n2 = 1.
Trong các trƣờng hợp còn lại của n1, chỉ mới xuất hiện khúc đầu P(n1) khớp với khúc cuối độ dài n1 của S(ptr). Nếu việc khớp mẫu thành công với khối ký tự quan sát w, thì ký tự Pm sẽ khớp với ký tự Sptr+m-n1 (hay w1+m-n1). Do đó, nếu Sptr+m-n1 không phải là một ký tự xuất hiện trong P thì có thể thực hiện bƣớc nhảy xa để đọc w mới bắt đầu từ vị trí ptr+m-n1+1 trên S mà vẫn đảm bảo không bỏ sót sự xuất hiện nào của mẫu.
ptr
P(n1) ptr+m-n1
1+m-n1 m+1
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Hình 2.2. Ý tƣởng chung của thuật toán KMP-BM mờ
2.4.2. Otomat mờ so mẫu
2.3.2.1. Giới thiệu
Cho P là xâu mẫu độ dài m trên bảng chữ A. Ap là bảng các ký tự xuất hiện trong P. Otomat mờ so mẫu là A(P) = (Ak, Q, q0, F, ), trong đó:
Ak là bảng chữ vào, mỗi chữ là một xâu ký tự độ dài k trên A, k=m+1
Q là tập hữu hạn các trạng thái, Q = {q=(n1,n2)| n1, n2 N, 0 n1 m, 1 n2 k}; n1 gọi là độ mờ tại vị trí đang xét; n2 gọi là bƣớc nhảy tiếp theo vị trí đang xét
q0 là trạng thái khởi đầu, q0 = (0,1) F là trạng thái kết thúc, F = (m,1)
Hàm chuyển : Q × Ak Qs; (q, w) q‟ = (q, w) Với q = (n1, n2) thì q‟ = (n1‟, n2‟) đƣợc xác định nhƣ sau: 1. Nếu n2 > 1 thì đặt n1 = 0
2. Tính n1‟ = TFuzz (n1, w1)
3. Nếu n1‟ = m hoặc n1‟ > n1 thì n2‟ = 1, ngƣợc lại (n1‟ < m và n1‟ n1) thì xét: Nếu w1+m-n1‟ Ap thì n2‟ = 1, ngƣợc lại n2‟=1+m-n1‟
2.3.2.2. Hoạt động của otomat mờ so mẫu
Cho mẫu P độ dài m và xâu đích S độ dài n trên bảng chữ A. A(P) là otomat đƣợc xác định theo định nghĩa trên. Ta sẽ dùng otomat A(P) để đoán nhận tất cả các vị trí xuất hiện mẫu P trong xâu S và tổng số lần xuất hiện mẫu.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Thuật toán cơ bản dựa trên otomat đƣợc mô tả nhƣ sau: Ta dùng các ký hiệu:
j là con trỏ quan sát trên S
q.n1, q.n2 là hai thành phần của trạng thái q
w là khối ký tự quan sát bắt đầu từ vị trí j trên xâu đích S, giả sử đã bổ sung thêm m ký tự # vào cuối S.
qold là trạng thái của otomat tại vị trí trƣớc khi đọc w q là trạng thái otomat sau khi tác động w, q = (qold, w) Counter là biến đếm số lần xuất hiện mẫu.
Bước 1: Khởi tạo
j: = 0; counter := 0; qold.n1 :=0; qold.n2 :=1; Bước 2: While j n do
j: = j + qold.n2
Đọc khối ký tự quan sát w; {w1 Sj} {Tính q = (qold, w)}
if qold.n2 > 1 then qold.n1:= 0; endif; q.n1: = TFuzz (qold.n1, w1);
q.n2: = 1; if q.n1= m then
Ghi nhận vị trí xuất hiện mẫu là j - m + 1; Counter: = counter + 1;
else if q.n1 < m and q.n1 < qold.n1 then
if w1+m-q.n1 Ap then q.n2: = 1+m-q.n1; endif; endif;
endif; qold := q; end while;
2.3.3. Thuật toán tìm kiếm
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ var apr: array [1..N] of integer;
counter, j, n1, n2, n1’, n2’: integer; begin j:= 0; n1:= 0; n2 := 1; while j <= n do begin j := j + n2; if n2 > 1 then n1:= 0; n1’ := TFuzz [n1, index [S[j]]]; n2’: = 1; if n1’ = m then
begin counter := counter + 1; apr[counter]:= j - m + 1; end
else if n1’ < m and n1’ <= n1 then begin if j + m - n1’ > n then return;
if index [S[j + m - n1’]] = k then n2’ : = 1 + m - n1’; end; n1:=n1’; n2: = n2’; end; end; 2.4. Kết luận chƣơng
Chƣơng này tập trung trình bày về thuật toán so khớp chuỗi KMP, thuật toán KMP mờ, thuật toán KMP-BM mờ. Kết quả nghiên cứu của chƣơng này là cơ sở để giải quyết bài toán tìm kiếm thông tin trên văn bản ở chƣơng sau.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
CHƢƠNG 3. ỨNG DỤNG THUẬT TOÁN KMP TRONG TÌM KIẾM THÔNG TIN TRÊN VĂN BẢN
3.1. Bài toán tìm kiếm mẫu trên văn bản
3.1.1. Tìm kiếm mẫu
Kiểu văn bản là dạng biểu diễn dữ liệu hay gặp nhất trong các hệ thống thông tin. Tìm kiếm văn bản là vấn đề chủ yếu thuộc lĩnh vực quản lý văn bản. Một dạng cơ bản và tổng quát hơn là tìm kiếm chuỗi hay đối sánh chuỗi. Khái niệm “chuỗi” ở đây khá rộng, có thể là chuỗi văn bản gồm một dãy các chữ, số và ký tự đặc biệt, có thể là chuỗi nhị phân hay chuỗi gen,… Tìm kiếm chuỗi là bài toán tìm ra một mẫu với một số đặc tính nào đó trong chuỗi các ký hiệu cho trƣớc, vì thế bài toán này còn đƣợc gọi là so xâu mẫu hay có thể gọi ngắn gọn là so mẫu. Dạng đơn giản nhất là tìm sự xuất hiện một xâu cho trƣớc trong một chuỗi (còn gọi là xâu đích).
Thời gian gần đây, vấn đề đối sánh chuỗi càng trở nên quan trọng và đƣợc quan tâm nhiều do sự tăng trƣởng nhanh chóng của các hệ thống trích rút thông tin và các hệ thống sinh- tin học. Một lý do nữa, bởi con ngƣời ngày nay không chỉ đối mặt với một lƣợng thông tin khổng lồ mà còn đòi hỏi những yêu cầu tìm kiếm ngày càng phức tạp. Các mẫu đƣa vào không chỉ đơn thuần là một xâu ký tự mà còn có thể chứa các ký tự thay thế, các khoảng trống và các biểu thức chính. Sự “tìm thấy” không đơn giản là xuất hiện chính xác mẫu mà còn cho phép có “một ít sai khác” giữa mẫu và xuất hiện của nó trong văn bản. Từ đó, bên cạnh vấn đề kinh điển là tìm kiếm chính xác, nảy sinh một hƣớng nghiên cứu hết sức thú vị đó là tìm kiếm xấp xỉ.
Có thể phân các loại thuật toán so mẫu theo 2 hƣớng. Thứ nhất là các thuật toán trực tuyến, trong đó chỉ mẫu đƣợc tiền xử lý (thƣờng sử dụng otomat hoặc dựa trên các đặc tính kết hợp trên xâu), còn văn bản thì không. Thứ hai là giải pháp tiền xử lý văn bản theo cách xây dựng một cấu trúc dữ liệu trên văn
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
bản (lập chỉ mục). Nhiều ứng dụng cần sử dụng giải pháp này mặc dù đã có những thuật toán trực tuyến nhanh bởi chúng cần phải điều khiển một lƣợng văn bản quá lớn nên không có thuật toán trực tuyến nào có thể thực hiện một cách hiệu quả. Tìm kiếm trên chỉ mục thực ra cũng dựa trên tìm kiếm on-line.
Để giảm sự dƣ thừa trong lƣu trữ và truyền dữ liệu, một giải pháp đƣợc sử dụng là nén dữ liệu. Quá trình nén làm cho các tệp chiếm ít không gian lƣu trữ hơn, giảm đƣợc thời gian và chi phí truyền thông nhƣng lại làm mất đi phần lớn cấu trúc của dữ liệu, dẫn đến khó khăn trong việc tìm kiếm và trích rút thông tin. Cách đơn giản nhất song rất tốn thời gian (và khó khả thi với những văn bản quá lớn) là giải nén toàn bộ rồi tiến hành tìm kiếm bằng một thuật toán so mẫu kinh điển. Hiện nay, đã có nhiều giải pháp tốt hơn theo hai hƣớng chính là: so mẫu nén và so mẫu trên miền nén. So mẫu nén thực hiện nén mẫu trƣớc rồi đem đi tìm kiếm trên văn bản nén, còn so mẫu trên miền nén sử dụng giải pháp nén từng phần của văn bản. Nén dữ liệu text thực chất là một quá trình mã hoá, chuyển các thông báo nguồn (trong bảng chữ nguồn A) thành các bản mã (trong bản chữ mã B) và ngƣợc lại là quá trình giải mã. Vì vậy thuật toán tìm kiếm trên văn bản nén có thể áp dụng đối với văn bản mã hoá dạng khối ký tự. Tuy nhiên, do yêu cầu bảo mật, đối với những văn bản mã hoá, cần có những giải thuật tìm kiếm đảm bảo không bị rò rỉ thông tin ngay trong quá trình tìm kiếm.
3.1.2. Tìm kiếm thông tin
3.1.2.1 Giới thiệu
Mục đích của tìm kiếm là trả lại cho ngƣời dùng một tập các thông tin thỏa mãn nhu cầu của họ. Ta định nghĩa rằng thông tin cần thiết là câu truy vấn và các thông tin đƣợc chọn là tài liệu. Mỗi cách tiếp cận trong tìm kiếm thông tin bao gồm 2 thành phần chính: một là các kỹ thuật để biểu diễn thông tin (câu truy vấn, tài liệu) và hai là phƣơng pháp so sánh các cách biểu diễn này. Mục đích là để thực hiện tự động qui trình kiểm tra các tài liệu bằng cách tính toán độ tƣơng quan giữa các câu truy vấn và tài liệu. Qui trình tự động này thành công
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
khi nó trả về các kết quả giống với các kết quả đƣợc con ngƣời tạo ra khi so sánh câu truy vấn với các tài liệu.
Hình 3.1. Mô hình biểu diễn và so sánh thông tin
Gọi miền xác định của hàm biểu diễn câu truy vấn q là Q, tập hợp các câu truy vấn có thể có; và miền giá trị của nó là R, không gian thống nhất biểu diễn thông tin. Gọi miền xác định của hàm biểu diễn tài liệu d là D, tập hợp các tài liệu; và miền giá trị của nó là R. Miền xác định của hàm so sánh c là R × R và miền giá trị của nó là [0,1], tập các số thực từ 0 đến 1. Trong một hệ thống tìm kiếm lý tƣởng:
c(q(query), d(doc)) = j(query, doc) , ∀query ∈ Q, ∀doc ∈ D
Với j: Q × D [0,1] biểu diễn việc xử lý của ngƣời dùng về mối quan hệ của thông tin trên câu truy vấn và thông tin trong tài liệu.
Có nhiều cách đo lƣờng khác nhau cho việc đánh giá mức độ xử lý trả về kết quả của một hệ thống tìm kiếm thông tin. Các cách đo lƣờng đều đòi hỏi một tập tài liệu và một câu truy vấn trên tập tài liệu đó, giả sử rằng mỗi tài liệu có thể liên quan hoặc không liên quan đến câu truy vấn.
Độ chính xác (Precision): đƣợc đo bởi tỉ lệ của tài liệu trả về chính xác trên tổng các tài liệu nhận đƣợc:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Độ bao phủ (Recall): đƣợc đo bởi tỉ lệ tài liệu trả về chính xác trên tổng các tài liệu có liên quan:
Kết quả sai (Fall-out): đƣợc đo bởi tỉ lệ các tài liệu không có liên quan tả về trên tổng các tài liệu không liên quan
3.1.2.2 Các mô hình tìm kiếm thông tin thường sử dụng
Mô hình so khớp: là một mô hình mà chúng ta có thể xem mỗi câu truy vấn là một biểu thức logic các mục từ, trong đó gồm các mục từ kết hợp với các toán tử logic (AND, OR, và NOT). Mô hình sẽ xem mỗi tài liệu là một tập hợp các mục từ. Mỗi mục từ sẽ chứa một danh sách các tài liệu có chứa nó, danh sách này gọi là posting, việc so khớp sẽ duyệt qua danh sách posting để kiểm tra các tài liệu có chứa mục từ hay không.
Phương pháp tính điểm: Mô hình so khớp chỉ trả về giá trị chân lý là có hoặc không có trong tài liệu tìm kiếm, kết quả trả về không có thứ hạng. Điều này đã dẫn đến kết quả tìm kiếm không đƣợc nhƣ mong muốn của ngƣời dùng. Để cải tiến mô hình này, ngƣời ta áp dụng cách tính điểm cho kết quả trả về, dựa trên trọng số của mục từ trên tài liệu.
Tần suất xuất hiện của mục từ t trên tài liệu d đƣợc ký hiệu là tft,d. Tần suất nghịch đảo của tài liệu d trên tập N tài liệu ký hiệu là idft = log(N / dft), khi đó trọng số mục từ t trên tài liệu d sẽ là tf-idf = tft,d x idft, điểm số của tài liệu d sẽ là tổng điểm các mục từ trong câu truy vấn có mặt trong d:
Ví dụ với 1000 tài liệu có 100 tài liệu chứa mục từ “tin” và 150 tài liệu chứa mục từ “học”, giả sử tài liệu thứ nhất d có 3 lần xuất hiện mục từ “tin” và 4
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/