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

Nghiên cứu phương pháp so sánh xâu xấp xỉ và ứng dụng

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 (1.21 MB, 60 trang )

i

LỜI CAM ĐOAN
Tôi xin cam đoan số liệu và kết quả nghiên cứu trong luận văn này là trung
thực và chưa được sử dụng để bảo vệ học hàm, học vị nào.
Tôi xin cam đoan: Mọi sự giúp đỡ cho việc thực hiện luận văn này đã được
cám ơn, các thông tin trích dẫn trong luận văn này đều đã được chỉ rõ nguồn gốc.
Thái Nguyên, ngày 18 tháng 8 năm 2015
TÁC GIẢ LUẬN VĂN

Nguyễn Thanh Hùng


ii

LỜI CẢM ƠN

Trong thời gian nghiên cứu và thực hiện luận văn này, em đã may mắn được
các thầy cô chỉ bảo, dìu dắt và được gia đình, bạn bè quan tâm, động viên. Em xin
bày tỏ lời cảm ơn sâu sắc nhất tới tất cả các tập thể, cá nhân đã tạo điều kiện giúp
đỡ em trong suốt quá trình thực hiện nghiên cứu luận văn này.
Trước hết em xin trân trọng cảm ơn Ban giám hiệu trường Đại học Công
nghệ thông tin và truyền thông, Phòng Đào tạo và Khoa Sau đại học của nhà
trường cùng các thầy cô giáo, những người đã trang bị kiến thức cho em trong
suốt quá trình học tập.
Với lòng biết ơn chân thành và sâu sắc nhất, em xin trân trọng cảm ơn thầy
giáo – PGS.TS Nguyễn Trí Thành, giảng viên khoa Công nghệ thông tin – Trường
Đại học Công nghệ - Đại học Quốc gia Hà Nội; người thầy đã trực tiếp chỉ bảo,
hướng dẫn khoa học và giúp đỡ em trong suốt quá trình nghiên cứu, hoàn thành
luận văn này.
Xin chân thành cảm ơn tất cả các bạn bè, đồng nghiệp đã động viên, giúp đỡ


nhiệt tình và đóng góp nhiều ý kiến quý báu để em hoàn thành luận văn này.
Do thời gian nghiên cứu có hạn, luận văn của em chắc hẳn không thể tránh
khỏi những sơ suất, thiếu sót, em rất mong nhận được sự đóng góp của các thầy cô
giáo cùng toàn thể bạn đọc.
Xin trân trọng cảm ơn!
Thái Nguyên, ngày 18 tháng 8 năm 2015
TÁC GIẢ LUẬN VĂN

Nguyễn Thanh Hùng


iii

MỤC LỤC
MỞ ĐẦU................................................................................................................................................. 1
CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ XẤP XỈ .......................................................................... 4
1.1 Khái niệm xấp xỉ ........................................................................................................ 4
1.1.1 Đối sánh chuỗi.................................................................................................................. 4
1.1.2 Đối sánh chính xác........................................................................................................... 5
1.2.3 Đối sánh chuỗi xấp xỉ....................................................................................................... 6
1.2 Nội dung và ý nghĩa ứng dụng................................................................................. 10
1.2.1 Nội dung .......................................................................................................................... 10
1.2.2 Ý nghĩa ứng dụng ........................................................................................................... 12
1.3 Kết luận chương ....................................................................................................... 12
CHƯƠNG 2: TÌM HIỂU MỘT SỐ THUẬT TOÁN .................................................................... 14
2.1 Thuật toán của Galil-Park ........................................................................................ 14
2.2 Thuật toán của Ukkonen-Wood và một số cải tiến ................................................. 18
2.3 Thuật toán của Boyer-Moore ................................................................................... 21
2.4 Thuật toán đối sánh xâu vòng tròn gần đúng .......................................................... 29
2.5 Kết luận chương ....................................................................................................... 36

CHƯƠNG 3: THỰC NGHIỆM VÀ ỨNG DỤNG ....................................................................... 38
3.1 Chương trình ứng dụng asmf-master....................................................................... 38
3.1.1 Giới thiệu chung ............................................................................................................. 38
3.1.2 Các hàm asmf-master .................................................................................................... 39
3.1.3 Thiết lập môi trường cài đặt và chạy ứng dụng .......................................................... 40
3.1.4 Thực nghiệm với chương trình asmf-master ............................................................... 41
3.2 Thực nghiệm, ứng dụng trong bài toán sửa lỗi chính tả ......................................... 43
3.2.1 Giới thiệu về ứng dụng sửa lỗi chính tả ....................................................................... 43
3.2.2 Thực nghiệm ứng dụng.................................................................................................. 46
3.3 Thực nghiệm, ứng dụng trong bài toán gợi ý truy vấn từ điển ............................... 47
3.3.1 Giới thiệu về ứng dụng gợi ý truy vấn từ điển ............................................................. 47
3.3.2 Thực nghiệm ứng dụng.................................................................................................. 48
3.4 Nhận xét.................................................................................................................... 51
3.5 Kết luận chương ....................................................................................................... 52
KẾT LUẬN........................................................................................................................................... 54
TÀI LIỆU THAM KHẢO.................................................................................................................. 55


iv

DANH MỤC HÌNH VẼ

Hình 1.1: Cây hậu tố cho S= "xabxac" ......................................................... 10
Hình 1.2: Hoạt động cơ bản của thuật toán Boyer-Moore ............................. 11
Hình 2.1: cây hậu tố cho S= "xabxac" .......................................................... 18
Hình 2.2: Cây hậu tố cho chuỗi "xabxac$" ................................................... 18
Hình 2.3: Cây bao hàm cho chuỗi "xabxa$" ................................................. 19
Hình 2.4: Cây bao chùm cho chuỗi axabxb .................................................. 20
Hình 2.5 : Cây biểu diễn hậu tố cho chuỗi .................................................... 21
Hình 3.1: Giao diện ứng dụng sửa lỗi chính tả.............................................. 45

Hình 3.2: Sửa từ cho từ sai ........................................................................... 46
Hình 3.3: Thực nghiệm với từ khóa .............................................................. 46
Hình 3.4: Thực nghiệm với từ "Cổng" .......................................................... 47
Hình 3.5: Thực nghiệm với từ "Tỏa"……………………………………….. 47
Hình 3.6: Hệ thống gợi ý từ điển..………………………………………….. 47
Hình 3.7: Thực nghiệm hệ thống gợi ý với từ khóa "Gợi" ............................ 49
Hình 3.8: Thực nghiệm với từ khóa "Tổng" ................................................. 50
Hình 3.9: thực nghiệm với từ khóa "Trường" ............................................... 50
Hình 3.10: Thực nghiệm với từ khóa "Việt" ................................................. 51


1

MỞ ĐẦU

1. Lý do chọn đề tài
Kiểu dữ liệu văn bản (Text) là dạng trình bày thông tin gần gũi nhất với con
người, vì vậy, đây cũng là dạng trình bày thông tin số rất phổ biến. Chính vì lẽ đó,
bài toán tìm kiếm văn bản (text searching) là một trong những bài toán quan trọng
nhất trong hoạt động tìm kiếm thông tin của con người. Trong thời đại ngày nay,
văn bản số hóa đang tăng trưởng "bùng nổ" trong các cơ sở dữ liệu trên Internet,
dung lượng tăng gấp đôi sau mỗi chu kỳ 18 tháng. Trong bối cảnh đó, vấn đề tìm
kiếm văn bản một cách tự động đã rất quan trọng thì lại ngày càng quan trọng hơn.
Dạng phổ biến nhất của bài toán tìm kiếm văn bản là: Cho trước nguồn tìm
kiếm là một tập D các văn bản (hoặc là cơ sở dữ liệu văn bản, hoặc là tập các văn
bản trên Internet). Cho một câu hỏi dạng văn bản q (thường là một từ, một xâu văn
bản ngắn), hãy tìm tất cả các văn bản thuộc D mà có chứa q. Trong nhiều trường
hợp (chẳng hạn, tìm kiếm thông qua máy tìm kiếm) thì q còn được gọi là "truy vấn"
và bài toán còn có tên gọi là "tìm kiếm theo truy vấn". Để tìm được các văn bản có
chứa văn bản truy vấn q, hệ thống tìm kiếm cần phải kiểm tra văn bản truy vấn q có

là một xâu con của các văn bản thuộc tập D hay không (sánh mẫu) và đưa ra các
văn đáp đáp ứng. Trong nhiều trường hợp, bài toán còn đòi hỏi tìm tất cả các vị trí
của các xâu con trong văn bản trùng với q. Đồng thời, điều kiện tìm kiếm có thể
được làm "xấp xỉ" theo nghĩa văn bản kết quả có thể không cần chứa q (không cần
có một xâu con của văn bản trùng một cách hoàn toàn chính xác với q) mà chỉ cần
"liên quan" tới q (có xâu con trong văn bản "xấp xỉ" q). Có thể thấy, các máy tìm
kiếm sử dụng cả cơ chế tìm kiếm xấp xỉ khi mà văn bản kết quả tìm kiếm không
chứa hoàn toàn chính xác văn bản truy vấn [1].
Thời gian gần đây, bài toán 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 tìm kiếm thông tin và
các hệ thống sinh- tin học. Một lý do nữa, con người ngày nay không chỉ đối mặt


2

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 quy. Sự “tìm
thấy” không đơn giản là xuất hiện chính xác mẫu trong văn bản mà còn cho phép
“một xấp xỉ” 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 là "sánh mẫu
xấp xỉ / tìm kiếm xấp xỉ” (approximate matching / approximate searching) [2].
So sánh thực nghiệm của thời gian chạy của thuật toán xấp xỉ chuỗi kết hợp
cho k vấn đề khác nhau được trình bày. Với một chuỗi mô hình, một chuỗi văn bản,
và một số nguyên k, nhiệm vụ là để tìm tất cả các lần xuất hiện gần đúng của mô
hình trong văn bản với ít nhất k khác biệt (chèn thêm, xóa, thay đổi). Xem xét bảy
thuật toán dựa trên phương pháp tiếp cận khác nhau bao gồm lập trình năng động,
Boyer-Moore chuỗi kết hợp, hậu tố bị tự động, và sự phân bố của các nhân vật. Nó
chỉ ra rằng không ai trong số các thuật toán là tốt nhất cho tất cả các giá trị của các
thông số vấn đề, và sự khác biệt tốc độ giữa các phương pháp có thể là đáng kể.

Xuất phát từ những yêu cầu và lý do trên, em lựa chọn đề tài luận văn là:
"Nghiên cứu phương pháp so sánh xâu xấp xỉ và ứng dụng".
Luận văn này định hướng nghiên cứu một số thuật toán so sánh mẫu xâu xấp
xỉ, tập trung vào một số thuật toán của Galil Park, Ukkonen Wood Boyer-Moore,
thuật toán xâu vòng tròn gần đúng với độ phức tạp là hàm tuyến tính và tiến hành
thực nghiệm ứng dụng.
2. Mục tiêu nghiên cứu
- Nghiên cứu để hiểu các khái niệm và đặc trưng liên quan tới bài toán so
sánh xâu xấp xỉ.
- Nghiên cứu các lớp thuật toán so sánh xâu xấp xỉ.
- Khảo sát, phân tích một số thuật toán và các bước tiến hóa và hiệu suất
(nghiên cứu khả năng về ý tưởng cải tiến thuật toán).


3

- Khảo sát chương trình ứng dụng asmf-master để có thể khai thác vào
trường hợp của luận văn.
- Cài đặt thử nghiệm tìm vị trí các câu hỏi trong nội dung, kết quả trả về của
một máy tìm kiếm.
3. Đối tượng và phạm vi nghiên cứu
Nghiên cứu một số thuật toán so sánh xâu xấp xỉ miền dữ liệu văn bản. Tiếp
đó, luận văn thi hành một số thuật toán trong họ thuật toán nói trên, cài đặt thử
nghiệm tìm kiếm.
4. Ý nghĩa thực tiễn của luận văn
Nghiên cứu thuật toán so sánh xâu xấp xỉ và ứng dụng của chúng vào hệ
thống tìm kiếm văn bản. Vì vậy, nó có ý nghĩa rất lớn trong lý thuyết và thực tiễn.
5. Phương pháp nghiên cứu
- Phương pháp nghiên cứu tài liệu, phân tích, tổng hợp.
- Phương pháp thực nghiệm và đối chứng qua chương trình thử nghiệm.



4

CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ XẤP XỈ
Trong chương này sẽ trình bày về một số số khái niệm xấp xỉ, khái quát về
một số thuật toán đối sánh mẫu xấp xỉ, các giải pháp thực hiện cho áp dụng ứng
dụng cho thuật toán đối sánh chuỗi xấp xỉ mà tác giả đã nghiên cứu trong thời gian
vừa qua.
1.1 Khái niệm xấp xỉ
Khái niệm xấp xỉ trong luận văn này, được sử dụng đồng nghĩa với khái
niệm đối sánh chuỗi xấp xỉ. Luận văn này sẽ trình bày một số giải thuật về đối
sánh chuỗi xấp xỉ mà tác giả đã nghiên cứu và tìm hiểu được các ứng dụng thực tế
như tìm và sửa từ lỗi, gợi ý tìm kiếm trong hệ thống tìm kiếm từ điển. Đối sánh
thể hiện việc so sánh chuỗi T và chuỗi P. Các kỹ thuật đối sánh được ứng dụng
nhiều trong các lĩnh vực khác nhau của tin học. Trong luận văn này, các kỹ thuật
được sử dụng để phát hiện từ sai chính tả và sử lại các từ sai.
1.1.1 Đối sánh chuỗi
Đối sánh thể hiện việc so sánh chuỗi T và chuỗi P. Các ký tự của T được so
sánh với các ký tự của P. Với phương pháp so sánh khác nhau sẽ trả lời các yếu tố
tương quan của T và P theo góc độ của thuật toán cụ thể. Ví như đối sánh theo các
thao tác chuyển ký tự của T để T chuyển thành P và ngược lại, phương pháp này thể
hiện độ đo khoảng các đối sánh. Ngoài ra còn nhiều phương pháp đối sánh khác
nhau cho phép đối sánh T và P theo n_gram, đối sánh mẫu theo tiền tố, hậu tố …
Bài toán đối sánh chuỗi là kỹ thuật thực hiện tìm kiếm sự xuất hiện của chuỗi
T trong chuỗi P. Cho chuỗi T và chuỗi P, sử dụng giải thuật F tìm kiếm và trả về
kết quả R là các vị trí của chuỗi T xuất hiện trong chuỗi P.
R = F(T,P)
Như vậy có thể thấy kết quả trả về của giải thuật F phụ thuộc vào:



5

- Cung cấp dữ liệu đầu vào T: Nếu cung cấp dữ liệu T không tốt sẽ cho kết
quả không như mong đợi, thậm trí không có kết quả.
- Cung cấp dữ liệu xử lý P: Chuỗi cần xử lý để đưa ra kết quả xem có sự xuất
hiện của T trong P hay không. Phụ thuộc vào nguồn cung cấp P. Nếu nguồn cung
cấp P không chứa chuỗi T thì việc đối sánh trả về kết quả là không tìm thấy kết quả
mà nguồn T cung cấp.
- Bản thân giải thuật F: Giải thuật sẽ thực hiện phương pháp đối sánh T với
P và trả về kết quả theo yêu cầu. Giải thuật ảnh hưởng trực tiếp đến kết quả. Tùy
thuộc vào cách tiếp cận mà có kết quả khác nhau. Nếu giải thuật tiếp cận theo
hướng đối sánh chính xác cần phải thực hiện sánh đúng chuỗi T chuỗi P để trả lời
câu hỏi P có trùng T hay không.
Các kỹ thuật đối sánh có thể phân thành hai loại đó là kỹ thuật so sánh đối
sánh chính xác, kỹ thuật còn lại là so sánh đối sánh không chính xác (xấp xỉ). Trong
luận văn này chỉ đề cập tới các thuật toán xấp xỉ.
1.1.2 Đối sánh chính xác
Tìm chính xác là phương pháp trả lời câu hỏi chuỗi T có chính xác tồn tại
trong chuỗi P hay không? Nếu có hãy chỉ ra vị trí xuất hiện của T có trong P [3].
Khái niệm trùng được chỉ ra ở đây có thể hiểu theo ý nghĩa là T được sánh đúng với
chuỗi con của P theo từng thứ tự ký tự, độ dài của T và chuỗi con phải bằng nhau.
Ví dụ : Cho chuỗi T="Các"
và chuỗi P ="Chào các bạn. Chúc các bạn ngày mới tốt lành".
Như vậy kết quả của đối sánh trả về thứ tự 1 và 4 là vị trí xuất hiện của T
trong P.
Đối sánh chính xác đưa ra một số ý nghĩa của nó thực hiện trong các hệ
thống tìm kiếm cần trả về kết quả chính xác. Hệ thống sẽ trả lời câu hỏi T có thật sự
tồn tại trong P hay không? Với các phương pháp của tìm kiếm chính xác đủ mạnh
để có một hiệu quả tìm kiếm tốt.



6

Ứng dụng của tìm kiếm chính xác:
- Trong máy tìm kiếm: Trả lời chính xác được câu hỏi từ khóa k được cung
cấp. Máy tìm kiếm thực hiện tìm kiếm trong hệ thống dữ liệu và trả ra các tài liệu có
chứa từ khóa k đã cung cấp. Nếu không có sẽ chỉ ra không có kết quả.
- Trong xử lý văn bản: Trả lời câu hỏi từ khóa k có tổn tại trong văn bản hay
không?
- Các phần mềm diệt virus: Có thể chứng minh sự tồn tại của đoạn mã code
độc trong file cần quét. Chương trình thực hiện tìm kiếm Virus và thực hiện loại bỏ
virus nếu phát hiện có trong file được nghi là bị nhiễm.
- Trong hệ thống tìm kiếm theo từ điển: Xây dựng được hệ thống tra cứu từ
điển. Người dùng cung cấp từ và hệ thống thực hiện tìm kiếm từ mà người dùng đã
cung cấp để đưa ra định nghĩa và mô tả cho từ khóa.
Ví dụ: Cho chuỗi T="cac" và chuỗi P = "Chào các bạn. Chúc các bạn một
ngày mới tốt lành".
Với các hệ thống tìm kiếm phát triển mạnh mẽ hiện nay, nhất là các máy truy
tìm thông tin ngày càng được cải tiến hiệu quả, và các hệ thống có sử dụng các
phương pháp đối sánh chuỗi. Việc tìm ra cách thức tìm kiếm chính xác tỏ ra kém
hiệu quả hơn trong một số trường hợp cụ thể như: Hệ thống tìm kiếm mong muốn
trả về nhiều giá trị hơn và bỏ qua điều kiện chính xác hoàn toàn mà tập chung vào
các yếu tố liên quan tới, gần đúng, xấp xỉ … Để giải quyết được yêu cầu này tác giả
giới thiệu một số giải thuật hỗ trợ tìm kiếm xấp xỉ.
1.2.3 Đối sánh chuỗi xấp xỉ
Như đã nói ở mục trước, việc hệ thống tìm kiếm có thể trả về nhiều kết quả
hơn. Với các kết quá có phần yếu tố tương tự liên quan. Ngày nay việc cung cấp các
phương pháp đối sánh mẫu xấp xỉ ngày càng được quan tâm và đã mang về các kết
quả tốt hơn cho người sử dụng hệ thống.



7

- Hệ thống tìm kiếm mong muốn cung cấp các kết quả nhiều hơn chon người
sử dụng càng tốt. Người sử dụng mong muốn có nhiều kết quả hơn (liên đới). Với
kết quả này làm cho người dùng có thể ít hiểu biết (ít thông tin) về vấn đề cần tìm
kiếm cũng sẽ được hài lòng.
- Nhận dạng mẫu: Hệ thống đối sánh không những là văn bản mà có thể ứng
dụng trong tìm kiếm các chuỗi nhị phân. Mở ra được dựa trên mẫu (ảnh/ audio) có
thể tìm kiếm các file ảnh/audio tương tự. Áp dụng trong lĩnh vực quân sự (nhận
dạng khuôn mặt).
- Hệ thống sửa lỗi cho từ và gợi ý các từ cần sửa. Giúp các phần mềm soạn
thảo trở nên thông minh hơn và hữu ích hơn khi hỗ trợ người soạn thảo có văn bản
được tin cậy hơn khi giúp họ sửa từ và gợi ý từ cần sửa.
"Bài toán đối sánh xấp xỉ" [4], [7] là kỹ thuật tìm kiếm sự xuất hiện của các
chuỗi T’ gần giống (xấp xỉ) T nằm trong chuỗi P. Có thể phát biểu theo cách khác:
kỹ thuật tìm kiếm chuỗi T trong chuỗi P, kết quả tìm kiếm trả về các chuỗi T’ gần
đúng (xấp xỉ) T.
Ví dụ: Cho chuỗi T="cac" và chuỗi P ="Chào các bạn. Chúc các bạn ngày mới
tốt lành!". Ở đây có thể tìm thấy từ T’="các" là gần đúng T theo ý nghĩa nào đó.
Vấn đề đặt ra ở đây là làm thế nào để biết được T và T’ là xấp xỉ nhau mà
không phải T’’ nào khác. Để thực hiện điều này có một cách tiếp cận đó là quy
chung về một con số định lượng cho tất cả các chuỗi. Công việc còn lại là phương
pháp xác định con số này. Việc tìm kiếm ra các các T’ có ý nghĩa rất qua trọng
trong các ứng dụng sử dụng phương pháp xấp xỉ. Chính vì việc có thể chỉ ra được
các T’ càng gần T thể hiện độ hữu dụng của bài toán. Nếu không thể tìm ra hoặc là
thuật toán kém hiệu quả về tìm kiếm kết quả sẽ làm cho ứng dụng giảm độ tin cậy
và không thực hiện được đúng mục tiêu được đề ra.
Một cách tổng quát để thực hiện đưa ra các T’ xấp xỉ T chúng ta có một cách

khá đơn giản là tìm ra các thao tác chuyển T’ thành T. Gọi D là tổng các thao tác để
thực hiện chuyển T’ thành T một cách chính xác.


8

- Nếu D = 0; cho thấy T và T’ trùng nhau.
Ví dụ: T ="Các" và T’ ="Các".
- Nếu D > 0: Cho thấy phải mất ít nhất một thao tác để chuyển T thành T’ và
ngược lại.
Ví dụ: Cho T = "Thiên" và T’ = "hiên". D > 0 cần thao tác thêm ký tự "T" vào
T’ để T’="Thiên" hoặc bỏ ký tự "T" trong T để T= "hiên".
Nhận xét: nếu D càng nhỏ thì T và T’ càng gần nhau. Hay nói một cách khác.
Nếu D = 0 thì T và T’ trùng nhau. Nếu D > 0 thì độ gần nhau (xấp xỉ) càng nhỏ khi
D càng nhỏ, D càng lớn thì độ xấp xỉ càng lớn.
Đối sánh chuỗi xấp xỉ được thực hiện dựa trên các thao tác chủ yếu sau đây:
- Xóa ký tự: Thao tác được thực hiện khi chuyển chuỗi T thành chuỗi T’ mà
độ dài của T lớn hơn độ dài của T’ thì cần thực hiện xóa bớt các ký tự.
Ví dụ: Cho chuỗi T="Thiên thanh" và T’="Thiên". Cần phải bỏ các ký tự
"thanh" trong T.
- Chèn thêm ký tự: Thao tác được thực hiện khi chuyển chuỗi T thành chuỗi
T’ mà độ dài của T nhỏ hơn độ dài của T’ thì cần thực hiện thêm các ký tự.
Ví dụ cho chuỗi T="hiên" muốn chuyển thành T’="Thiên", cần phải chèn
thêm ký tự "T" vào đầu của T khi đó T="Thiên" và trùng với T’.
- Thay thế ký tự: Thao tác được thực hiện khi chuyển chuỗi T thành chuỗi T’
mà độ dài là như nhau nhưng tại các vị trí cùng thứ tự các ký tự của T’ khác với T.
Ví dụ: Cho T="Hiên" và T’="Hiển", như vậy cần thay ký tự "ê" trong T thành
ký tự "ể" trong T’. Có được T="Hiển".
- Hoán đổi ký tự: Được thực hiện khi T và T’ có vị trí T[i] = T’[j] và T[j] =
T’[i]. Cần phải thực hiện hoán đổi T[i] cho T[j]. Như thế thì T mới chuyển thành T’.



9

Trong các thao tác trên, với ba thao tác thêm, xóa, thay thế ký tự là các thao
tác hay được sử dụng nhiều hơn cả. Thao tác hoán đổi sẽ ít sử dụng hơn và chỉ có
một số thuật toán áp dụng thao tác này.
Một chú ý đáng thú vị ở đây là khoảng cách xấp xỉ này chỉ ra được tổng số
các thao tác cần phải được thực hiện để chuỗi T chuyển thành chuỗi T’, không chỉ
rõ từng thao tác phải thực hiện.
Hầu hết các thuật toán về sánh chuỗi xấp xỉ sử dụng cách tiếp cập này để
thực hiện đưa ra giá trị xấp xỉ [5]. Các thuật toán có thể kể đến sau đây là:
- Levenshtein Distance: Thực hiện đối sánh chuỗi xấp xỉ theo các thao tác
(chèn, xóa, thay thế). Với các chuỗi có độ dài không nhất thiết phải bằng nhau. Đây
là một thuật toán khá dễ dàng cài đặt và cho ra số bước chuyển ngắn nhất.
- Hamming Distanse: Thực hiện đối sánh chuỗi với một thao tác là thay thế
với độ dài chuỗi đối sánh phải bằng nhau.
- Episode Distanse: Thực hiện trên ý tưởng với một thao tác là thêm một ký
tự vào T để chuyển T thành P.
- Longest Common Subsequence distance: Dựa trên ý tưởng tìm kiếm chuỗi
con dài nhất của T xuất hiện trong P.
Ngoài ra các thuật toán đối sánh chuỗi xấp xỉ còn được phân chia thành hai
kỹ thuật khác nhau [4]: Online – search và Offline – search.
- Online – search: Thực hiện tiền xử lý chuỗi T (mẫu đối sánh) để đối sánh
mà không xử lý chuỗi P (văn bản đối sánh). Các thuật toán được trình bày trong
luận văn này được phân loại vào nhóm on-line. Các thuật toán được trình bày trong
luận văn đều tiến hành xử lý chuỗi T trước khi tiến hành thực hiện đối sánh. Trong
thuật toán của Galil-park thực hiện đưa các chuỗi tiền tố của T. Trong thuật toán của
Ukkonen- Wood thực hiện tiến hành chuyển T thành cây hậu tố sau đó thực hiện tìm
kiếm. Trong thuật toán của Boyer-Moore thực hiện xử lý T bằng cách tìm ra BadCharacter và Good- Suffix.



10

- Offline – search: Nhóm các giải thuật này sẽ không thực hiện tiền xử lý
chuỗi T hoặc chuỗi P trước khi thực hiện đối sánh chuỗi.
1.2 Nội dung và ý nghĩa ứng dụng
1.2.1 Nội dung
Trong luận văn này sẽ thực hiện nhiệm vụ nghiên cứu một số thuật toán về
đối sánh chuỗi xấp xỉ áp dụng cho bài toán sửa lỗi chính tả trong văn bản bằng cách
sử dụng chương trình ứng dụng asmf-master có sẵn.
Luận văn chủ yếu đi sâu vào các thuật toán về đối sánh chuỗi xấp xỉ sau:
- Thuật toán của Galil Park: Được tác giả công bố năm 1989 với ý nghĩa
chính xây dựng các tiền tố cho T để tìm kiếm trong chuỗi văn bản. Kỹ thuật này cho
phép cung phương pháp tìm kiếm chủ đạo cho đối sánh với k ký tự khác biệt (thể
hiện tương tự) [4], [7], [9].
- Thuật toán của Ukkonen Wood: Thuật toán được Ukkonen Wood công bố
năm 1995. Thuật toán dựa trên việc xây dựng tree suffix (các ký tự cây hậu tố) cho
phép chứa các ký tự đầu tiên trong chuỗi dưới cấu trúc tree. Việc xây dựng cây bằng
cách đưa các ký tự cuối cùng của chuỗi P vào trong cây, xây dựng kết thúc khi
không còn ký tự. Việc tìm kiếm là chỉ ra các chuỗi hậu tố của T từ ngắn nhất đến
dài nhất có trong cây. Kỹ thuật xây dựng cây hậu tố sẽ được trình bày chi tiết ở
chương 2 của luận văn này. Thuật toán đối sánh thực hiện việc đối sánh chính xác
hậu tố của T với để đưa ra kết luận [8], [10].

Hình 1.1: Cây hậu tố cho S= "xabxac"


11


- Thuật toán của Boyer-Moore: Được Robert S. Boyer và J Strother Moore
công bố năm 1977. Thuật toán cho phép tìm chuỗi T trong chuỗi P với khoảng cách
xấp xỉ k. Thuật toán cho phép so sánh theo khoảng từng chuỗi. Khi tính toán đến
khoảng cách xấp xỉ k+1, thuật toán sẽ tìm kiếm tới kết quả tiếp theo [1], [11], [13].
(k+1)-suffix

T
P
k-prefix

Hình 1.2: Hoạt động cơ bản của thuật toán Boyer-Moore
Thuật toán thực hiện dựa trên cửa sổ trượt theo Bad-Character và Goodsuffix. Mỗi khi gặp một trong 2 trường hợp trên thì thuật toán thực hiện ghi nhận và
dịch chuyển theo cửa sổ (hình 1.2) Mô tả cách hoạt động cơ bản của thuật toán.
- Thuật toán đối sánh mã vòng với độ phức tạp là hàm tuyến tính: Do Carl
Barton, Costas S Iliopoulos và Solon P Pissis công bố năm 2014 trên tạp chí AMB
(Algorithms for Molecular Biology – Thuật toán sinh học phân tử). Tác giả đã trình
bày hai thuật toán đối sánh xâu vòng tròn gần đúng với k không đối xứng qua bộ lọc
(thuật toán ACSMF và thuật toán ACSMF-Đơn giản) trong trường hợp nhanh trung
bình với k khác biệt (không đối sánh), theo mẫu khoảng cách Hamming, cần thời
gian O(n) cho các giá trị trung bình của k, đó là k = O(m/log m) [12].
Các thuật toán này được trình bày cụ thể và chi tiết trong chương 2 của luận
văn này.
Chương trình ứng dụng asmf-master: Cho phép áp dụng phương pháp đối
sánh chuỗi xấp xỉ. Tác giả sử dụng công cụ này nhằm thực hiện và thực nghiệm về
thuật toán đối sánh xấp xỉ áp dụng cho bài toán kiểm tra và sửa lỗi chính tả.
Đây là chương trình được cài đặt rất nhiều thuật toán về đối sánh chuỗi xấp
xỉ, cụ thể được thể hiện bằng thuật toán đối sánh chuỗi xấp xỉ theo mã vòng với kmismatch, trong đó có thể kể tới các thuật toán mà tác giả đang nghiên cứu và áp


12


dụng. Chương trình này có thể chạy trên các môi trường Ubuntu, linux, Windows...
Công cụ sẽ được giới thiệu chi tiết ở chương 3 trong luận văn này.
1.2.2 Ý nghĩa ứng dụng
Các thuật toán đối sánh chuỗi xấp xỉ [4] được áp dụng trong khá nhiều vấn
đề của tin học như:
- Tìm và sửa lỗi chính tả trong các phần mềm soạn thảo văn bản. Các văn bản
được xây dựng có thể tồn tại các từ sai chính tả. Nhiệm vụ lúc này cần phải có công
cụ đủ mạnh và hiệu quả để thực hiện phát hiện ra lỗi chính tả và gợi ý các từ để sửa
lỗi chính tả. Trong luận văn này tác giả sử dụng chương trình chạy asmf để thực
nghiệm các thuật toán đã nêu trong luận văn.
- Trong hệ thống máy tìm kiếm của các website tìm kiếm: Hệ thống hỗ trợ
người nhập dữ liệu cần tìm (chuỗi từ khóa). Hệ thống dựa trên chuỗi từ khóa này
phát hiện các từ sai, hoặc các từ tương tự để gợi ý người dùng lựa chọn các từ.
Người dùng nhập dữ liệu chưa biết chính xác các từ cần tìm hoặc gõ sai từ. Như vậy
đây là một ý tưởng rất tốt cho hệ thống máy tìm kiếm.
- Trong các phần mềm diệt virus: Hệ thống có thể dựa trên mẫu virus có sẵn
và tiến hành tìm kiếm các mẫu virus tương tự với nó. Nhờ vào đó có thể phát hiện
ra một file có bị nhiễn virus hay không.
- Trong y học: Có thể tìm ra các GEN gây bệnh dựa trên mẫu GEN bệnh
phẩm đã có sẵn. Dựa trên ý tưởng tìm ra cấc GEN tương tự GEN mẫu (cho là GEN
gây bệnh), hệ thống tìm kiếm phát hiện ra các GEN tương tự có nguy cơ gây bệnh
đối với con người.
1.3 Kết luận chương
Như chúng ta đã biết, các phương pháp đối sánh chính xác cần thực hiện
sánh đúng về thứ tự từng ký tự trong quá trình thực hiện thao tác sánh đúng. Việc
này thật sự cần thiết với các yêu cầu cần biết chính xác dữ liệu T có tồn tại trong dữ
liệu P hay không. Bài toán này phục vụ các vấn đề đòi hỏi chính xác.



13

Trong một số trường hợp chúng ta cần phải tiếp cận vấn đề theo cách thức
xấp xỉ.
- Chúng ta chấp nhận các kết quả xấp xỉ để có thể cung cấp thêm nhiều hơn
các kết quả liên đới mà ở đó không quan trọng yếu tố chính xác. Nếu chúng ta cung
cấp dữ liệu T và được trả lời bởi các T’ không giống hoàn toàn T và kết quả này vẫn
có thể chấp nhận được. Chúng ta không biết đích xác T mà chỉ cung cấp các T’ gần
đúng T sử dụng T’ thay T và được kết quả mong đợi như cung cấp T.
- Chương trình ứng dụng asmf-master được sử dụng cho phép đối sánh chuỗi
bằng phương pháp xấp xỉ. Đây là một công cụ rất hiệu quả và được cài đặt nhiều
thuật toán về đối sánh chuỗi.
Phương pháp đối sánh chuỗi xấp xỉ được ứng dụng trong nhiều bài toán cụ
thể như: Kiểm tra lỗi chính tả trong văn bản, máy tìm kiếm, trình diệt virus, trong y
học...
Tiếp theo trong chương 2 tác giả đi sâu vào tìm hiểu các thuật toán về đối
sánh chuỗi xấp xỉ. Tác giả trọng tâm vào thuật toán đối sánh chuỗi vòng với kmismath, đây là thuật toán với độ phức tạp trung bình là hàm tuyến tính.


14

CHƯƠNG 2: TÌM HIỂU MỘT SỐ THUẬT TOÁN
Như đã trình bày ở chương trước, các thuật toán sánh xấp xỉ thực hiện tìm
kiếm các chuỗi P gần giống với chuỗi P’ nằm trong văn bản T. Việc thực hiện tìm
kiếm nhằm mục đích trả về kết quả vị trí của P’ nằm trong T. Ngày nay có nhiều
thuật toán đối sánh xấp xỉ được thiết kế nhằm tăng tính hiệu quả và giảm thời gian
được áp dụng một cách đáng kể. Trong chương này tác giả thực hiện giới thiệu và
nghiên cứu một số thuật toán cơ bản phục vụ cho luận văn. Các thuật toán được
trình bày cụ thể như Galil Park, thuật toán Ukkonen Wood, thuật toán BoyerMoore. Thuật toán mới được công bố gần đây nhất là thuật toán đối sánh mã vòng
với độ phức tạp là hàm tuyến tính.

2.1 Thuật toán của Galil Park
Galil và Park [5], [7] đưa ra giải thuật thực hiện tìm toàn bộ xuất hiện của
mẫu P trong chuỗi T, dựa trên ma trận D. Ma trận D được khởi tạo với kích thước
D[m,n], n là chiều dài của T và m là chiều dài của P. Các giá trị được xét theo hình
2.1 dựa trên kỹ thuật bộ ba quy chiếu (Reference trips) để thực hiện tìm kiếm chuỗi
P trong chuỗi T.
D(|0,j) = 0,

0 ≤ j ≤ n;

D (| i  1, j )  1


D(k,j) = min  D (| i  1, j  1)  ifp i  t j then 0 else 1

D (| i, j  1)  1


Bước đầu khởi tạo D(0,j) =0; và thực hiện tiến hành đối sánh lần lượt ký tự
P[i] với ký tự T[j] và D[i,j] sẽ được định kết quả dựa trên các xác định như sau:
- Nếu P[i]=T[j] thì D[i,j] = min(D[i-1,j]+1, D[i-1,j-1], D[i,j-1]+1)
- Ngược lại P[i]!= T[j] thì D[i,j]= min(D[i-1,j], D[i-1,j-1], D[i,j-1]) +1


15

Giải thuật dựa trên việc tính toán theo đường chéo ma trận D, và sử dụng
phương pháp đối sánh mẫu xấp xỉ. Giải thuật được thể hiện theo hai kỹ thuật
"Preprocessing patten P" và kỹ thuật bộ ba tham chiếu "Reference triple" [7].
- Kỹ thuật: Tiền xử lý mẫu đối sánh P "Preprocessing P". Được xử lý theo

tiền tố Preffix xử dụng bảng tam giác trên của ma trận D priffix(|i,j).1đó priffix(|i,j) là độ dài nhất của các chuỗi tiền tố chung của p[i..m] và p[j..m]. Thủ
tục tiền xử lý P như sau:
Algorithm MN2
// initialization //
for d  0 to n - m + k + 1 do C(-1, d)  d - 1;
for d  - (k+1) to - 1 do
C(|d| -1, d)  -1;
C(|d| -2, d)  - ;
end for
for c  0 to n - m + k do
for e  0 to k do
d  c - e;
col  max(C(e - 1, d - 1) + 1, C(e - 1, d) + 1, C(e - 1, d + 1));
while col < n and col - d < m and ycol + 1 - d = xcol + 1 do
col  col + 1
end while
C(e,d)  min (col, m + d)
end for
end for

- Kỹ thuật bộ ba tham chiếu Referencetrips(u,v,w). Trong đó u thể hiện vị trí
bắt đầu, v thể hiện vị trí kết thúc, w thể hiện vị trí xuất hiện của chuỗi con sub=p[v-


16

w... u-w] nằm trong T nhưng T[v+1]!= P[v+1-w+v]. Giải thuật dùng biến rth làm đối
cho các hàm U(r), V(r), W(r). Thực hiện đối sánh lại.
Ví dụ: Chuỗi x="abbdadcbc" và chuỗi y="adbbc" với k=2. Với vị trái bắt đầu

c và ký hiệu * thể hiện tìm thấy nhiều bộ (Bảng bộ quy chiếu Referencetrips(u,v,w):
c

Reference triples
0

1

2

1

(1,1,0)

(2,3,-1)

(4,3,-2)*

2

(2,1,0)*

(2,3,-1)

(5,4,-1)*

3

(3,2,2)*


(3,3,-1)

(5,4,-1)*

4

(4,3,3)*

(4,4,2)

(5,4,-1)*

5

(5,6,4)

(7,6,3)*

(7,7,2)

6

(6,6,4)

(8,9,4)

(10,8,3)*

- Thủ tục xử lý within(t,k,r). Thực hiện trả về giá trị tham chiếu của kỹ thuật
bộ ba Referencetrips(u,v,w). Cụ thể như sau:

procedure within (t,k,r)
while r  k and t > vr do  r + 1;
if r > k then return(false);
else
if t  ur then return(true);
else return(false);
end if
end

Giải thuật thực hiện của Galil-Park [9] được thể hiện như sau:
Algorithm Galil-park
beign
Prewfixes(P);
for i in -1 ... k loop


17

c(i,1):= - infinity; c(i,2): = -1;
end loop;
b1:= 0; b2:=1; b3:=2;
for j in 0 … n-m+k loop
C(-1,b1):= j; r:=0;
for e in 0 … k loop
h= j-e;
Col = max ((c(e-1, b2)+1, c(e-1, b3)+1, c(e-1, B1)+1));
se= Col+1; found:= flase;
while not found loop
If within(Col +1) then
F:=v(r)-col; g:=prefix(col+1–h, col+1-w(r));

if f=g then Col:= Col+f;
else Col:= Col + Min (f,g); found:= true;
else
if Col –h Col:= Col + 1;
else found:= true; end if;
end if;
end loop;
c[e,b1]:= min (Col,m+h);
If(c[e,b1]= h+m and c[e-1,b2] Report_Match((h+m));
end if;
if v[e]>= C[e,b1] then
if e=0 then u(e):= j+1;
Else u(e)= max(u(e), v(e-1)+1); end if;
else
v(e)=c(e,b1); w(e):= h;
if e=0 then u(e):= j+1;
Else u(e):= max(se, v(e-1)+1); end if
end if;
end loop;
b:=b1; b1:=b3; b3:=b2; b2:=b;
end loop;
end;


18

2.2 Thuật toán của Ukkonen Wood và một số cải tiến
Thuật toán xây dựng cây hậu tố được Ukkonen và Wood công bố năm 1995

[5], [6], [7], [8]. Thuật toán cho phép tiền xử lý chuỗi mẫu dựa trên việc chuyển mẫu
P với các hậu tố được tổ chức trong cấu trúc cây (tree), suffix tree (ST). Xây dựng
Suffix Tree (ST) T cho chuỗi S có độ dài m. Nút gốc có m lá được đánh số 1 tới m.
Mỗi một nút trong không bao gồm gốc của T có 2 nút con. Mỗi một cung của T đánh
nhãn với chuỗi con không rỗng của S. Không có một cung nào được gán nhãn bởi bắt
đầu cùng một ký tự. Với nhánh i, xuất phát từ gốc và đến cuối nhánh được đánh nhãn
khi tổng hợp lại sẽ được một hậu tố của S, đặt chuỗi con S[i,m] bắt đầu từ vị trí i.
Ví dụ: xây dựng cây hậu tố cho chuỗi S="xabxac"

Hình 2.1: cây hậu tố cho S= "xabxac"
- Tồn tại cây hậu tố S: Nếu mỗi hậu tố Sj của S được sánh đúng với một tiền
tố của hậu tố Si trong S, thì đường dẫn sau đó của Sj sẽ không dừng tại nút lá.
Ví dụ: S = "xabxa" và có S1 = "xabxa" và S4 = "xa" như vậy để tránh trường
hợp này bởi việc thêm ký tự "$" vào cuối S.
Ví dụ: Cây hậu tố cho S="xabxac$"

Hình 2.2: Cây hậu tố cho chuỗi "xabxac$"


19

- Cây hậu tố bao hàm: Giải thuật của Ukkonen thực hiện thiết lập cây hậu tố
bao hàm. Để lấy về cây hậu tố cần phải thực hiện thao tác:
+ Loại bỏ hoàn toàn các cung có nhãn $.
+ Loại bỏ một số cung không được gắn nhãn.
+ Loại bỏ một số nút khi nó không chứa ít nhất là 2 nút con.
Cây hậu tố bao hàm cho tiền tố S[i,i] của S hoàn toàn giống cây hậu tố cho
chuỗi tiền tố S[1,i]$.
Ii Đại diện cho cây bao hàm hậu tố cho chuỗi S[1.i]
Mỗi hậu tố trong cây có thể không kết thúc tại một nút lá

Ví dụ: Cây bao hàm ST cho chuỗi xabxa bởi cây cho chuỗi xabxa$
{xabxa$, abxa$, bxa$, xa$, a$, $}

Hình 2.3: Cây bao hàm cho chuỗi "xabxa$"
* Giải thuật của Ukkonen's:
Ii is the implicit suffix tree of the string S[1, i]
Construct I1
/* Construct Ii+1 from Ii */
for i = 1 to m-1 do /* phase i+1 */
for j = 1 to i+1 do /* extension j */


20

Find the end of the path P from the root whose label is S[j, i] in Ii and
extend P with S[i+1] by suffix extension rules;
Convert Im into a suffix tree S
* Các luật mở rộng: Mở rộng S[j,i] đến S[j,i+1]
- Nguyên tắc 1: S[j,i] là nút lá. Thêm ký tự S(i+1) vào phần cuối của nhãn
trên cung chứa nút lá.
- Nguyên tắc 2: S[j,i] không phải là nút lá, các ký tự sau đây không kèm theo
S(i+1). Tạo một cung lá mới cho S(i+1). Có thể tạo thêm một nút nằm bên trong
nếu S[j,i] là kết thúc phần giữa của một cung.
- Nguyên tắc 3: S[j,i+1] đã nằm trong cây. Không thực hiện cập nhật lại cây.
Ví dụ: Cây bao chùm cho "axabxb" từ cây của chuỗi "axabx"

Hình 2.4: Cây bao chùm cho chuỗi axabxb
Giải thuật Ukkonen’s với độ phức tạp O(m). Giải thuật thực hiện các kỹ
thuật: Liên kết hậu tố "Suffix links", bỏ qua và đếm giả "Skip and count trick", nén
nhãn và cung nén nhãn cạnh " edge label compression", một nút chai và một nút lá

thì luôn là nút lá.
* Tạo liên kết hậu tố Suffix Links:
Giải thuật thực hiện lựa chọn hai chuỗi a và xa. Giả sử một số nút v nội bộ
của cây được gắn nhãn với xa và một nút khác s(v) trong cây được dán nhãn với


21

một a. Cung (v,s(v)) được gọi là liên kết hậu tố "suffix link", chú ý là bỏ qua nút
gốc của cây.

Hình 2.5 : Cây biểu diễn hậu tố cho chuỗi
S = "ACACACAC$"
* Thuật toán Ukkonen Wood:
Begin
For i in 1 … m loop c(p(i)):=c(p(i))+1; end loop;
For j in 1 ... n loop
x:=t(j); EnQueue(q,x); c(x):=c(x)-1;
if c(x) < 0 then z:=z+1; end if;
while z > k loop
DeQueue(q,x);
ifc(x) < 0 then z:=z-1; end if;
c(x):=c(x)+1;
end loop;
if size(q)=m then
mark(j-m+1); DeQueue(q,x);
ifc(x) < 0 then z:=z-1; end if;
c(x):=c(x)+1;
end if;
end loop;

edp(m);
end;
2.3 Thuật toán của Boyer-Moore
Ý tưởng chính của thuật toán: thuật toán thực hiện đối sánh theo mẫu pat để
tìm sự xuất hiện trong văn bản T. Mỗi lần đối sánh sẽ dịch chuyển mẫu theo chiều
đối sánh trái qua phải, mẫu pat được đối sánh trong T theo chiều từ phải qua trái ký


×