Tải bản đầy đủ (.pdf) (78 trang)

Các thuật toán đối sánh mẫu và ứng dụng tìm kiếm trên website

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (972.83 KB, 78 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

PHẠM CÔNG HỒNG

CÁC THUẬT TOÁN ĐỐI SÁNH MẪU VÀ ỨNG
DỤNG TÌM KIẾM TRÊN WEBSITE

LUẬN VĂN THẠC SĨ KỸ THUẬT
TOÁN TIN

Hà Nội – Năm 2014


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

PHẠM CÔNG HỒNG

CÁC THUẬT TOÁN ĐỐI SÁNH MẪU VÀ ỨNG DỤNG
TÌM KIẾM TRÊN WEBSITE

Chuyên ngành: TOÁN TIN
Mã đề tài:
TOAN-VINH06

LUẬN VĂN THẠC SĨ KỸ THUẬT
TOÁN TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC
TIẾN SĨ: NGUYỄN THỊ THANH HUYỀN



Hà Nội – Năm 2014


LỜI CẢM ƠN
Trước hết em xin gửi lời cảm ơn chân thành đến toàn thể các thầy cô
giáo Viện Toán ứng dụng và Tin học đã tận tình dạy dỗ chúng em trong suốt
quá trình học tập tại Viện.
Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc tới cô giáo Tiến sĩ Nguyễn
Thị Thanh Huyền, Viện Toán ứng dụng và Tin học, trường Đại học Bách
Khoa Hà Nội đã quan tâm hướng dẫn và đưa ra những gợi ý, góp ý, chỉnh sửa
vô cùng quý báu cho em trong quá trình làm luận văn tốt nghiệp.
Cuối cùng xin chân thành cảm ơn gia đình, những người bạn đã giúp
đỡ, chia sẻ với em trong suốt quá trình học tập và làm luận văn.


LỜI CAM ĐOAN
Tôi xin cam đoan kết quả đạt được trong luận văn là sản phẩm của cá
nhân và được thực hiện nghiêm túc dưới sự hướng dẫn của Tiến sĩ Nguyễn
Thị Thanh Huyền. Trong toàn bộ nội dung của luận văn, những điều được
trình bày hoặc là của cá nhân hoặc là được tổng hợp từ nhiều nguồn tài liệu.
Tất cả các tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợp
pháp.
Tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo
qui định cho lời cam đoan của mình.
Hà Nội, ngày 12 tháng 03 năm 2014

Phạm Công Hồng



DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT
Các ký hiệu
ε

Xâu rỗng

wi

Kí tự thứ i của xâu w

Pi

Kí tự thứ i của xâu P

Sj

Kí tự thứ j của xâu S

Ci,j

Là độ dài dãy con lớn nhất của hai dãy P1..i và S1..j

Các chữ viết tắt
CSDL

Cơ sở dữ liệu

DFA

Otomat đơn định hữu hạn


NFA

Otomat đa định hữu hạn

KMP

Knuth–Morris–Pratt

BM

Boyer–Moore


DANH MỤC CÁC HÌNH VẼ
Hình 2.1.

Ý nghĩa của mảng Next…………………………..………….…..15

Hình 2.2.

Ý nghĩa của mảng next tại vị trí m + 1……………………..…...16

Hình 3.1.

Sự thay đổi trạng thái mờ khi gặp kí tự b.....................................34

Hình 4.1.

Mô hình lập trình của ứng dụng...................................................57



MỤC LỤC
MỞ ĐẦU ............................................................................................................ 1
1. Lý do chọn đề tài ........................................................................................ 1
2. Mục tiêu và nội dung .................................................................................. 1
3. Phạm vi nghiên cứu .................................................................................... 2
Chương 1: TỔNG QUAN VỀ VẤN ĐỀ ĐỐI SÁNH MẪU ............................. 3
1.1. Đối sánh mẫu ........................................................................................... 3
1.2. Bài toán đối sánh mẫu và tình hình nghiên cứu hiện nay ........................ 4
1.3. Các dạng của bài toán đối sánh mẫu ........................................................ 6
1.3.1. So đơn mẫu .................................................................................... 6
1.3.2. So đa mẫu ....................................................................................... 7
1.3.3. Đối sánh mẫu mở rộng ................................................................... 8
1.4. Đối sánh mẫu xấp xỉ .............................................................................. 11
1.4.1. Phát biểu bài toán ......................................................................... 11
1.4.2. Độ tương tự giữa hai xâu ............................................................. 12
1.4.3. Các tiếp cận giải bài toán đối sánh mẫu xấp xỉ ............................ 13
Chương 2. CÁC THUẬT TOÁN ĐỐI SÁNH MẪU CHÍNH XÁC ............... 15
2.1. Thuật toán KMP ( Knuth- Morris- Pratt)............................................... 15
2.2. Thuật toán BM ( Boyer- Moore) ........................................................... 19
2.3. Thuật toán KMP mờ .............................................................................. 23
2.3.1. Khái niệm Độ mờ ............................................................................ 23
2.3.2 Otomat mờ so mẫu ........................................................................... 24
2.3.3 Thuật toán ......................................................................................... 25
2.4. Kết luận chương 2 .................................................................................. 28
Chương 3. ĐỐI SÁNH MẪU XẤP XỈ ........................................................... 29
3.1 Vấn đề đối sánh mẫu xấp xỉ .................................................................... 29
3.2 Độ tương tự dựa trên độ dài khúc con chung của hai xâu ...................... 30
3.2.1 Phát biểu bài toán ............................................................................. 30

3.2.2 Otomat đối sánh mẫu: mô hình và cơ sở toán học ........................... 31


3.2.3 Thuật toán ......................................................................................... 35
3.2.4 Một phương pháp tính hàm chuyển trạng thái TFuzz ...................... 36
3.3.5. Đánh giá thuật toán.......................................................................... 39
3.3 Độ tương tự dựa trên dãy con chung dài nhất ........................................ 40
3.3.1 Bài toán tìm dãy con chung dài nhất ................................................ 40
3.3.2 Thuật toán quy hoạch động .............................................................. 40
3.3.3 Thuật toán quy hoạch động tìm dãy con chung dài nhất .................. 40
3.4 Kết luận chương 3 ................................................................................... 44
Chương 4. SỬ DỤNG THUẬT TOÁN ĐỐI SÁNH MẪU TRONG TÌM
KIẾM TRÊN WEBSITE .................................................................................. 45
4.1. Đặt vấn đề .............................................................................................. 45
4.2. Cài đặt chương trình ............................................................................. 46
4.2.1 Thiết kế DataBase ........................................................................... 46
4.2.2 Nền tảng ứng dụng .......................................................................... 55
4.3 Cấu trúc hệ thống .................................................................................... 56
4.3.1. Lớp Domain..................................................................................... 56
4.3.2. Lớp Framework ............................................................................... 57
4.3.3. Lớp Website .................................................................................... 57
4.3.4. Mô tả cách thực hiện cài đặt và kịch bản chương trình: ................. 58
4.3.5. Kịch bản tìm kiếm: .......................................................................... 63
4.3.6. Kết quả tìm kiếm trên website ......................................................... 64
4.4. Kết luật chương 4................................................................................... 68
KẾT LUẬN ...................................................................................................... 69
TÀI LIỆU THAM KHẢO ................................................................................ 70


MỞ ĐẦU

1. Lý do chọn đề tài
Máy tính ngày nay đã được sử dụng trong hầu hết các lĩnh vực và đã góp
phần quan trọng vào việc thúc đẩy sự phát triển kinh tế, xã hội, khoa học kỹ thuật, ..
Máy tính ra đời nhằm phục vụ cho những mục đích nhất định của con người. Với tất
cả sự xử lý của máy tính để lấy thông tin hữu ích và trong quá trình xử lí đó một
vấn đề đặc biệt quan trọng là tìm kiếm thông tin với khối lượng lớn, độ chính xác
cao, thời gian nhanh nhất.
Ngày nay số lượng thông tin cũng như kích thước của hệ thống tin càng ngày
càng lớn, trong khi nhu cầu tìm kiếm của con người dùng đòi hỏi ngày càng cao và
phức tạp. Người dùng luôn luôn mong muốn có được kết quả với thời gian nhanh
nhất, đáp ứng linh hoạt, đa dạng các yêu cầu tìm kiếm, không những chính xác mà
cho ta các kết quả gần đúng, phù hợp với những từ khóa đưa vào. Để nâng cao tốc
độ tìm kiếm và đáp ứng yêu cầu người dùng. Vậy việc nghiên cứu tìm hiểu các
thuật toán đối sánh mẫu để ứng dụng trong công việc rất cần thiết.
Để tìm kiếm thông tin thì cần phải xem thông tin đó lưu trữ dưới dạng dữ
liệu nào? Dữ liệu được lưu trữ dưới nhiều dạng, song phổ biến nhất vẫn là dạng text
nên tôi chọn đề tài này cụ thể Các thuật toán đối sánh mẫu và ứng dụng tìm kiếm
trên website.
2. Mục tiêu và nội dung
Luận văn tập trung nghiên cứu các thuật toán đối sánh mẫu và ứng dụng tìm
kiếm trên website.
- Tìm hiểu về vấn đề tìm kiếm thông tin và đối sánh mẫu
- Nghiên cứu một số thuật toán đối sánh mẫu chính xác và xấp xỉ
- Cài đặt một số thuật toán đối sánh mẫu và ứng dụng xây dựng tính năng tìm
kiếm trên một website

1


3. Phạm vi nghiên cứu

Luận văn tập trung nghiên cứu các kiến thức có liên quan, các cơ sở lý
thuyết: Tổng quan về vấn đề tìm kiếm, các thuật toán tìm kiếm mẫu theo cách tiếp
cận quy hoạch động và otomat mờ; sử dụng ngôn ngữ .. cài đặt thuật toán và ứng
dụng tìm kiếm trên website />Nội dung luận văn gồm 4 chương, phần kết luận, tài liệu tham khảo và
phụ lục:
Chương 1: Tổng quan về vấn đề đối sánh mẫu
Giới thiệu chung về bài toán đối sánh mẫu (hay đối sánh mẫu), tập trung vào
trường hợp mẫu là một xâu và nhắc lại một số khái niệm cơ sở có liên quan đến
luận văn
Chương 2: Các thuật toán đối sánh mẫu chính xác
Chương này trình bày nội dung của một số thuật toán kinh điển về đối sánh
mẫu chính xác về hai thuật KMP và BM
Chương 3. Thuật toán đối sánh mẫu xấp xỉ
Chương này trình bày các kết quả của luận văn về đối sánh mẫu xấp xỉ ứng
dụng thuật toán kinh điển là thuật toán quy hoạch động để tìm dãy con chung lớn
nhất giữa hai xâu
Chương 4: Ứng dụng thuật toán đối sánh mẫu để tìm kiếm trên website

2


Chương 1: TỔNG QUAN VỀ VẤN ĐỀ ĐỐI SÁNH MẪU
1.1. Đối sánh mẫu
Đối sánh mẫu, hay so mẫu (pattern matching), là một bài toán quan trọng
được ứng dụng trong nhiều lĩnh vực khoa học và xử lý thông tin, ví dụ như: công
cụ tìm kiếm của các hệ điều hành; tìm kiếm mẫu lặp trong nén dữ liệu; tìm kiếm
thông tin trong thư viện điện tử, bách khoa toàn thư điện tử; khai phá web trên
Internet; tìm kiếm tương tự trong CSDL gen; tìm kiếm tự động các luật trong
CSDL; nhận dạng tiếng nói trong các hệ thống điều khiển bằng tiếng nói; nhận
dạng ảnh trong viễn thám, khoa học hình sự;... Nói chung, mẫu có thể ở bất kỳ

kiểu dữ liệu nào, từ văn bản đến các loại dữ liệu đa phương tiện (ảnh, video, âm
thanh,...). Mặc dù dữ liệu được ghi dưới nhiều dạng, song văn bản (text) vẫn là
dạng phổ biến nhất, vì vậy vấn đề so xâu mẫu (string pattern matching) thực sự là
một chủ đề trở nên quan trọng của lĩnh vực xử lý văn bản và được rất nhiều người
quan tâm.
Vấn đề đặt ra trong bài toán so xâu mẫu là cần phát hiện được sự xuất hiện
của xâu mẫu trong một chuỗi (xâu) các kí hiệu cho trước (gọi là xâu đích, trong
thực tế xâu đích có thể là một văn bản). Phụ thuộc vào đặc tính của mẫu, ta có thể
phân thành bốn dạng bài toán cụ thể: so đơn mẫu, so đa mẫu, đối sánh mẫu mở
rộng và so biểu thức chính qui. Dạng đơn giản nhất song phổ dụng nhất và cũng
được quan tâm nhiều nhất là bài toán so đơn mẫu, với mẫu là một xâu (điều này
được thể hiện bởi sự phong phú của các thuật toán so đơn mẫu). Khi mẫu là một
tập các từ khoá, ta có bài toán so đa mẫu. Trong bài toán đối sánh mẫu mở rộng,
mẫu không đơn giản là một dãy kí tự mà được mở rộng theo nhiều kiểu khác
nhau. Cuối cùng, dạng tổng quát nhất bao hàm cho tất cả các loại bài toán kể trên
là so biểu thức chính qui.
Một vấn đề kinh điển khác của khoa học máy tính là tìm kiếm xấp xỉ, được
đặt ra từ các ứng dụng nhận dạng tiếng nói, sinh–tin học, xử lý tín hiệu, so sánh

3


tệp. Ngày nay, việc xây dựng công cụ tìm kiếm hiệu quả, đặc biệt là tính năng tìm
kiếm xấp xỉ, trong các hệ thống trích rút văn bản đang được rất nhiều người quan
tâm. Đó là do sự tăng trưởng nhanh chóng và không ngừng của các hệ thống thông
tin, trong khi nhu cầu khai thác của người dùng ngày càng phức tạp. Người ta
mong muốn có kết quả phù hợp trả về ngay cả khi có "lỗi" trong thông tin đưa vào
hay trong cơ sở dữ liệu của hệ thống và có thể thấy ngay nội dung cần tìm trong
trang kết quả đầu tiên, với thời gian ngắn nhất. Nhu cầu tìm kiếm văn bản xấp xỉ
thể hiện rõ nhất ở các ứng dụng như: thư viện điện tử, máy tìm kiếm (search

engine) trên mạng. Cho đến nay đã có rất nhiều máy tìm kiếm trên Internet,
www.bing.com, Yahoo (www.yahoo.com),

Netscape (www.netscape.com),...,

trong đó được yêu thích nhất là Google (www.google.com).
Còn trong các hệ quản trị cơ sở dữ liệu, khả năng tìm kiếm thông tin gần
đúng duy nhất của truy vấn SQL là dùng toán tử “like”, cho phép tìm kiếm bản
ghi phù hợp với thông tin đưa vào theo một khuôn dạng khá “cứng nhắc”, xâu
mẫu chỉ chấp nhận hai loại kí tự thay thế cho một kí tự và một xâu kí tự. Vậy việc
tiếp tục nghiên cứu về các giải pháp tìm kiếm xấp xỉ là cần thiết.
1.2. Bài toán đối sánh mẫu và tình hình nghiên cứu hiện nay
Đối sánh mẫu, hay so mẫu (pattern matching), là bài toán tìm sự xuất hiện
của một mẫu (pattern) với một số đặc tính nào đó trong chuỗi các ký hiệu cho trước.
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 gene,... Dạng đơn giản nhất của
bài toán đối sánh mẫu 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ực ra, đây là một trong những bài toán kinh điển nhất và phổ dụng nhất
của khoa học máy tính, bởi hầu hết các ứng dụng đều đòi hỏi có sự đối sánh mẫu ở
một dạng nào đó. Các phương pháp đối sánh mẫu chính là cốt lõi trong rất nhiều
loại phần mềm khác nhau, như: các tiện ích (search) của hệ điều hành Windows, các
hệ thống trích rút dữ liệu, trình soạn thảo vãn bản, máy tìm kiếm (search engine)
4


trên Internet, phân tích và tìm kiếm chuỗi gene trong sinh vật học, xử lý ngôn ngữ
tự nhiên, tìm kiếm text trong các hệ cơ sở dữ liệu, ....
Thời gian gần đây, vấn đề đối sánh mẫu 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, đó là vì 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ế (wild card), các khoảng trống và các biểu thức chính
qui. 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ừ đó nảy sinh một
hướng nghiên cứu hết sức thú vị là "so xâu mẫu xấp xỉ" (approximate string
matching) hiện nay đang được quan tâm rất nhiều và những dạng phức tạp khác của
bài toán đối sánh mẫu là đối sánh mẫu mở rộng, so đa mẫu và so biểu thức chính
qui.
Các kết quả đạt được hiện nay về đối sánh mẫu chủ yếu tập trung vào trường
hợp đơn giản nhất là tìm ra một xâu mẫu trong văn bản, còn với những dạng phức
tạp khác, cho đến nay vẫn chưa có nhiều công trình được công bố. Tuy nhiên, ta có
thể phân loại các thuật toán đối sánh mẫu theo hai hướng. Thứ nhất là các thuật toán
trực tuyến (on–line), 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à các thuật
toán off–line, sử dụng 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 bản (lập chỉ mục). Mặc dù đã có những thuật toán trực tuyến nhanh,
song với nhiều ứng dụng 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ả. Khi đó, giải pháp
được lựa chọn là sử dụng các thuật toán off–line. Tìm kiếm trên chỉ mục thực ra
cũng dựa trên tìm kiếm on–line.

5


1.3. Các dạng của bài toán đối sánh mẫu
Dựa trên đặc tính của mẫu, bài toán đối sánh mẫu được phân loại như sau: so
đơn mẫu, so đa mẫu, đối sánh mẫu mở rộng, so biểu thức chính qui theo hai hướng
chính xác và xấp xỉ. Nội dung của luận văn tập trung giải quyết bài toán so đơn

mẫu, chính xác và xấp xỉ, mỗi khi nhắc đến đối sánh mẫu sẽ ngầm hiểu mẫu là một
xâu kí tự.
1.3.1. So đơn mẫu
Bài toán 1.1. Cho xâu mẫu P độ dài m, P = P1P2....Pm, và xâu S độ dài n, S =
S1S2...Sn (S thường dài, là một văn bản) trên cùng bảng chữ A. Tìm tất cả các xuất
hiện của xâu P trong S.
Trong các thuật toán đối sánh mẫu thường sử dụng các khái niệm: khúc đầu,
khúc cuối, khúc con hay xâu con của một xâu, được định nghĩa như sau. Cho 3 xâu
x, y, z. Ta nói x là khúc đầu (prefix) của xâu xy, là khúc cuối (suffix) của xâu yx và
là khúc con hay xâu con (factor) của xâu yxz.
Thuật toán đơn giản nhất là Brute–Force, cho phép tìm được tất cả các xuất
hiện của mẫu trong thời gian cỡ O(m.n). Cho đến nay, rất nhiều thuật toán so đơn
mẫu hiệu quả hơn được đưa ra, trong đó kinh điển nhất là KMP (do D.E. Knuth,
J.H. Morris và V.R. Pratt đưa ra năm 1976), BM (do R.S. Boyer và J.S.Moore đưa
ra năm 1976) và Karp–Rabin (do R.M.Karp và M.O. Rabin đưa ra năm 1980).
Dựa vào cách duyệt tìm mẫu trong văn bản, ta có thể xem như có ba tiếp cận
chung cho các thuật toán đối sánh mẫu.
Trong tiếp cận thứ nhất, lần lượt từng kí tự của văn bản S được đọc và tại
mỗi vị trí, sau khi đối sánh với một kí tự của mẫu sẽ cập nhật sự thay đổi để nhận ra
một khả năng xuất hiện mẫu. Hai thuật toán điển hình theo tiếp cận này là KMP và
Shift–Or.
Tiếp cận thứ hai sử dụng một "cửa sổ trượt" trên xâu S và đối sánh mẫu
trong cửa sổ này. Quá trình duyệt sẽ được bắt từ phải sang trái và tại mỗi vị trí trong
6


cửa sổ, ta cần tìm một khúc cuối của cửa sổ mà cũng là khúc cuối của xâu mẫu P.
Thuật toán BM là một điển hình cho tiếp cận này và một biến thể đơn giản hoá của
nó là thuật toán Horspool.
Tiếp cận thứ ba mới xuất hiện gần đây đã cho ra đời các thuật toán hiệu quả

về thực hành đối với mẫu P đủ dài. Ý tưởng chung của tiếp cận này cũng tương tự
như tiếp cận thứ hai, song tại mỗi thời điểm sẽ tìm khúc cuối dài nhất của cửa sổ mà
là một khúc con của mẫu. Thuật toán đầu tiên theo tiếp cận này là BDM và khi P đủ
ngắn, một phiên bản đơn giản hơn, hiệu quả hơn là thuật toán BNDM. Với những
mẫu dài, thuật toán BOM được đánh giá là nhanh nhất
Ngoài ba tiếp cận trên cũng có một vài thuật thoán khác, chẳng hạn các
phương pháp dựa trên hàm băm, song chúng không hiệu quả lắm nên ít phổ dụng.
1.3.2. So đa mẫu
Bài toán 1.2. Cho một mẫu P gồm tập các từ khoá {w1, w2,....,wk} và xâu S
= S1S2....Sn trên cùng bảng chữ A. Tìm sự xuất hiện của các từ khoá wi trong S.
Một cách đơn giản để tìm nhiều từ khóa trong một xâu đích là sử dụng thuật
toán so đơn mẫu nhanh nhất đối với mỗi từ khoá. Rõ ràng phương pháp này không
hiệu quả khi số lượng từ khoá lớn.
Cả ba tiếp cận tìm đơn mẫu ở trên đều được mở rộng cho tìm đa mẫu. Hai
điển hình theo tiếp cận thứ nhất là thuật toán nổi tiếng Aho–Corasick, có tốc độ cải
thiện đáng kể khi số từ khoá nhiều và thuật toán Multiple Shift–And, được sử dụng
hiệu quả khi tổng độ dài của mẫu P rất nhỏ.
Theo tiếp cận thứ hai có các thuật toán Commentz–Walter , Set Horspool,
Wu–Manber,… Thuật toán Commemtz–Walter là sự kết hợp ý tưởng của
Boyer– Moore và Aho–Corasick, còn Set Horspool là một mở rộng của thuật toán
Horspool. Hiện nay, thuật toán Wu–Manber được đánh giá là nhanh trong thực
hành, trong đó có sự pha trộn giữa tiếp cận tìm kiếm hậu tố (suffix search approach)
và một kiểu hàm băm.
7


Một số thuật toán theo tiếp cận thứ ba được mở rộng từ thuật toán BOM,
SBOM và Shift–Or BNDM,...
1.3.3. Đối sánh mẫu mở rộng
Trong nhiều ứng dụng, xâu mẫu được đưa vào để tìm kiếm không chỉ đơn

giản là dãy các kí tự. Sau đây là một số mở rộng thường thấy.
Mở rộng đơn giản nhất cho phép mẫu là một dãy gồm các lớp hay các tập kí
tự, giả sử được đánh số thứ tự là 1, 2,..., m. Khi đó, bất kỳ kí tự nào trong lớp thứ i
cũng có thể được xem là kí tự thứ i của mẫu.
Mở rộng thứ hai là giới hạn khoảng trên độ dài. Theo cách này, một số vị trí
trên mẫu được ấn định để khớp với một dãy văn bản nào đó có độ dài nằm trong
một khoảng xác định trước. Kiểu mở rộng như vậy thường được sử dụng trong các
ứng dụng sinh–tin học, chẳng hạn tìm mẫu PROSITE.
Theo hướng mở rộng thứ ba, mẫu bao gồm cả các kí tự tuỳ chọn và kí tự lặp.
Trong một xuất hiện của mẫu trên văn bản, các kí tự tuỳ chọn có thể có hoặc không
có, còn các kí tự lặp có thể có một hoặc lặp lại nhiều lần.
Các vấn đề nẩy sinh từ ba hướng mở rộng trên và những kết hợp từ ba hướng
này có thể được giải quyết bằng cách điều chỉnh lại thuật toán Shift–Or và BNDM,
trong đó có sử dụng cơ chế song song bit để mô phỏng otomat đa định, cho phép
tìm tất cả các xuất hiện của mẫu.
1.3.4. So biểu thức chính qui
Biểu thức chính qui cung cấp một phương pháp mạnh để biểu diễn một tập
các mẫu tìm kiếm, bao gồm tất cả các loại bài toán kể trên. Một biểu thức chính qui
được xác định từ các xâu đơn giản và phép ghép, phép hợp, phép lặp của các biểu
thức chính qui con.
Biểu thức chính qui, tập chính qui, otomat hữu hạn là những khái niệm chính
trong lý thuyết otomat và ngôn ngữ hình thức.

8


Định nghĩa 1.1. Biểu thức chính qui và các xâu khớp với nó được định
nghĩa một cách đệ qui theo độ phức tạp tăng dần của biểu thức như sau:
- Các kí tự sau là các kí tự đặc biệt (metacharacter): | ( ) *
- Với a không là kí tự đặc biệt, a là một biểu thức chính qui khớp với xâu a.

- Với r1 và r2 là hai biểu thức chính qui, khi đó (r1|r2) là một biểu thức chính
qui khớp với xâu r1 hoặc r2.
- Với r1 và r2 là hai biểu thức chính qui, khi đó (r1)(r2) là một biểu thức chính
qui khớp với xâu bất kỳ có dạng xy, mà r1 khớp x và r2 khớp y.
- Với r là một biểu thức chính qui, khi đó (r)* là một biểu thức chính qui khớp
với một xâu bất kỳ có dạng x1x2...xn, n ≥ 0, trong đó r khớp với các xi, 1 ≤ i ≤ n.
Đặc biệt, (r)* khớp với xâu rỗng ε.
- Với r là một biểu thức chính qui khớp với xâu x, khi đó (r) cũng là một biểu
thức chính qui khớp với xâu x.
Qui ước thứ tự ưu tiên của các phép toán được viết theo chiều giảm dần như
sau: *, phép ghép, và |.
Tập chính qui là tập tất cả các xâu khớp với một biểu thức chính qui.
Ví dụ: với a,b,c,d,e, là các chữ cái, biểu thức chính qui:
(a|b)(a|c|d)(a)*e

khớp với các xâu: aae, acae, acaae, acaaae,...., baae,

bdaae,.....
Bài toán so biểu thức chính qui phát biểu như sau:
Bài toán 1.3. Cho một mẫu gồm một biểu thức chính qui r và xâu S =
S1S2...Sn.
Cho biết r có khớp với một khúc con của xâu S hay không. Quá trình so biểu
thức chính qui trải qua hai giai đoạn xử lý:

9


Giai
- đoạn 1: Phân tích để biểu diễn biểu thức chính qui dưới dạng cấu
trúc cây dễ duyệt hơn.

- Giai đoạn 2: Xây dựng một otomat từ các thông tin trên mẫu. Hai hướng
chính hiện nay là sử dụng otomat đơn định hữu hạn (DFA) và otomat đa
định hữu hạn (NFA).
Otomat đa định hữu hạn là một máy trạng thái trong đó một số trạng thái sẽ
thay đổi khi ta đọc các kí tự văn bản. Máy đoán nhận sự xuất hiện của mẫu khi nhận
được trạng thái kết thúc. Hai thuật toán hay để xây dựng được NFA là của
Thompson và Glushkov. Ta có thể dùng trực tiếp NFA này để tìm kiếm song rất
chậm vì tại một thời điểm bất kỳ có nhiều trạng thái được kích hoạt. Tuy nhiên, một
NFA có thể được chuyển thành một DFA tương đương mà chỉ có một trạng thái
được kích hoạt tại một thời điểm. DFA rất thích hợp cho tìm kiếm văn bản và được
sử dụng trong một thuật toán kinh điển nhất về so biểu thức chính qui . Nhưng vấn
đề chính là kích cỡ của DFA tăng theo hàm mũ của kích cỡ NFA tương ứng, do đó
tiếp cận này chỉ phù hợp khi mẫu nhỏ. Với mẫu dài hơn, một tiếp cận lai tạo là xây
dựng một NFA của các DFA nhỏ sẽ đem lại hiệu quả đáng kể.
Một xu hướng khác là tái tạo các NFA bằng phương pháp song song bit thay
vì chuyển chúng sang các DFA. Hai kết quả mới theo hướng này là thuật toán
BPThompson và BPGlushkov, trong đó BPGlushkov được ưa thích hơn.
Một tiếp cận mới khác cho phép nhảy qua các kí tự trong văn bản, chẳng hạn
như thuật toán MultiStringRE. Trong thuật toán này, độ dài tối thiểu lmin của một
xuất hiện của biểu thức chính qui được tính toán trước, sau đó tìm cách xác định tất
cả các xâu là khúc đầu độ dài lmin của tất cả các xuất hiện, quá trình tiếp theo được
thực hiện như so đa mẫu đối với tất cả các xâu này. Mỗi khi tìm được một khúc đầu
như vậy trên xâu đích S ta sẽ cố gắng tiếp để tìm ra một xuất hiện. Mở rộng từ thuật
toán MultiStringRE ta có thuật toán MultiFactRE với ý tưởng chung là chọn ra tập
các xâu độ dài lmin sao cho có một số xâu chắc chắn sẽ có mặt trong một xuất hiện

10


bất kỳ. Một tiếp cận khác là RegularBNDM, trong đó tái tạo lại otomat đa định hữu

hạn của Glushkov.
1.4. Đối sánh mẫu xấp xỉ
1.4.1. Phát biểu bài toán
Đối sánh mẫu xấp xỉ là bài toán tìm sự xuất hiện của một mẫu trong văn bản,
trong đó sự “khớp” giữa mẫu và xuất hiện của nó có thể chấp nhận k “lỗi” (k là một
giới hạn cho trước). Các “lỗi” thường gặp là: lỗi đánh máy hay lỗi chính tả trong hệ
thống trích rút thông tin, những sự biến đổi chuỗi gen hay các lỗi đo đạc trong sinh–
tin học và những lỗi truyền dữ liệu trong các hệ thống xử lý tín hiệu,...Vì trong các
hệ thống tin học khó có thể tránh được các “lỗi” nên vấn đề tìm kiếm xấp xỉ càng
trở nên quan trọng.
Đặc biệt, khi sử dụng các hệ thống trích rút thông tin, người dùng ngày nay
còn đòi hỏi cả những kết quả gần giống hoặc vẫn có được kết quả phù hợp trả về
nếu có sự sai sót trong mẫu hay văn bản. Trong trường hợp này “lỗi” có thể do
nhiều nguyên nhân khác nhau, chẳng hạn như:
- Câu truy vấn sai chính tả, xâu tìm kiếm không đúng cú pháp so với văn
bản.
- Lỗi in ấn, lỗi chính tả, xâu tìm kiếm không đúng cú pháp so với văn bản.
- Sự biến đổi hình thái từ trong một số ngôn ngữ.
- Dữ liệu đưa vào cơ sở dữ liệu không chính xác, thường xảy ra với tên
người, địa chỉ.
- Thông tin người tìm đưa vào không chính xác, chỉ “đại loại”.
Vì vậy, một vấn đề đặt ra cho các hệ thống trích rút thông tin ngày nay là đáp
ứng được nhu cầu tìm kiếm “mềm dẻo” này của người sử dụng.
Bài toán đối sánh mẫu xấp xỉ tổng quát được phát biểu như sau:

11


Bài toán 1.4. Cho văn bản T độ dài n và xâu mẫu P độ dài m trên cùng một
bảng chữ A. Tìm các vị trí trong văn bản khớp với mẫu, cho phép nhiều nhất k lỗi.

1.4.2. Độ tương tự giữa hai xâu
Để giải bài toán đối sánh mẫu xấp xỉ, ta cần sử dụng một hàm khoảng cách
(distance function) đo độ tương tự giữa hai xâu. Tương tự ở đây được hiểu là giữa
hai xâu kí tự có một vài sai khác ở những lỗi có thể nhận ra bằng mắt thường, không
xét về khía cạnh ngữ nghĩa (OCR – optical character recognition errors), chẳng hạn
“Việt Nam” và “Việt Nan” hay “Việtt Nan”,.... Hiện nay, các kỹ thuật phổ biến
được sử dụng để đo độ tương tự giữa hai xâu là: xâu con chung dài nhất, dãy con
chung dài nhất, khoảng cách soạn thảo. Nhiều ứng dụng sử dụng các biến thể của
các hàm khoảng cách này.
1) Khoảng cách soạn thảo (Edit Distance): Đối với hai xâu x, y khoảng cách
soạn thảo EditDistance(x,y) là số nhỏ nhất các phép sửa đổi về mặt soạn thảo để
biến đổi xâu x thành xâu y (việc tính toán khá phức tạp). Khoảng cách soạn thảo
càng lớn thì sự khác nhau giữa hai xâu càng nhiều (hay độ tương tự càng nhỏ) và
ngược lại. Khoảng cách soạn thảo thường dùng để kiểm tra chính tả hay nhận dạng
tiếng nói. Tuỳ thuộc vào qui ước về các phép sửa đổi mà ta nhận được các loại
khoảng cách soạn thảo khác nhau, chẳng hạn như:
+ Khoảng cách Hamming: phép sửa đổi chỉ là phép thay thế kí tự.
+ Khoảng cách Levenshtein: phép sửa đổi bao gồm: chèn, xoá và thay thế kí
tự.
+ Khoảng cách Damerau: phép sửa đổi bao gồm: chèn, xoá, thay thế và hoán
vị liền kề của các kí tự.
2) Xâu con chung dài nhất (hay khúc con chung dài nhất): Một xâu w là xâu
con hay khúc con (substring or factor) của xâu x nếu x = uwv (u, v có thể rỗng).
Xâu w là khúc con chung của hai xâu x, y nếu w đồng thời là khúc con của x và y.

12


Khúc con chung dài nhất của hai xâu x và y, kí hiệu LCF(x, y), là một khúc con có
độ dài lớn nhất.

3) Dãy con chung dài nhất: Một dãy con của xâu x là một dãy các kí tự có
được bằng cách xoá đi không, một hoặc nhiều kí tự từ x. Dãy con chung của hai xâu
x, y là một dãy con của cả hai xâu x và y. Dãy con chung của x và y có độ dài lớn
nhất được gọi là dãy con chung dài nhất, kí hiệu là LCS(x, y). Độ dài dãy con chung
dài nhất của hai xâu x, y có thể được tính toán dựa trên khoảng cách Levenshtein
giữa x và y bởi công thức sau:
LevDistance(x,y) = m + n – 2length(LCS(x, y)).
1.4.3. Các tiếp cận giải bài toán đối sánh mẫu xấp xỉ
Các thuật toán đối sánh mẫu xấp xỉ hiện nay ra thành bốn loại.
1) Các thuật toán dựa trên quy hoạch động: Đây là tiếp cận xuất hiện đầu tiên
và đã được dùng để tính khoảng cách soạn thảo.
2) Các thuật toán sử dụng otomat tìm kiếm: Quá trình tìm kiếm sử dụng một
otomat đa định hữu hạn mà được xây dựng từ trước dựa trên thông tin của mẫu P và
số lỗi k. Đây là hướng tiếp cận được quan tâm nhiều vì có độ phức tạp thời gian
trong trường hợp xấu nhất là O(n) (tuy nhiên đòi hỏi độ phức tạp không gian lớn
hơn).
3) Các thuật toán sử dụng cơ chế song song bit (bit–parallelism): Cách tiếp
cận này cho ra nhiều thuật toán hiệu quả nhờ khai thác bản chất song song của các
phép toán bit trên một từ máy trong bộ vi xử lý. Nói chung song song bit được dùng
để song song hoá các kỹ thuật khác, như tạo otomat đa định, lập ma trận quy hoạch
động. Nói chung kỹ thuật này làm việc khá tốt với mẫu ngắn và tăng tốc đáng kể so
với những cài đặt không tận dụng khả năng song song của thanh ghi. Chỉ ra một số
thuật toán dùng cơ chế song song bit là BPR và BPD để tái tạo một otomat đa định
hữu hạn và BPM để tái tạo các thuật toán quy hoạch động.

13


4) Các thuật toán sử dụng cơ chế lọc: Ý tưởng của các thuật toán loại này là
cố gắng thu hẹp không gian tìm kiếm của bài toán bằng cách loại đi các văn bản mà

chắc chắn không chứa một đoạn nào “khớp” với mẫu. Nói chung, mục tiêu này đạt
được bằng cách áp dụng kỹ thuật đối sánh mẫu chính xác cho các mẩu nhỏ của mẫu.
Hai thuật toán hiệu quả nhất theo tiếp cận này là PEX và ABNDM. Trong PEX,
mẫu được chia thành k + 1 đoạn và sắp xếp để tìm kiếm đa mẫu trên các đoạn này,
vì ít nhất một đoạn phải có mặt trong một xuất hiện bất kỳ. Thuật toán ABNDM là
một mở rộng của thuật toán BNDM, trong đó tái tạo otomat đa định hữu hạn cho
tìm kiếm xấp xỉ. Nói chung, các thuật toán sử dụng cơ chế lọc làm việc tốt hơn khi
tỷ lệ k/m nhỏ. Đối với trường hợp tỷ lệ k/m lớn, các thuật toán sử dụng cơ chế song
song bit được đánh giá tốt hơn.
Đối với bài toán so đa mẫu cũng đã có một số phát triển theo hướng xấp xỉ,
ví dụ như: Thuật toán MultiHash chỉ làm việc với k = 1 song rất hiệu quả khi số
lượng mẫu lớn; MultiPEX là thuật toán hiệu quả nhất khi tỷ lệ k/m nhỏ; MultiBP
xây dựng các NFA của tất cả các mẫu và sử dụng kết quả này làm bộ lọc, đây là lựa
chọn tốt nhất cho tỷ lệ k/m cỡ trung bình.
Một vài tiếp cận xấp xỉ cho bài toán đối sánh mẫu mở rộng và so biểu thức
chính qui đã được đưa ra như: thuật toán dựa trên quy hoạch động cho biểu thức
chính qui; thuật toán sử dụng một otomat đa định hữu hạn của các otomat đơn định
hữu hạn cho phép có “lỗi”, thuật toán song song bit dựa trên phương pháp của
BPR,...

14


Chương 2. CÁC THUẬT TOÁN ĐỐI SÁNH MẪU CHÍNH XÁC
2.1. Thuật toán KMP ( Knuth- Morris- Pratt)
Thuật toán KMP được trình bày chi tiết như sau:
Duyệt từ trái sang phải trên S và P, mỗi lần một ký tự. Gọi con trỏ trên P là i,
con trỏ trên S là j. Giả sử đã xuất hiện khúc đầu độ dài i - 1 của mẫu P và việc
khớp mẫu thất bại tại vị trí j trên S, có nghĩa:
P1P2…Pi -1 ≡ Sj - i + 1Sj - i + 2…S j - 1 và Pi ≠ Sj

Khi đó cần phải bắt đầu đối sánh mẫu từ vị trí j - h +1 trên S (trường hợp xấu
nhất h = i - 1 trong thuật toán Brute - Force). Nếu tồn tại h > 0 sao cho h - 1 ký tự
đầu của mẫu khớp với h - 1 ký tự cuối của đoạn S(j - 1) hay có nghĩa đã khớp với
h - 1 ký tự cuối của P(i - 1) thì ta có thể bỏ qua h - 1 phép so sánh và tiếp tục so
sánh 2 ký tự Ph và Sj (hình 2.1). Do h phụ thuộc vào i nên ký hiệu h = next[i], i =
1,…,m.

Hình 2.1. Ý nghĩa của mảng next

Nếu Sj ≠ Ph thì phải tiếp tục lùi con trỏ trên mẫu. Để khắc phục nhược điểm
do tình huống này gây ra, cần cố gắng tìm h sao cho Ph có nhiều khả năng bằng Sj.
Vì Sj ≠ Pi nên cần tìm h thoả mãn Ph ≠ Pi .

15


Trong KMP, khi i > m ta được một xuất hiện của mẫu bắt đầu từ vị trí j - m
trên S. Để tìm xuất hiện tiếp theo, nếu bắt đầu đối sánh từ P1 và Sj thì có thể bỏ sót
mẫu khi có mẫu xuất hiện lồng nhau. Vì vậy, khi con trỏ trên S dừng ở vị trí j, cần
trượt mẫu đi một số vị trí sao cho h - 1 ký tự đầu của mẫu khớp với h - 1 ký tự
cuối của S(j - 1) hay chính là khớp với h - 1 ký tự cuối của P(m). Do đó cần mở
rộng mảng next với i = m + 1. (Hình 2.2).

Hình 2.2. Ý nghĩa của mảng next tại vị trí m + 1

Như vậy, với mỗi vị trí i trên P, i = 1..m + 1, cần xác định next [i] thoả mãn:
+ next[i] là số h lớn nhất sao cho h - 1 ký tự đầu của mẫu khớp với h - 1 ký tự
cuối của P(i- 1).
+ Pi ≠ Pnext [i]
(để có next[m + 1], tưởng tượng như đã bổ sung thêm ký tự # vào cuối P, với #

là một ký tự không xuất hiện trong P).
Ví dụ 2.1. Với P = aababaab ta có bảng next như sau:
i

1

2

3

4

5

6

7

8

9

next[i]

0

0

2


0

2

0

0

2

4

16


Ví dụ 2.2: Với P=abbaaba ta có bảng next như sau:
i

1

2

3

4

5

6


7

8

next[i]

0

1

1

0

2

1

3

2

Thuật toán 2.1. Xây dựng mảng next
procedure Initnext();
var i, j: Integer;
begin
i: = 1; j: = next [1]: = 0;
while i< = m do
begin
while j > 0 and Pi ≠ P j do j: = next [j];

i: = i + 1; j: = j + 1;
if ( i < = m) and (Pi = P j) then next [i] := next [j]
else next [i] : = j;
end;
end;
Thuật toán 2.2. KMP tìm nhiều lần lặp mẫu proedure KMP();
{Tìm mọi vị trí xuất hiện xâu mẫu P độ dài m trong xâu đích S độ dài n, đồng thời
thống kê tần suất xuất hiện mẫu}
var i, j: Integer;
counter: Integer;
Begin
Initnext ();

17


×