HCWM có hai giai đoạn, tiền xử lý và tìm kiếm các mẫu.
1) Giai đoạn tiền xử lý bao gồm các công đoạn sau đây.
(1) Chia tất cả các mẫu thành bộ bốn mẫu "PS1-PS4".
(2) Xác định kích thước của cửa sổđối sánh cho "PS4".
(3) Thiết lập bảng HASH "HASH1-HASH4" cho mỗi mẫu.
(4) Thiết lập bảng SHIFT "SHIFT3", "SHIFT4" cho "PS3", "PS4".
(5) Thiết lập bảng PREFIX "PREFIX4" cho "PS4".
2) Giai đoạn tìm mẫu HCWM có thể tìm kiếm các mẫu như bộ mẫu "PS1-PS4" đồng thời. Đối với mỗi bộ mẫu, quá trình sánh mẫu khác nhau. a) Tìm kiếm "PS4", quá trình sánh mẫu của "PS4" giống như WM. b) Tìm kiếm "PS3", kích thước của cửa sổđối sánh là “m = 3", độ dài của khối ký tự " B = 2 ".
(1) Xác định cửa sổ đối sánh ở đầu văn bản "T". Con trỏ văn bản "Tp" trỏ đến hậu tố của cửa sổđối sánh.
(2) Nếu Tp>Tend, kết thúc việc tìm kiếm "PS3". Hoặc nếu không, chuyển tới bước (3).
(3) Tính toán giá trị băm "sh" các hậu tố của các ký tự văn bản bên trong cửa sổ đối sánh và tra cứu "SHIFT3", nếu "SHIFT3[sh]>0", Tp=Tp+ SHIFT3[sh], quay lại bước (2). Hoặc nếu không, chuyển tới bước (4).
(4) Tính toán giá trị băm "h" của các ký tự văn bản bên trong cửa sổ đối sánh, tra cứu "HASH3", nếu "HASH3[h]= null", mẫu phù hợp, ghi lại kết quả. Tp=Tp + 1, chuyển tới bước (2).
c) Tìm kiếm "PS2", kích thước của cửa sổ đối sánh là "m = 2", độ dài của khối ký tự "B = 2".
(1) Xác định cửa sổ đối sánh ở đầu văn bản "T". Con trỏ văn bản "Tp" trỏ đến hậu tố của cửa sổđối sánh.
(2) Nếu Tp>Tend kết thúc việc tìm kiếm cho "PS2". Hoặc nếu không, chuyển tới bước (3).
(3) Tính toán giá trị băm "h" của các ký tự văn bản bên trong cửa sổ đối sánh, tra cứu "HASH2", nếu "HASH2[h]=null", mẫu phù hợp, ghi lại kết quả. Tp=Tp + 1, chuyển tới bước (2). d) Tìm kiếm "PS1" Tìm kiếm "PS1", kích thước của cửa sổđối sánh là "m=1", độ dài của ký tự khối "B=1". Quá trình này giống như "PS2". 2.3.3. Ví dụ Giả sử chúng ta có dữ liệu sau đây.
Văn bản "T" = "The mild teacher always told her students to obey the
rules of school."
Mẫu, "P" = {"mild ", "tea", "told", "Micky", "ld", "tu "," t "," m "}
1) Tiền xử lý
(1) Phân loại các mẫu. "PS1" = {" t "," m "}, " PS2 "= {" ld "," tu "}, "PS3"= {" tea "}, " PS4 "= {" mild ", " told ", "Micky"}
(2) Xác định kích thước của cửa sổđối sánh cho "PS4", đó là "m = 4".
(3) Thiết lập bảng HASH, xem hình 1. (4) Thiết lập bảng SHIFT, xem hình 2. (5) Thiết lập bảng PREFIX, xem hình 3.
null
hash(m) m null
null hash(tea) tea
hash(t) t null
null
(a) HASH 1 (c) HASH 3
null null
hash(ld) ld hash(ck) micky null
null null
hash(tu) tu hash(ld) mild told null
null null
(b) HASH 2 (d) HASH 4
2) Tìm kiếm mẫu
(1) Tìm kiếm "PS4"
Kích thước của cửa sổđối sánh là "4" và được đặt vào đầu của văn bản.
The mild teacher always told her student to obey the rules of school
Ký tự hậu tố bên trong cửa sổ đối sánh là "e". Tra cứu "SHIFT4". Khi không có ký tự nào xuất hiện trong bất kỳ mẫu nào trong "PS4", khoảng cách dịch chuyển là "3".
The mild teacher always told her students to obey the rules of school
Sử dụng giá trị băm của "il" tra cứu "SHIFT4", dịch chuyển cửa sổ đối sánh bên phải 1 ký tự.
The mild teacher always told her students to obey the rules of school
Sử dụng giá trị băm của "ld" tra cứu "SHIFT4", khoảng cách dịch chuyển là "0". Điều đó có nghĩa là có thể có 1 mẫu phù hợp ở đây. Tra bảng "HASH4" với hash(ld), lấy các mục của danh sách liên kết, HASH4[hash(ld)]. Tính toán
giá trị băm của tiền tố bên trong cửa sổđối sánh hiện tại, hash(mi). Xem xét toàn
bộ danh sách liên kết, tính toán giá trị băm các tiền tố của mỗi mẫu trong danh sách, so sánh giá trị với hash(mi), nếu chúng bằng nhau, có nhiều mẫu phù hợp hơn nữa. Hoặc nếu không, tiếp tục cho đến cuối danh sách. Trong ví dụ này, mẫu "mild" là mẫu phù hợp. Dịch chuyển cửa sổ bên phải "1" ký tự.
te ea … up pe yp ti il ll tr ri
1 0 2 2 1 0 1 0 2 1 3
(a) SHIFT 3 (b) SHIFT 4
Hình 2: bảng SHIFT null
hash(mi) micky mill null
null
hash(to) told null
null
The mild teacher always told her students to obey the rules of school The mild teacher always told her students to obey the rules of school The mild teacher always told her students to obey the rules of school The mild teacher always told her students to obey the rules of school The mild teacher always told her students to obey the rules of school
Tương tự như vậy, mẫu "told" cũng là 1 mẫu phù hợp. Khi cửa sổ đối sánh đi đến "scho", khoảng cách dịch chuyển là "3", thì cửa sổ đối sánh đã đến
đoạn cuối cùng của văn bản, kết thúc việc tìm kiếm. (2) Tìm kiếm "PS3"
Kích thước của cửa sổđối sánh là "3" và cửa sổđối sánh nằm ởđầu văn bản.
The mild teacher always told her student to obey the rules of school The mild teacher always told her student to obey the rules of school
Tương tự như vậy, tra bảng "SHIFT3", dịch chuyển cửa sổ đối sánh bên phải, bây giờ nó nằm ở "tea". Tính toán giá trị băm của các ký tự bên trong cửa sổ đối sánh, ta nhận được hash(tea). Tra bảng "HASH3" và
"HASH3[hash(tea)]" là không null. Có nghĩa là có mẫu phù hợp. Dịch chuyển cửa sổ bên phải "1" ký tự và tiếp tục tìm kiếm cho đến khi kết thúc văn bản.
(3) Tìm kiếm "PS2"
Tìm kiếm văn bản từđầu. Kích thước của cửa sổđối sánh là "2". Khoảng cách dịch chuyển luôn là "1". Tính toán giá trị băm của các ký tự văn bản bên trong cửa sổđối sánh và tra bảng "HASH2". Nếu giá trị bảng không phải là null, ta tìm thấy mẫu phù hợp. Tiếp tục tìm kiếm cho đến khi kết thúc văn bản.
(4) Tìm kiếm "PS1". Tương tự như "PS2".
Thuật toán WM đồng thời cao HCWM tiến hành chia tất cả các mẫu thành nhiều bộ mẫu khác nhau theo chiều dài của chúng và xử lý các bộ mẫu tương ứng, có tác động tích cực đến hiệu suất mẫu ngắn. Ngoài ra, cấu trúc dữ
liệu độc lập được sử dụng cho các bộ mẫu khác nhau tạo ra sự tương tranh cao, tăng cường tốc độ sánh mẫu của HCWM rất nhiều. Baojun Zhang và cộng sựđã chứng tỏ bằng thử nghiệm rằng HCWM cho hiệu suất cao hơn nhiều so với WM
2.4. Thuật toán WM sử dụng bảng tiền tố
Đồng thời với thuật toán HCWM, Baojun Zhang và cộng sự, 2009 [ZCP09] đã đề xuất thêm một phiên bản cải tiến thuật toán WM dựa trên cơ chế
sử dụng bảng lọc mẫu tiền tốđể tăng tốc độ hoạt động của thuật toán; phiên bản này được gọi là thuật toán WM sử dụng bảng tiền tố (Address Filtering Based WM: AFWM).
2.4.1. Cải tiến của thuật toán
Trong WM, khi danh sách liên kết được tìm thấy qua bảng HASH, các con trỏ địa chỉ của mẫu trong danh sách liên kết phải thỏa mãn
HASH[hash(sbc)]≤ p<HASH[hash(sbc) +1].
Cải tiến trong thuật toán AFWM là ở chỗ sử dụng giá trị hash của tiền tố
và một danh sách liên kết tiền tốđể tra tìm trong bảng PREFIX của WM. Trong danh sách liên kết tiền tố, tất cả các mẫu có cùng tiền tố sẽ được sắp xếp tăng dần theo con trỏđịa chỉ của mẫu. Vì vậy, chỉ cần so sánh những mẫu có con trỏ địa chỉ xác định trong phạm vi [HASH[hash(sbc), HASH[hash(sbc)+1]. Khi các
mẫu trong danh sách liên kết tiền tốđược sắp xếp tăng dần theo địa chỉ con trỏ, thì khi địa chỉ con trỏ ≥ HASH[hash(sbc) +1], quá trình tìm kiếm được hoàn thành ngay lập tức.
Cải tiến này có hai lợi thế. Đầu tiên, không cần phải tính toán giá trị băm của các tiền tố cho các mẫu trong danh sách liên kết hậu tố. Thứ hai, không cần phải xem xét toàn bộ danh sách liên kết tiền tố.
2.4.2. Giai đoạn tiền xử lý và tìm mẫu trong AFWM
AFWM có hai giai đoạn, tiền xử lý và tìm kiếm mẫu.
a) Quá trình tiền xử lý
Giai đoạn tiền xử lý bao gồm các công đoạn sau. (1) Thiết lập bảng HASH.
(2) Thiết lập bảng SHIFT.
(3) Thiết lập bảng PREFIX. Các mẫu trong danh sách liên kết được sắp xếp tăng dần theo con trỏđịa chỉ .
b) Quá trình tìm mẫu
Giả sử kích thước của cửa sổđối sánh là "m", độ dài của khối ký tự là "B = 2".
(1) Xác định vị trí cửa sổ so sánh ở đầu văn bản "T". Trỏ con trỏ "Tp" vào hậu tố của cửa sổđối sánh.
(3) Tính toán giá trị băm "sh" các hậu tố của các ký tự văn bản bên trong cửa sổđối sánh và tra bảng "SHIFT", nếu "SHIFT[sh]>0", Tp= Tp + SHIFT[sh],
quay trở lại bước (2). Nếu không, chuyển tới bước (4) .
(4) Tra bảng “HASH” với giá trị băm “sh”, tìm danh sách liên kết các mẫu có cùng hậu tố lại với nhau. Các con trỏ địa chỉ của những mẫu này thỏa mãn
điều kiện HASH[sh] ≤ p< HASH[sh+1].
(5) Tính toán giá trị băm“ph” các tiền tố của các ký tự văn bản bên trong cửa sổ so sánh và tra bảng “PREFIX”, tìm danh sách liên kết tiền tố, bắt đầu xem xét từ đầu danh sách, nếu con trỏ địa chỉ của mẫu đặt trong phạm vi
([HASH[sh],HASH[sh+1]), thì dừng lại, hoặc nếu không, chuyển đến con trỏ kế
tiếp, tiếp tục như vậy cho đến khi con trỏ ≥ HASH[sh +1]. Trong quá trình sánh mẫu, nếu xuất hiện các mẫu phù hợp, ghi lại kết quả. Tp=Tp+1, chuyển tới bước (2).
2.4.3.Ví dụ
Giả sử kích thước của khối ký tự là B = 2 và ta có cặp dữ liệu như sau: Văn bản " T" = " We still use this machine though it is obsolete. " Mẫu "P " = {“still”, “student”, “trill”, “stupe”}
a) Tiền xử lý
(1) Xác định kích thước của cửa sổđối sánh là "m = 5 " . (2) Thiết lập bảng HASH, xem hình 4.
(3) Thiết lập bảng SHIFT, xem hình 5. (4) Thiết lập bảng PREFIX, xem hình 6.
… hash(dd) P hash(de) P student P+1 hash(df) P+1 P student … P+1 still hash(lk) P+1
P+2 trill hash(ll) P+1 still P+2 trill P+3
P+3 stupe hash(lm) P+3
P+4 stype …
hash(pd) P+3
hash(pe) P+3 stupe P+4 stype P+5
hash(pf) P+5 (a) cấu trúc lưu trữ mẫu (b) HASH Hình 4: Cấu trúc lưu trữ mẫu và bảng HASH st tu ud de up pe yp ti il ll tr ri … 3 2 1 0 1 0 1 2 1 0 3 2 4 Hình 5: bảng SHIFT null
hash(st) P student P+1 still P+3 stupe P+4 stype null null
hash(tr) P+2 trill null null
b) Tìm mẫu
Đầu tiên, cửa sổ so sánh nằm ởđầu văn bản.
We still use this machine though it is obsolete.
Ký tự hậu tố bên trong cửa sổđối sánh là "st". Tra bảng "SHIFT", khoảng cách dịch chuyển là "3".
We still use this machine though it is obsolete.
Sử dụng giá trị băm "ll" tra bảng "SHIFT", khoảng cách dịch chuyển là "0". Điều đó có nghĩa là vị trí hiện tại của cửa sổ đối sánh là một cổng vào so sánh. Tra bảng "HASH" với hash(ll), ta nhận được danh sách liên kết hậu tố, HASH[hash(ll)] (hình 4). Dãy con trỏ địa chỉ của danh sách liên kết hậu tố là [P+1, P+3]. Sử dụng các giá trị băm của tiền tố trong cửa sổ so sánh hiện tại “st”
để tra bảng "PREFIX", lấy danh sách liên kết tiền tố, PREFIX[hash(st)] (hình
6). Bây giờ ta sẽ so sánh các con trỏđịa chỉ .
Trong danh sách liên kết tiền tố, mẫu đầu tiên là "student". Con trỏđịa chỉ
của nó là "P". Bởi vì "P" không nằm trong phạm vi [P+1, P+3], không cần phải so sánh. Tiếp tục chuyển tới mẫu kế tiếp. Mẫu thứ hai là "still". Con trỏ địa chỉ
của nó là "P +1" nằm trong phạm vi địa chỉ [P+1, P+3], quá trình sánh mẫu diễn ra và ta tìm thấy mẫu phù hợp. Tiếp tục với mẫu tiếp theo. Mẫu thứ ba "stupe".
Con trỏ địa chỉ của nó là "P+3" nằm ngoài phạm vi [P+1, P+3], kết thúc tìm kiếm.
Ta dịch chuyển cửa sổ so sánh, và tiếp tục các thao tác như trên cho đến khi kết thúc văn bản.
Từ ví dụ trên, ta thấy rằng khi tìm kiếm các danh sách liên kết tiền tố, AFWM tránh việc tính toán băm và xem xét toàn bộ danh sách.
Theo Baojun Zhang và cộng sự, AFWM khắc phục một số hạn chế còn tồn tại trong WM, chẳng hạn như thông tin dư thừa và nhiều phép tính toán, tránh việc xuyên qua danh sách, đề xuất lọc địa chỉ dựa trên thuật toán WM. Bằng phân tích hiệu suất thông qua kết quả thử nghiệm, các tác giả đã minh chứng rằng AFWM tốt hơn so với WM .
CHƯƠNG 3: THỰC NGHIỆM
3.1. Giới thiệu về agrep
AGREP là một công cụ mạnh để nhanh chóng tìm kiếm một tập tin hoặc nhiều tập tin cho một chuỗi hoặc biểu thức chính quy, với khả năng kết hợp gần
đúng và có thể xác định hồ sơ người dùng. Agrep được Udi Manber và Sun Wu phát triển trong giai đoạn 1989-1991 [WM92] và sau đó được nhiều người khác cùng tham gia nâng cấp. AGREP tương tự như egrep (hoặc grep hoặc fgrep),
nhưng nó tổng quát hơn và thường nhanh hơn. Nó cũng hỗ trợ nhiều loại truy vấn, bộ mẫu, và biểu thức thông thường nói chung.
Như đã được giới thiệu, tìm kiếm một mẫu trong văn bản là một hoạt
động phổ biến trong các ứng dụng từ soạn thảo văn bản đến tìm kiếm cơ sở dữ
liệu cho các ứng dụng sinh học phân tử. Trong nhiều trường hợp mẫu có thể
xuất hiện hoặc không xuất hiện trong văn bản. Sai sót trong văn bản hoặc trong truy vấn có thể do lỗi chính tả hoặc từ những thực nghiệm sai lầm (ví dụ như khi văn bản là một chuỗi DNA). Việc sử dụng sánh mẫu xấp xỉ hạn chếđược một số
lỗi. Hầu hết các trình soạn thảo văn bản và các chương trình tìm kiếm không hỗ
trợ tìm kiếm với các lỗi do sự phức tạp liên quan đến việc thực hiện nó. Agrep dựa trên thuật toán hiệu quả và linh hoạt là sánh mẫu xấp xỉ.
So mẫu xấp xỉ cho phép tìm kiếm những thông tin “gần giống”, trong một số trường hợp các mẫu hoặc văn bản không chính xác. Ta không thể nhớ
chính tả chính xác của một tên mà ta đang tìm kiếm, tên có thể bị sai chính tả
trong văn bản, văn bản có thể tương ứng với một chuỗi các số nhất định và ta không có một mẫu chính xác, các văn bản có thể là một chuỗi phân tử DNA và ta đang tìm kiếm các mẫu gần đúng ...Vấn đề tìm kiếm xấp xỉđặt ra trong nhiều
ứng dụng khoa học kĩ thuật như: nhận dạng chữ viết, nhận dạng ảnh, đồ thị, so sánh xấp xỉ trong các xâu nén có độ dài không cố định, xác định cấu trúc con chung 3 chiều trong phân tử dược phẩm và protein, khám phá sự biến đổi trong chuỗi ADN,....và đặc biệt phổ biến trong các hệ thống trích rút văn bản.
Agrep không chỉ hỗ trợ một số lớn các tùy chọn, mà còn rất hiệu quả. Ví dụ, việc tìm kiếm tất cả các lần xuất hiện của Homogenos cho phép hai lỗi trong một 1 MB văn bản mất khoảng 0,2 giây trên một SUN SparcStation H. Sánh mẫu càng chính xác thì thời gian thực hiện càng nhanh.
3.2. Các thuật toán sử dụng trong agrep
Agrep sử dụng một số thuật toán khác nhau để tối ưu hóa hiệu suất cho các trường hợp khác nhau. Đối với truy vấn đơn giản chính xác ta sử dụng một biến thể của thuật toán Boyer - Moore. Đối với các mẫu đơn giản với các lỗi, chúng tôi sử dụng một chương trình phân vùng, với chương trình Boyer -Moore.
Đối với các mẫu phức tạp hơn, ví dụ các mẫu với chi phí không đồng đều chỉnh sửa khác nhau, đa mẫu, biểu thức thông thường tùy ý, ta sử dụng thuật toán mới hoàn toàn.
3.2.1. Thuật toán WM trong AGREP
Trong phần mềm Agrep, ưu điểm chính của chương trình này là các thuật toán sánh mẫu chính xác có thểđược điều chỉnh để hỗ trợ nó. Ta minh họa cho ý tưởng này với một ví dụ như sau.