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.. - Tìm hiểu về vấ
Trang 1
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
Trang 2
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
Trang 3
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
Trang 4
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
Trang 5DFA Otomat đơn định hữu hạn
NFA Otomat đa định hữu hạn
KMP Knuth–Morris–Pratt
BM Boyer–Moore
Trang 6
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
Trang 7
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
Trang 8
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
Trang 9MỞ ĐẦ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
Trang 103 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 http://truongthcsdaiminh.edu.vn/
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
Trang 11Chương 1: TỔNG QUAN VỀ VẤN ĐỀ ĐỐI SÁNH MẪU
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
Trang 12tệ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)
Trang 13trê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
Trang 141.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
Trang 15cử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)
Trang 16Mộ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
Trang 17Đị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 r 1 và r 2 là hai biểu thức chính qui, khi đó (r 1 |r 2 ) là một biểu thức chính qui khớp với xâu r 1 hoặc r 2
- Với r 1 và r 2 là hai biểu thức chính qui, khi đó (r 1 )(r 2 ) là một biểu thức chính
- 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 x 1 x 2 x n , n ≥ 0, trong đó r khớp với các x i , 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ý:
Trang 18Otomat đ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
Trang 19bấ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:
Trang 20Bà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í
Trang 21Khú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
Trang 224) 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,
Trang 23Chươ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
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
Hình 2.1 Ý nghĩa của mảng next
Trang 24Trong 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:
next[i] 0 0 2 0 2 0 0 2 4
Trang 25
Ví dụ 2.2: Với P=abbaaba ta có bảng next như sau:
if ( i < = m) and (P i = 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
Trang 26Vị trí xuất hiện 3, 6, 9
Sô lần xuất hiện là 3
Độ phức tạp của thuật toán
Trang 27- Pha tiền xử lý mẫu: Độ phức tạp thời gian và không gian để xây dựng bảng next là O(m)
- Pha tìm kiếm: Thời gian xấu nhất là O(m+n)
2.2 Thuật toán BM ( Boyer- Moore)
Một tiếp cận phổ biến trong các thuật toán so đơn mẫu là duyệt tuần tự qua tất cả các ký tự trên xâu vào S, mỗi lần một ký tự Nhưng trong thuật toán BM, có thể có những bước nhẩy xa trên S được thực hiện, nhờ vậy BM được đánh giá là thuật toán nhanh nhất về thực hành, đây là lựa chọn hiệu quả cho những ứng dụng thông thường như các trình soạn thảo văn bản
Ý tưởng cơ bản của thuật toán là sử dụng một “Cửa sổ trượt” như sau: “Cửa sổ” thực ra là một khúc độ dài m trên xâu vào S (m là độ dài của mẫu P) được đối sánh với mẫu tại một thời điểm nào đó Mỗi lần đối sánh mẫu P với một cửa sổ trên S bằng cách so sánh từng ký tự từ phải sang trái Khi gặp ký tự không khớp, cửa sổ trượt sang phải qua một đoạn trên S (tương ứng với việc dịch mẫu P sang phải) Trường hợp tốt nhất khi sự không khớp xảy ra tại vị trí Pm và ký tự không khớp là Sk lại không phải là một ký tự trong mẫu P, lúc đó có thể an toàn trượt cửa
sổ sang phải qua m vị trí trên S và bắt đầu quá trình tìm kiếm mới bởi việc so sánh
Pm và Sk+ m
Giả sử tại một thời điểm đang xét cửa sổ Sk - m+ 1Sk - m + 2 Sk và bắt đầu so sánh Pmvới Sk
(1) Giả sử Pm ≠ Sk có hai khả năng:
a) Nếu vị trí xuất hiện phải nhất của ký tự Sk trong P là m - g, ta có thể dịch mẫu P sang phải g vị trí sao cho Pm-g dóng thẳng với Sk rồi bắt đầu lại quá trình đối sánh bởi phép so sánh Pm và S k+ g
b) Nếu ký tự Sk không có mặt trong P, ta có thể dịch mẫu P sang phải m vị trí Đây là bước dịch chuyển xa nhất có thể mà vẫn không bỏ sót sự xuất
Trang 28(2) Giả sử m - i ký tự cuối của mẫu P đã khớp với m - i ký tự cuối của S(k)
Nếu i = 0, ta đã tìm được một xuất hiện của mẫu P
Ngược lại, nếu i > 0 và Pi ≠ Sk -m+i, xét hai khả năng:
a) Nếu vị trí xuất hiện trái nhất của ký tự Sk -m+i trong P là i - g, khi đó mẫu P được dịch sang phải g vị trí sao cho Pi-g dóng thẳng với Sk-m+i và sẽ bắt đầu quá trình đối sánh mới, bắt đầu từ Pm so với Sk+g Nếu Pi-g nằm bên phải của Pi (khi g < 0) thì mẫu P chỉ dịch sang phải 1 vị trí
b) Giả sử sufi(P) là một xâu con của Pi+1-gPi+2-g Pm-gvà Pi-g ≠ Pi (nếu có nhiều xuất hiện như vậy của sufi(P) thì chọn vị trí phải nhất) Khi đó sẽ dịch mẫu P sang phải một đoạn dài hơn so với trường hợp (2a) sao cho khúc Pi+1-gPi+2-g Pm-g dóng thẳng với khúc Sk-m+i+1Sk-m+i+2 Sk và bắt đầu quá trình đối sánh mới từ Pm so với Sk+g
Như vậy, khi Pi ≠ Sj, mẫu P sẽ dịch sang phải đi một số vị trí Thuật toán sử dụng hai bảng d1và d2 để tính toán bước địch chuyển này
Bảng d1 bao hàm trường hợp (1) và (2a): Với mỗi ký tự c, d1[c] là số i lớn nhất sao cho c = Pi hoặc d[c] = m nếu c không xuất hiện trong mẫu P
Bảng d2 bao hàm trường hợp (2b): Với mỗi i, 1≤ i ≤ m, d2[i] được xác định là: d2[i] = min{g + m - i| g ≥ 1 và (g ≥i hoặc Pi-g ≠ Pi) và ((g ≥ k hoặc Pk-g = Pk) với i ≤
Trang 29Thuật toán 2.3 Tính bảng dịch chuyển d2 procedure computed 2();
Trang 30Thuật toán 2.4 Thuật toán BM tìm sự xuất hiện của mẫu P trong xâu S
else j: =j+ max[d 1 [S j ], d 2 [i]}; end;
Ghi nhận counter; end;
Độ phức tạp của thuật toán
Độ phức tạp thời gian là O(m + n) và độ phức tạp không gian là O(m)
Trang 312.3 Thuật toán KMP mờ
2.3.1 Khái niệm Độ mờ
Bài toán đặt ra ở đây là tìm kiếm chính xác mẫu, nhiều lần lặp mẫu Độ mờ là một giá trị nguyên thuộc [0, ,m] cho biết độ dài của khúc đầu dài nhất của mẫu P đã xuất hiện trên S Đây cũng có thể xem như một mô hình “lỗi”, rất phù hợp với tìm kiếm xấp xỉ khúc đầu trong các từ điển lớn
Định nghĩa 2.1 Cho xâu mẫu P độ dài m và xâu đích S độ dài n Độ mờ
+ Nếu S j P 1 thì = 0 ,
+ Ngược lại, là số lớn nhất sao cho P 1 P 2 P = S j – + 1 S j – + 2 S j
Gọi AP là tập các kí tự có trong mẫu P, # là một kí tự đại diện cho các kí tự thuộc A nhưng không xuất hiện trong P (thuộc A \ AP)
Độ mờ xuất hiện mẫu P được xác định thông qua hàm TFuzz như sau:
TFuzz: {0,1, , m} (AP #) {0,1,…, m}
(, a) ↦ ’ = TFuzz (, a) trong đó gọi là giá trị độ mờ cũ, ’ là giá trị độ mờ mới khi gặp kí tự a Hàm TFuzz được xây dựng dựa vào bảng next như trong thuật toán KMP tìm nhiều lần lặp mẫu đã trình bày ở Mục 2.1 Dựa vào Định nghĩa 2.2, bằng phương pháp qui nạp, ta nhận được ngay kết quả sau:
Trang 32Bổ đề 2.1 Giả sử độ mờ xuất hiện mẫu P tại vị trí j trên S là Khi đó
Do ý nghĩa của độ mờ là độ dài khúc đầu dài nhất của mẫu P đã xuất hiện trên
S nên otomat sẽ có tập trạng thái là tập số nguyên {0, 1, , m} Hoạt động của otomat mờ so mẫu sẽ như sau:
Khởi đầu con trỏ trên S là j = 0 Tại đó chưa xuất hiện khúc đầu nào của mẫu nên trạng thái khởi đầu của otomat là q0 = 0
Duyệt S, mỗi lần một kí tự, bắt đầu từ S1 Giả sử trạng thái của otomat là q thì khi đọc được kí tự Sj, trạng thái mới (ứng với vị trí j trên S) sẽ là q’ = (q, Sj) ( là hàm chuyển của otomat)
Trang 33 Tại vị trí j trên S, nếu trạng thái của otomat là q, có nghĩa khúc đầu dài nhất xuất hiện trên S của P có độ dài q Nếu q = m, báo hiệu một lần xuất hiện mẫu, bắt đầu từ vị trí j – m +1
Mô hình otomat mờ cần được xây dựng một cách thích hợp để đáp ứng được yêu cầu sánh mẫu như trên
Định nghĩa 2.2 Otomat mờ so mẫu là bộ A(P) = (A, Q, q 0 , , F), trong đó:
k, nếu c {A[0], A[1], , A[k–1]}
TFuzz là mảng [0 m, 0 k], trong đó TFuzz [i, j] là độ mờ mới khi độ mờ i gặp
kí tự x có index[x] = j
Chi tiết thuật toán tạo bảng TFuzz và tìm kiếm dựa vào bảng TFuzz như sau:
Trang 34Thuật toán 2.5 Tạo lập TFuzz
Trang 35Cho xâu đích S = aabaababaababaabab Gọi j là con trỏ trên xâu S, j là độ
mờ xuất hiện mẫu P tại vị trí j trên S Quá trình so mẫu P trên dòng dữ liệu S diễn ra như sau:
Như vậy, mẫu P xuất hiện trong xâu S hai lần, bắt đầu tại các vị trí 4 và 9
Trang 37Chương 3 ĐỐI SÁNH MẪU XẤP XỈ
3.1 Vấn đề đối sánh mẫu xấp xỉ
Để đo số “lỗi” trong bài toán đối sánh mẫu xấp xỉ, thực chất ta phải giải bài
toán xác định độ tương tự giữa hai xâu Lưu ý rằng 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 (Chẳng hạn “Việt Nam”, “Việt Nan” hay “Việtt
Nan” có thể xem là các xâu tương tự nhau, ) Các kỹ thuật phổ biến nhất được sử dụng hiện nay để đ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 (Edit Distance)
Các kỹ thuật này hiệu quả khi có những sai khác về mặt chính tả: có sự bổ sung, xoá hay thay thế một số kí tự Trong nhiều tình huống, những kĩ thuật này chưa đáp ứng đầy đủ yêu cầu thực tế, như khi cần tìm kiếm theo tên người nước ngoài (chẳng hạn “Christian Charras” và “Charas C.”), khi có sự sai khác do biến đổi hình thái từ, cấu trúc câu (“approximate searching” và “search approximately”), một số trường hợp thứ tự ghép từ khác nhau nhưng mang ngữ nghĩa giống nhau (“toán logic” và “logic toán”) hoặc do thứ tự sai song vẫn hiểu được đúng nghĩa (“toán giải tích” và “giải tích toán”, )
Xét một tình huống khác Khi ứng dụng trong thực tế, mỗi từ theo nghĩa thông
thường có thể xem là một kí tự hình thức Chẳng hạn câu ‘bạn Minh giỏi Toán’ được xem là một ‘xâu’ gồm 4 ‘kí tự’, có thể hình thức hoá là P = derq và S là ‘Ở
trường tôi bạn Minh được đánh giá là một trong những sinh viên học Toán giỏi nhất’, hình thức hoá là S = abcdefghiklmnopqrs Tính độ tương tự giữa hai xâu
bằng các kĩ thuật kinh điển kể trên được kết quả như sau:
+ độ dài dãy con chung dài nhất: 3, độ tương tự có thể xem là 3/18,
+ độ dài xâu con chung dài nhất: 2, độ tương tự có thể xem là 2/18,
Trang 38+ khoảng cách Hamming: 18 (đúng bằng độ dài xâu S)
3.2 Độ tương tự dựa trên độ dài khúc con chung của hai xâu
3.2.1 Phát biểu bài toán
Bài toán: Cho xâu mẫu P = P1P2…Pm (độ dài m) và xâu đích S = S1S2…Sn (độ
dài n) trên bảng chữ A Tìm khúc con chung dài nhất giữa hai xâu P và S
Bài toán có thể hiểu là tìm khúc con dài nhất của P xuất hiện trên S
Để giải quyết bài toán, trước hết ta đưa vào một số ký hiệu
Cho bảng chữ A, với mỗi xâu u = u1u2 uk, ui A:
+ prefm(u) = u1u2 um (hay gọn hơn là u(m) ), là khúc đầu gồm m chữ của u + sufm(u) = uk – m + 1uk – m + 2 uk là khúc cuối gồm m chữ của u
+ Qui ước pref0(u) = suf0(u) = ε (từ rỗng)
+ Với hai số tự nhiên f, d, |u| d f 0, đặt u(f, d) = suff(prefd(u)) là khúc cuối
độ dài f của một khúc đầu gồm d kí tự của u Qui ước u(0,d) = ε
+ Với mỗi xâu y là khúc con của u,
đặt lid(y,u) = (|y|, Min {dN| f 0 : u(f,d) = y})
+ Cho hai xâu u, v, ký hiệu lfact(v, u) là khúc cuối y dài nhất của v mà y là khúc con nào đó của u, độ dài của xâu y như vậy được ký hiệu là lfuz(v, u)
Ví dụ 3.1 Cho u = drabcgaba Khi đó pref6(u) = drabcg, suf2(drabcg) = cg, do vậy u(2,6) = cg, lid(ab,u) = (2,4) vì ab là khúc con trái nhất của u kết thúc tại vị trí 4 trên u và ab có độ dài 2
Cho v = ghbacabc, lfact(v,u) = abc, lfuz(v,u) = 3, lfact(u,v) = ba, lfuz(u,v) = 2 Với xâu P độ dài m đã cho, trên các cặp số (f,d), với m d f 0, xác định một quan hệ tương đương như sau : (f,d) tương đương với (f’,d’) nếu P(f,d) = P(f’,d’) ( khi đó hiển nhiên f = f’) Lớp tương đương của một cặp (f, d) được ký hiệu
Trang 39là [f,d] Cặp số (f,d) được gọi là có nghĩa (với P) nếu (f,d) là cặp có d nhỏ nhất
trong lớp, nghĩa là có khúc con y của P sao cho lid(y, P) = (f,d)
Ví dụ 3.2 Cho u = drabcgaba Các cặp (2, 4) và (2, 8) là tương đương vì u(2, 4)
= u(2, 8) = ab ; cặp (f,d) = (2,8) là không có nghĩa vì y = ab có vị trí kết thúc trái nhất trên u là ở vị trí 4, không phải ở vị trí 8 mặc dù u(2,8) = y = ab
Phương pháp giải quyết
Với S(j) là khúc đầu độ dài j của xâu S, độ mờ xuất hiện mẫu P tại vị trí j trên
S là lfuz(S(j), P) (chính là độ dài khúc cuối dài nhất w của S(j) mà w là khúc con nào đó của P) Bản chất thuật toán cần được xây dựng là : duyệt S từ trái sang phải,
ở vị trí thứ j, sau khi đọc được kí tự Sj, cho biết ngay cặp giá trị (f,d) có nghĩa của P, sao cho P(f,d) = lfact(S(j), P), do đó f = lfuz(S(j), P) Sử dụng biến LenMax để đánh dấu độ dài của khúc con dài nhất tìm được, tính tới vị trí j trên S Sau khi duyệt xong S, LenMax cho biết độ dài khúc con chung dài nhất của P và S Thuật toán 3.1 được xây dựng dựa trên một mô hình otomat mờ sẽ đáp ứng được yêu cầu trên
Để xây dựng thuật toán chi tiết, ta sẽ xét hai hệ hình thức otomat, hệ hình thức thứ nhất đóng vai trò bổ trợ nhằm giúp thể hiện bản chất của hệ hình thức sau
3.2.2 Otomat đối sánh mẫu: mô hình và cơ sở toán học
Định nghĩa 3.1 Otomat trạng thái các khúc con của P có:
+ Bảng chữ vào A = A P {#}, A P gồm các kí tự xuất hiện trong mẫu P và kí tự # đại diện cho các kí tự thuộc A \ A P ,
+ Tập trạng thái là tập tất cả các khúc con của P, mỗi trạng thái là một khúc
con của P (bao gồm cả xâu rỗng),
+ Với mỗi chữ a, mỗi khúc con u của P, hàm chuyển T cho bởi:
T(u,a) := lfact(ua, P)
Ta mở rộng tác động cho xâu w = a 1 a 2 a k tuỳ ý:
T(u,w) := T( T(T(T(u,a 1 ),a 2 ),a 3 ) ,a k ), qui ước T(u, ε) = u