Do sự hữu ích của các công cụ tìm kiếm thông tin trên Internet nên tôi chọn đề tài “Sử dụng đối sánh mẫu xấp xỉ và kỹ thuật chỉ mục cho tìm kiếm trong website”với mục đích nghiên cứu, t
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Trang 3i
LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sự hướng dẫn của TS Nguyễn Thị Thanh Huyền Trong luận văn có sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả khác đều có trích dẫn và chú thích nguồn gốc trong phần tài liệu tham khảo
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm về nội dung luận văn của mình
Hà Nội, ngày 30 tháng 09 năm 2016
Tác giả
Nguyễn Văn Quyết
Trang 4ii
LỜI CẢM ƠN
Em xin gửi lời cảm ơn sâu sắc đến TS Nguyễn Thị Thanh Huyền Cô là người tận tình chỉ bảo và truyền các kinh nghiệm nghiên cứu khoa học trong suốt quá trình thực hiện luận văn Sự động viên tin tưởng của Cô là động lực chính để
em thực hiện và hoàn thành luận văn này
Em xin được bày tỏ lòng biết ơn đến các thầy cô trong Viện Toán ứng dụng
và Tin học, trường đại học Bách Khoa Hà Nội đã dạy dỗ và giúp đỡ em trong suốt quá trình học tập vừa qua
Cuối cùng, em xin gửi lời cảm ơn chân thành tới gia đình, đồng nghiệp, bạn
bè và người thân đã tạo điều kiện thuận lợi, đóng góp ý kiến và động viên trong quá trình học tập cũng như thực hiện luận văn này
Tuy bản thân đã có nhiều cố gắng nhưng do điều kiện nghiên cứu hạn chế và thời gian nên bản thân có thể còn mắc nhiều thiếu sót trong luận văn Tác giả trân trọng các ý kiến đóng góp và nhận xét của tất cả người đọc để luận văn được hoàn thiện
Em xin chân thành cảm ơn !
Hà Nội, ngày 30 tháng 09 năm 2016
Nguyễn Văn Quyết
Trang 5iii
MỤC LỤC
LỜI CAM ĐOAN i
LỜI CẢM ƠN ii
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ vi
MỞ ĐẦU vii
Chương 1 TỔNG QUAN 1
1.1 Tổng quan về vấn đề tìm kiếm và tìm kiếm trong một website 1
1.1.1 Vấn đề tìm kiếm và bài toán đối sánh mẫu 1
1.1.2 Tìm kiếm trong một website 4
1.2 Sơ lược về máy tìm kiếm 5
1.2.1 Giới thiệu chung về máy tìm kiếm 5
1.2.2 Phân loại máy tìm kiếm 6
1.2.3 Mô hình của một Search Engine 6
1.2.4 Search Engine điển hình 8
1.3 Bài toán đối sánh mẫu chính xác 10
1.3.1 Bài toán so đơn mẫu 10
1.3.2 Bài toán so đa mẫu 19
1.4 Tổng quan về vấn đề đối sánh mẫu xấp xỉ 25
1.4.1 Bài toán đối sánh mẫu xấp xỉ 25
1.4.2 Các hàm khoảng cách kinh điển 27
1.4.3 Cách tiếp cận giải bài toán so mẫu xấp xỉ 28
Chương 2 MỘT SỐ THUẬT TOÁN ĐỐI SÁNH MẪU XẤP XỈ 30
2.1 Phát biểu bài toán 30
2.2 Bài toán tìm kiếm dãy con chung dài nhất 30
2.2.1 Phát biểu bài toán 30
2.2.2 Ý tưởng thuật toán 30
2.2.3 Thuật toán 31
2.2.4 Ví dụ 32
Trang 6iv
2.2.5 Đánh giá thuật toán 33
2.3 Bài toán tìm kiếm khoảng cách Levenshtein của hai xâu 33
2.3.1 Phát biểu bài toán 33
2.3.2 Ý tưởng thuật toán 33
2.3.3 Thuật toán 34
2.3.4 Ví dụ 35
2.3.5 Đánh giá thuật toán 35
2.4 Một thuật toán cơ bản kinh điển cho bài toán tìm kiếm khúc con chung của hai xâu 36
2.4.1 Phát biểu bài toán 36
2.4.2 Ý tưởng thuật toán 36
2.4.3 Thuật toán 37
2.4.4 Ví dụ 37
2.4.5 Đánh giá thuật toán 38
2.5 Bài toán tìm khúc con chung dài nhất tiếp cận theo otomat mờ 38
2.5.1 Phát biểu bài toán 38
2.5.2 Ý tưởng thuật toán 38
2.5.3 Otomat sánh mẫu: mô hình và cơ sở toán học 40
2.5.4 Thuật toán 43
2.5.5 Đánh giá thuật toán 44
2.6 Bài toán tìm khúc con chung dài nhất theo tiếp cận otomat mờ kết hợp khoảng cách Levenshtein 46
2.6.1 Phát biểu bài toán 46
2.6.2 Ý tưởng thuật toán 46
2.6.3 Thuật toán 48
2.6.4 Đánh giá thuật toán 49
2.7 Cài đặt chương trình mô phỏng 49
Chương 3 KỸ THUẬT CHỈ MỤC TRONG CÁC CÔNG CỤ TÌM KIẾM 53
3.1 Kỹ thuật lập chỉ mục trong cơ sở dữ liệu (database index) 53
3.1.1 Tổng quan về chỉ mục trong cơ sở dữ liệu 53
Trang 7v
3.1.2 Ưu điểm của chỉ mục trong cơ sở dữ liệu 53
3.1.3 Kiến trúc và các phương thức của chỉ mục 54
3.1.4 Ứng dụng và hạn chế 55
3.1.5 Các loại chỉ mục 56
3.2 Lập chỉ mục các website trong máy tìm kiếm (Web Indexing) 57
3.3 Lập chỉ mục các webpage trong một website sử dụng web bots 57
3.3.1 Tổng quan về chỉ mục các webpage 57
3.3.2 Thiết kế và thực hiện các Web Bots 61
3.4 Các thư viện hỗ trợ việc đánh chỉ mục 62
3.4.1 Giới thiệu về Lucene 63
3.4.2 Kiến trúc của Lucene 64
3.4.3 Kiến trúc của File Index 65
KẾT LUẬN 67
1 Kết quả đạt được 67
2 Những hạn chế còn tồn tại 67
3 Hướng phát triển tiếp theo 67
TÀI LIỆU THAM KHẢO 68
Trang 8vi
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
Hình 1.2.1.Kiến trúc của Google Search Engine 8
Hình 1.3.1 Ý nghĩa của mảng next tại vị trí i trong thuật toánKMP 12
Hình 1.3.2.Ý nghĩa của mảng next tại vị trí m+1 trong thuật toán KMP 12
Hình 1.3.3.good-suffix shift, trường hợp u lại xuất hiện trong P (thuật toán BM) 15
Hình 1.3.4.good-suffix shift, trường hợp chỉ suffix của u xuất hiện trong P (thuật toán BM) 16
Hình 1.3.5.bad-character shift, a xuất hiện trong P(thuật toán BM) 16
Hình 1.3.6.bad-character shift, a không xuất hiện trong P (thuật toán BM) 16
Hình 2.7.1.Giao diện ứng dụng mô phỏng 50
Hình 2.7.2.Kết quả trả về của ứng dụng mô phỏng 51
Hình 3.3.1.Ví dụ về Page Indexing 60
Hình 3.4.1.Kiến trúc của Lucene 64
Hình 3.4.2.Kiến trúc file index Lucene 65
Hình 3.4.3.Chỉ mục đảo ngược trong Lucene 66
Trang 9vii
MỞ ĐẦU
Trong thời đại ngày nay, với sự phát triển nhanh chóng của Internet - kho tài nguyên hết sức phong phú và hữu ích đối với cuộc sống và công việc của nhiều người trên khắp thế giới, mặt khác dữ liệu trên Internet cũng phát triển đa dạng và khổng lồ Do đó để khai thác một cách hiệu quả tài nguyên khổng lồ này thì vấn đề tìm kiếm cũng như xây dựng các công cụ tìm kiếm nhanh chóng, chính xác trở thành một vấn đề không thể thiếu
Để tìm kiếm một thông tin trên mạng chỉ cần đơn giản là truy cập vào một trang tìm kiếm như Bing, Google,… và gõ vào từ khóa cần tìm Sau một khoảng thời gian ngắn một danh sách các trang web có liên quan đến từ khóa sẽ được trả về
và sắp xếp theo thứ tự những trang có nội dung gần với yêu cầu của người dùng nhất sẽ được hiển thị ở đầu danh sách Người dùng chỉ cần truy cập vào các trang web này và xem thông tin, các trang có chức năng tìm kiếm như vậy được gọi là
máy tìm kiếm (search engine) Tuy nhiên, sẽ rất hữu ích khi bản thân một trang web
cũng có máy tìm kiếm nội bộ
Do sự hữu ích của các công cụ tìm kiếm thông tin trên Internet nên tôi chọn
đề tài “Sử dụng đối sánh mẫu xấp xỉ và kỹ thuật chỉ mục cho tìm kiếm trong
website”với mục đích nghiên cứu, tìm hiểu cơ chế hoạt động cũng như các thuật
toán tìm kiếm, các kỹ thuật tổ chức dữ liệu được sử dụng trong máy tìm kiếm để trả
về kết quả nhanh chóng nhất và đáp ứng nhu cầu người dùng một cách tốt nhất
Nội dung nghiên cứu của đề tài bao gồm: Các thuật toán đối sánh mẫu chính xác, xấp xỉ; Cấu trúc, cơ chế hoạt động của một máy tìm kiếm; Kỹ thuật đánh chỉ mục cho website gồm chỉ mục trong cơ sở dữ liệu, chỉ mục các website trong máy tìm kiếm và chỉ mục các webpage của một website
Nội dung của luận văn sẽ được tổ chức thành ba chương như sau:
Trang 10viii
Chương 1 - “Tổng quan” sẽ trình bày về những nội dung cơ bản về vấn đề
tìm kiếm và tìm kiếm trong một website Chương này cũng mô tả cấu trúc, cơ chế hoạt động của máy tìm kiếm cũng như một số thuật toán đối sánh mẫu chính xác và cách tiếp cận cho thuật toán đối sánh mẫu xấp xỉ
Chương 2 -“Một số thuật toán đối sánh mẫu xấp xỉ” sẽ dựa theo các cách
tiếp cận trình bày ở Chương 1 để nêu ra một số khái niệm và thuật toán đối sánh mẫu xấp xỉ, cùng một chương trình máy tính cài đặt một số thuật toán đối sánh mẫu nhằm mô phỏng cho quá trình tìm kiếm
Chương 3: “Kỹ thuật chỉ mục trong các công cụ tìm kiếm” tập trung
nghiên cứu về các kỹ thuật lập chỉ mục hiện nay và giới thiệu về các thư viện hỗ trợ việc lập chỉ mục
Trang 111
Chương 1 TỔNG QUAN
1.1 Tổng quan về vấn đề tìm kiếm và tìm kiếm trong một website
Ngày nay do sự phát triển nhanh chóng của công nghệ thông tin cũng như Internet đã sinh ra một khối lượng khổng lồ các dữ liệu dạng siêu văn bản Trong các năm gần đây, Internet đã trở thành một trong những kênh về khoa học, kinh tế, thương mại quảng cáo và mọi vấn đề trong xã hội, với khối lượng thông tin luôn tăng trưởng không ngừng Từ đó đặt ra một vấn đề quan trọng, không thể thiếu, đó là tìm kiếm và trích rút thông tin Để tổ chức một công cụ tìm kiếm tốt, phải giải quyết được hai vấn
đề có quan hệ mật thiết là: thuật toán tìm kiếm tốt và chiến lược tổ chức cơ sở dữ liệu hiệu quả (chẳng hạn như kỹ thuật index) để hỗ trợ cho thuật toán tìm kiếm đó phát huy được tối đa sức mạnh
1.1.1 Vấn đề tìm kiếm và bài toán đối sánh mẫu
Text là dạng biểu diễn dữ liệu hay gặp nhất trong các hệ thống thông tin Tìm kiếm văn bản (text searching) là vấn đề chủ yếu thuộc lĩnh vực quản lý văn bản Một dạng
cơ bản và tổng quát hơn là tìm kiếm chuỗi (hay xâu) (string seaching) hay đối sánh chuỗi/ đối sánh xâu (string matching) hay có thể gọi ngắn gọn là so mẫu 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, Tìm kiếm chuỗi là bài toán tìm ra 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, vì thế bài toán này còn được gọi là đối sánh xâu mẫu (string pattern matching) Dạng đơn giản
Trang 12dữ liệu (data retrieval system), trình soạn thảo văn bản (text editors), máy tìm kiếm (search engine) 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, phần mềm cảnh báo và diệt virut, tìm kiếm text trong các hệ cơ
sở dữ liệ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 (computational biology), vấn đề đối sánh chuỗi càng trở nên quan trọng và được quan tâm nhiều Một lý do nữa, bởi con người ngày nay không chỉ đối mặt với một lượng thông tin khổng lồ mà còn đòi hỏi những yêu cầu tìm kiếm ngày càng phức tạp Các mẫu đưa vào không chỉ đơn thuần là một xâu kí tự mà còn có thể chứa các kí tự thay thế (wild card), các khoảng cách (gaps) và các biểu thức chính qui (regular expressions) Sự "tìm thấy" không chỉ đơn giản là xuất hiện chính xác mẫu mà còn cho phép có "một ít sai khác" giữa mẫu và xuất hiện của nó trong văn bản Từ đó, bên cạnh vấn đề kinh điển là “tìm kiếm chính xác”, nảy sinh một hướng nghiên cứu hết sức thú vị là "tìm kiếm xấp xỉ" (approximate matching, approximate searching) Đối với vấn đề đối sánh chuỗi đã có rất nhiều hướng tiếp cận giải quyết được đưa
ra, từ những phương án rất lý thuyết đến các phương án rất thực dụng Hướng nghiên cứu lý thuyết đã nêu ra nhiều thuật toán quan trọng, song lại ít hiệu quả trong thực hành Rõ ràng, những ý tưởng đơn giản thường làm việc tốt hơn trong thực hành Hai
ví dụ điển hình là thuật toán nổi tiếng và kinh điển là Knuth-Morris-Pratt (KMP) và Boyer-Moore (BM), song lại hạn chế trong thực hành do tốc độ cũng như sự phức tạp, khó hiểu Thuật toán KMP bị đánh giá là quá khó hiểu còn trong họ các thuật toán
BM, những thuật toán thành công nhất trong thực hành cũng là những phiên bản đơn giản hóa rất nhiều so với BM gốc [6] Tuy nhiên, trong các tài liệu hiện nay chỉ giới
Trang 13ra các thuật toán tốt nhất về độ phức tạp và đề cập đến những khái niệm thuật toán rắc rối, trong khi các nhà phát triển hệ thống lại chỉ quan tâm đến những thuật toán được đánh giá là nhanh về thực hành và dễ hiểu, dễ cài đặt Một vài thuật toán kết hợp được
cả hai mặt lý thuyết và thực hành (như BNDM) [6], được đánh giá là nhanh và thiết
thực
Một mảng rất thú vị là vấn đề tìm kiếm với mẫu mở rộng, tìm đa mẫu, tìm kiếm xấp xỉ, song không nhiều kết quả liên quan được công bố và rất ít được trình bày trong các sách Tìm kiếm xấp xỉ luôn là một vấn đề mới mẻ và hiện nay đang được quan tâm nhiều nhằm đưa ra các cách tiếp cận, quan điểm “thế nào là xấp xỉ” cũng như các thuật toán giải quyết bài toán
Có thể phân loại các thuật toán đối sánh chuỗi theo 2 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 Hiện nay
đã có nhiều thuật toán tìm kiếm on–line tốt, độ phức tạp từ O(m*n) cho thời gian xấu nhất đến tối ưu là O((k + log|A|m)n/m) cho thời gian trung bình [5] Thứ hai là giải
pháp tiền xử lý văn bản theo cách xây dựng một cấu trúc dữ liệu trên văn bản (lập chỉ mục) Nhiều ứng dụng cần sử dụng giải pháp này mặc dù đã có những thuật toán trực tuyến nhanh bởi chúng phải điều khiển một lượng văn bản quá lớn nên không có thuật toán trực tuyến nào có thể thực hiện một cách hiệu quả Tìm kiếm trên chỉ mục (indexed searching) thực ra cũng dựa trên tìm kiếm on-line
Trang 144
Phân loại các thuật toán tìm kiếm dựa trên đặc tính của mẫu ta có: so đơn mẫu, so
đa mẫu (mẫu là một tập các xâu), so mẫu mở rộng (extended strings), so biểu thức chính qui (regular expressions) với 2 hướng tiếp cận là tìm kiếm chính xác và xấp xỉ
1.1.2 Tìm kiếm trong một website
Máy tìm kiếm trên World Wide Web là một chương trình truy xuất từ xa cho phép người dùng tìm kiếm trên toàn bộ Internet Hiện nay đã có vài loại máy tìm kiếm và cung cấp khả năng tìm kiếm trên tiêu đề (titles) văn bản, URL's, headers, hoặc toàn văn (full text) Khi không biết chính xác website nào chứa thông tin cần tìm, ta thường
sử dụng công cụ Google bằng cách đưa vào cụm từ khóa Tuy nhiên, đôi khi bản thân một trang web cũng gặp vấn đề khi tìm kiếm nội bộ Đối với phạm vi một website chứa rất nhiều webpage, và có thể gồm cả những dữ liệu dạng bản ghi, cũng rất cần một “máy tìm kiếm” riêng Hiện nay, để tăng tiện ích cho người dùng, rất nhiều website có hộp tìm kiếm cho phép tìm kiếm theo từ khóa được đưa vào
Một cách để tìm kiếm trong một website là sử dụng một thủ thuật của Google như sau
1.1.2.1 Phương pháp tìm kiếm trong một website sử dụng Google Grammar
Trong khi tìm kiếm thông tin, người dùng có thể chỉ cần chú ý thông tin từ một website nào đó, không cần chú ý đến các trang khác.Chúng ta có thể sử dụng từ khóa theo cấu trúc site của Google để hạn chế kết quả tìm kiếm chỉ trong một website duy nhất với cú pháp như sau: từ khóa cần tìm site:website cần tìm Chú ý rằng không có khoảng trống giữa site: và website cần tìm.Không cần sử dụng http:// hoặc https:// trong URL của website cần tìm
Song để thực sự đáp ứng tốt nhu cầu của người dùng, sẽ rất hữu ích nếu website
có hộp tìm kiếm dựa trên một máy tìm kiếm được xây dựng riêng, có thể cung cấp những tính năng tìm kiếm nâng cao, như tìm kiếm xấp xỉ, tìm kiếm đa mẫu,…
Trang 155
1.1.2.2 Các phương pháp để đưa một máy tìm kiếm lên website
Để đưa một máy tìm kiếm cho phép tìm kiếm nội bộ trong một website, hiện nay có một số phương pháp như sau:
Cài đặt riêng một chương trình ứng dụng cho phép tìm kiếm, sau đó tích hợp vào website Thông thường các ngôn ngữ dễ tích hợp vào website như PHP, Perl được sử dụng Với cách này có thể chủ động được thuật toán, kết quả đầu
ra, các tính năng nâng cao hay tìm kiếm xấp xỉ giúp có thể chủ động được kết quả đầu ra cũng như xây dựng bộ chỉ mục cho máy tìm kiếm dễ dàng
Tích hợp một máy tìm kiếm có sẵn, có thể là một máy tìm kiếm mã nguồn mở free, hoặc bản thương mại hoặc đơn giản là tích hợp các máy siêu tìm kiếm lớn như Google, Ping, Yahoo,… Ví dụ như tích hợp bộ search của của Google lên website của bạn một cách đơn giản sử dụng Search Google CES, với công cụ này bạn chỉ cần đăng ký dịch vụ với Google và thực hiện nhập website cần tìm kiếm Google CES sẽ trả về một đoạn script để tích hợp vào website Phương pháp này rất đơn giản nhưng điểm yếu là đôi khi trả về kết quả không chính xác
và không tùy chỉnh được như máy tìm kiếm tự xây dựng
1.2 Sơ lược về máy tìm kiếm
1.2.1 Giới thiệu chung về máy tìm kiếm
Định nghĩa: Máy tìm kiếm (Search Engine) là một hệ thống được xây dựng nhằm tiếp
nhận các yêu cầu tìm kiếm của người dùng (thường là một tập từ khóa) sau đó phân tích yêu cầu này và tìm kiếm thông tin trong cơ sở dữ liệu được tải xuống từ web và trả về kết quả là các trang web có liên quan cho người dùng
Máy tìm kiếm (Search Engine) nguyên thủy là một phần mềm nhằm tìm ra các trang trên Internet có nội dung theo yêu cầu người dùng dựa vào các thông tin mà người dùng cung cấp qua từ khóa tìm kiếm Máy tìm kiếm sẽ truy xuất trong CSDL của nó và trả về danh mục các trang Web có chứa từ khóa mà người dùng cung cấp ban đầu
Trang 166
Máy tìm kiếm được dùng chung để mô tả cho 2 hệ thống tìm kiếm: Một do chương trình máy tính tự động tạo ra (Crawler-Based Search Engines) và dạng thư mục Internet do con người quản lý (Human-Powered Directories) Hai hệ thống tìm kiếm này tìm và lập chỉ mục website theo 2 cách khác nhau
Crawler-Based Search Engines sử dụng các chương trình máy tính được gọi là Robots, Spiders hay Crawlers để lần tìm các trang trên Internet rồi tự động phân tích các trang lấy về đồng thời đánh chỉ mục đưa vào CSDL của nó Khi có yêu cầu tìm kiếm, Search Engine đối chiếu từ khóa với bảng chỉ mục và trả kết quả tương ứng Có cơ chế cập nhật nội dung của web định kỳ
Human-Poweded Directories: các thư mục Internet hoàn toàn phụ thuộc vào sự quản lý của con người Nếu sử dụng phải đăng ký đến ban biên tập của Search Engine
1.2.2 Phân loại máy tìm kiếm
Xét theo phương pháp tìm kiếm thì Search Engine được phân thành 2 loại: Máy tìm kiếm thông thường và siêu tìm kiếm
Máy tìm kiếm thông thường thực hiện công việc tìm kiếm theo quy trình thu thập tài liệu, phân loại và tạo chỉ mục, gồm 2 loại: sử dụng thư mục chủ đề và tạo chỉ mục tự động
Máy siêu tìm kiếm: (Meta Search Engine) là loại máy truy tìm ảo, nó hoạt động dựa trên sự tồn tại của các Search Engine có sẵn, không có CSDL riêng Khi có yêu cầu tìm kiếm, nó sẽ gửi từ khóa đến các Search Engine có sẵn và nhận các kết quả đồng loạt Nhiệm vụ của nó là phân tích và phân hạng lại kết quả tìm được
1.2.3 Mô hình của một Search Engine
Bộ tìm duyệt Crawler: thu thập các trang trên Internet rồi chuyển cho bộ đánh
chỉ mục Indexer Crawler xuất phát từ tập các URL ban đầu S0, đầu tiên nó sắp xếp các phần tử trong tập S0 vào hàng đợi, sau đó lấy dần các URL theo thứ tự
và tải về các trang tương ứng, Crawler trích tất cả các URL có trong các trang
Trang 17 Song song hóa quá trình dò tìm trang
Kho dữ liệu Repository: là một hệ thống lưu trữ có khả năng mở rộng, quản lý
một tập lớn các trang web Nó thực hiện 2 chức năng chính:
Cho phép Crawler lưu trữ các trang web
Cung cấp API truy cập hiệu quả để bộ Indexer và bộ Collection Analysis
có thể sử dụng để lấy các trang từ kho dữ liệu
Bộ lập chỉ mục Indexer: Các trang web được crawler tải về phải được xử lý
thích hợp trước khi thực hiện tìm kiếm, tạo chỉ mục cho tài liệu Module Indexer và Collection Analysis có chức năng tạo ra nhiều loại chỉ mục khác nhau
Indexer tạo ra 2 loại chỉ mục chính là Text Index (chỉ mục nội dung) và Structure Index (chỉ mục cấu trúc)
Collecction Analysis dựa vào 2 chỉ mục của Indexer để tạo ra các chỉ mục hữu ích khác:
Link Index: tạo chỉ mục liên kết, các đoạn web đã duyệt được biểu diễn dưới dạng đồ thị với các đỉnh và cạnh tương ứng
Text Index: đánh chỉ mục dựa theo nội dung
Chỉ mục kết hợp: số lượng và kiểu của các chỉ mục Utility được quy định bởi bộ Collection Analysis tùy thuộc vào chức năng của bộ máy truy vấn và kiểu thông tin mà đã Ranking trước đó
Phân hạng trang (Page Rank): Một phương pháp nổi tiếng được Sergey Brin
và Lawrence Page để tính toán hạng trang Phương pháp này dựa trên ý tưởng: nếu có liên kết từ trang A đến trang B thì đó là một sự tiến cử của trang A đối với trang B Nếu trang B được nhiều trang “quan trọng” hơn trỏ đến, trang C được ít trang “quan trọng” hơn trỏ đến thì trang B có độ quan trọng hơn trang C
Trang 188
1.2.4 Search Engine điển hình
Có nhiều Search Engine hiện nay nhƣ: Google, Yahoo, bing, ASPSeek, Trong các search engine hiện nay, google là search engine tốt nhất Trong mục này sẽ giới thiệu
sơ qua về máy tìm kiếm Google
Google ra đời năm 1977 do Larry Page và Sergey Brin sáng lập Cấu trúc cơ bản nhƣ sau (Hình 1.2.1):
Hình 1.2.1.Kiến trúc của Google Search Engine
Bộ tìm kiếm Searcher Pagerank
Bộ Sorter
Bộ Crawler
Responsitory
Bộ chỉ mục Indexer
Anchor
Doc Index
Store Server URL Server
URL Resolver
Barrels
Trang 199
Bộ tìm duyệt Crawler: là bao gồm nhiều crawler phân tán ở các địa điểm khác
nhau Máy chủ URL có nhiệm vụ cung cấp địa chỉ URL cho Crawler.Các trang web được tải về sau đó chuyển vào kho dữ liệu (Store Server) Store Server nén các trang này lại và chuyển vào Respository Mỗi trang web có một chỉ số ID kết hợp hay còn gọi là docID docID được gán mỗi khi có một URL mới được tách khỏi trang web
Bộ đánh chỉ mục Indexer: lấy các tài liệu trong kho Respository, giải nén và
phân tích chúng để tạo chỉ mục
Bộ xử lý URL Resolver: có nhiệm vụ đọc nội dung tệp nén và chuyển các
URL tương đối thành các URL tuyệt đối rồi thành các chỉ mục docID Đưa dòng văn bản liên kết URL (anchor text) và docID của tài liệu mà URL đó trỏ tới vào chỉ mục xuôi (forward index).Tạo ra một CSDL lưu trữ các liên kết chưa từng cặp docID, được sử dụng để tính hạng (Page Rank) cho tất cả các trang web
Bộ Sorter: lấy dữ liệu đã được sắp xếp theo thứ tự của docID trong các Barrels
và sắp xếp lại theo wordID để tạo chỉ mục ngược
Chỉ mục tài liệu document Index (docID) lưu trữ thông tin về mỗi tài liệu bao
gồm thông tin về trạng thái hiện hành của tài liệu (document status), con trỏ tới kho Respository, một thông số kiểm lỗi Checksum và nhiều thông số khác Nếu tài liệu đã được duyệt với crawler thì docID chứa thông tin về tài liệu đó (ví dụ như địa chỉ URL, title, ) Nếu tài liệu chưa được duyệt thì docID chứa con trỏ đến danh sách URL
Danh mục từ Lexicon: có một số loại danh mục từ khác nhau, trong đó có một
kiểu là danh mục từ có thể được chứa trong bộ nhớ với chi phí hợp lý Danh mục từ được chia thành 2 phần: một phần danh sách các từ và một mảng băm của các con trỏ
Các danh sách hit: mỗi hit chứa các thông tin của một từ nào đó trong một tài
liệu bao gồm vị trí, font chữ, và chữ hoa hay chữ thường Danh sách hit loại bỏ hầu hết các khoảng trống trong cả chỉ mục xuôi và chỉ mục ngược
Trang 2010
Đánh chỉ mục cho web (indexing the web): có 3 cách
Chỉ mục xuôi (forward index)
Chỉ mục ngƣợc (inverted index)
Phân tích cú pháp Parsing
Bộ tìm kiếm Searcher: tuân theo quy trình
Phân tích câu hỏi
Tính hạng của tài liệu cho yêu cầu tìm kiếm
Nếu duyệt đến hết các doclist trong short barrel mà vẫn không tìm thấy tài liệu thỏa mãn yêu cầu thì chuyển sang tìm các doclist trong full barrel
Nếu duyệt toàn bộ các doclist mà không tìm thấy tài liệu thỏa mãn, đƣa
ra kết quả
Nếu có tài liệu thỏa mãn, sắp xếp các tài liệu tìm thấy theo thứ hạng và trả về giá trị top k
Hệ thống xếp hạng: Google sử dụng một số kỹ thuật phân hạng trang nhƣ
PageRank, anchor text, và proximity để nâng cao chất lƣợng tìm kiếm
1.3 Bài toán đối sánh mẫu chính xác
1.3.1 Bài toán so đơn mẫu
Phát biểu bài toán: Cho xâu mẫu P độ dài m và xâu văn bản S độ dài n (m<n) trên cùng một bảng chữ A Tìm tất cả các vị trí xuất hiện của P trên S
Trang 2111
1.3.1.1 Thuật toán Brute Force
Ý tưởng thuật toán ([1], [2], [14]): là thuật toán tìm kiếm tuần tự, thử kiểm tra qua tất
cả các vị trí trên văn bản từ 1 đến n - m +1 Sau mỗi lần thử thuật toán Brute Force dịch mẫu sang phải một ký tự cho đến khi kiểm tra hết văn bản
đó có thể có rất nhiều ký tự đã được so sánh giống với mẫu nhưng lại ko được xét Việc xử lý những ký tự này có thể được tính toán trước rồi lưu vào kết quả Nhờ đó lần thử sau có thể dịch chuyển đi được nhiều hơn 1 ký tự, giảm số ký tự phải so sánh
Giả sử ta đang thử ở vị trí j trên xâu văn bản S, vị trí thứ i trên xâu mẫu P, ta đã biết i-1 ký tự đầu của mẫu P đã khớp, việc khớp mẫu thất bại tại vị trí j trên S có nghĩa là: P1P2…Pi-1 = Sj-i+1Sj-i+2…Sj-1 và Pi Sj Khi đó như trong thuật toán Brute Force ta cần phải quay lại thử ở vị trí j-i, nhưng trong KMP, 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), 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 Do h phụ thuộc vào i nên ta ký hiệu h = next(i), i=1, ,m
Trang 2212
Hình 1.3.1 Ý nghĩa của mảng next tại vị trí i trong thuật toán KMP
Khi i>m ta đƣợc một xuất hiện của mẫu bắt đầu tại vị trí j-m trên S Để tìm vị trí xuất hiện tiếp theo, để tránh bỏ sót mẫu khi có mẫu xuất hiện lồng nhau, ta thử mẫu
ở 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 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 1.3.2.Ý nghĩa của mảng next tại vị trí m+1 trong thuật toán KMP
Nhƣ vậy, với mỗi vị trí i trên P, i = 1 ,m+1, cần xác định xem next[i] thỏa mãn: i) 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)
Trang 2313
Thuật toán:
// xay dung mang next
int[] initNext(String p, int m) {
// tim kiem voi KMP
int algorithmKMP(String p, String s){
Trang 24Đánh giá thuât toán:
Xây dựng mảng next: O(m)
Tìm kiếm: O(m+n) với nhiều nhất là 2n -1 lần số lần so sánh ký tự trong quá trình tìm
kiếm
Trang 2515
1.3.1.3 Thuật toán Boyer Moore
Thuật toán Boyer Moore ([2], [9], [14]) là thuật toán có tìm kiếm chuỗi rất hiệu quả trong thực tiễn, các dạng văn bản khác nhau của thuật toán này thường được cài đặt trong các trương trình soạn thảo văn bản
Thuật toán sẽ quét các ký tự của mẫu từ phải sang trái bắt đầu từ ký tự cuối cùng Trong trường hợp so khớp thất bại (mis-match) hoặc là trường hợp đã tìm được
1 đoạn khớp với mẫu, nó sẽ dùng 2 hàm được tính toán trước để dịch cửa sổ sang phải Hai hàm dịch chuyển này được gọi là good-suffix shift (phép dịch chuyển khớp) và bad-character shift (phép dịch chuyển xuất hiện)
Giả sử trong quá trình so sánh ta gặp 1 mis-match tại vị trí Pi = a của mẫu và
Si+j= b trong khi đang thử khớp tại vị trí j Khi đó Pi+1Pi+2 Pm-1 = Sj+i+1Sj+i+2…Sj+m-1
= u và Pi Si+j
Phép dịch chuyển good-suffix shift sẽ dịch cửa sổ sang bên phải cho đến khi gặp một ký tự khác với Pi trong trường hợp đoạn u lại xuất hiện trong P Nếu đoạn u không xuất hiện lại trong P, mà chỉ một phần cuối (suffix) của u khớp với phần đầu (prefix) của P, thì ta sẽ dịch 1 đoạn sao cho phần suffix dài nhất v của
Sj+i+1Sj+i+2…Sj+m-1 khớp với prefix của P
Hình 1.3.3.good-suffix shift, trường hợp u lại xuất hiện trong P (thuật toán BM)
S
P P
c
Trang 2616
Hình 1.3.4.good-suffix shift, trường hợp chỉ suffix của u xuất hiện trong P (thuật toán BM)
Phép dịch chuyển bad-character shift sẽ khớp ký tự Si+j với một ký tự bên phải nhất trong đoạn PoP1…Pm-2 Nếu Si+j không xuất hiện trong P, ta thấy ngay rằng không
có xuất hiện nào của P trong S mà lại chứa Si+j, do đó ta có thể đặt cửa sổ ngay sau Si+j, tức Si+j+1.
Hình 1.3.5.bad-character shift, a xuất hiện trong P(thuật toán BM)
Hình 1.3.6.bad-character shift, a không xuất hiện trong P (thuật toán BM)
S
P P
không chứa b
S
P P
b
Trang 27
Cs(i, s): với mỗi k mà i < k < m, s ≥ k hoặc P[k-s]=P[k] và
Co(i, s): nếu s <i thì P[i-s- P[i]
Khi đó, với 0≤ i <m: bmGs[i+1]=min{s>0 : Cs(i, s) and Co(i, s)cố định} và chúng ta định nghĩa bmGs[0] là độ dài chu kỳ của P
Việc tính toán bảng bmGs sử dụng 1 bảng suff định nghĩa nhƣ sau: với
Trang 28// thuat toan tim kiem Boyer Moore
int algorithmBoyerMoore(String p, String s) { int m = p.length();
int n = s.length();
Trang 2919
int bmGs[] = new int[m];
int bmBc[] = new int[100000];
}
}
return countBM;
}
Đánh giá thuật toán:
Bảng bmGs và bmBc đƣợc tính toán trong thời gian O(m+n).
Độ phức tạp không gian để xây dựng bảng dịch chuyển làO(m)
1.3.2 Bài toán so đa mẫu
Cho một tập mẫu P gồm tập các từ khóa {W1,W2,…,Wk} và xâu văn bản S có độ dài m trên cùng một bảng chữ A Tìm xuất hiện của các từ khóa Wi, i=1,2 ,k trong S
Trang 3020
1.3.2.1 Thuật toán Aho Corasick
Thuật toán được xây dựng bởi Alfred V.Aho và Margaret J.Corasick, đây là thuật toán đơn giản và hiệu quả dùng để xác định số lần xuất hiện của một số từ khóa hữu hạn trong chuỗi văn bản ([6]) Thuật toán này xây dựng máy trạng thái hữu hạn dựa vào các từ khóa và sau đó sử dụng máy này để xử lý chuỗi văn bản.Thời gian xây dựng máy so khớp mẫu phụ thuộc vào tổng độ dài của các từ khóa
Phương pháp tiếp cận ở đây là sự kết hợp ý tưởng trong thuật toán Morris-Pratt với máy trạng thái hữu hạn
Knuth-|P| = |W1| + |W2| + + |Wk| là kích thước của tập P
Đầu tiên theo thuật toán sẽ xây dựng cây T(P), cây biểu diễn từ các từ khóa của tập P, là cây mà mỗi đỉnh được gán nhãn bằng 1 chữ cái và mỗi nhánh thể hiện từ khóa trong P Ta định nghĩa một nút p trong cây T(P) là 1 từ duy nhất w được biểu diễn bởi đường đi từ gốc Gốc được định nghĩa là 1 từ rỗng ε Chú ý nếu w là 1 nút của T(P) thì
w là tiền tố của một số mẫu Wi
Tiếp theo tổ chức các từ khóa vào cây, khởi tạo chức năng đầu ra output Nó là liên kết đơn {Wi} với nút wi (1 ≤ i ≤ k) và giữa các nút của T(P) không có sự liên kết
Bước kế tiếp thuật toán sẽ xây dựng các failure links của các nút trong cây và đồng thời hoàn thành chức năng đầu ra Chức năng failure được định nghĩa trên các nút như sau:
f(w) = u với u là hậu tố dài nhất của w mà thuộc cây T(P)
Để thực hiện xử lý failure links ta thực hiện duyệt cây T(P), chức năng được hoàn thành trong khi tính toán failure theo cách:
Nếu f(w) = u thì output(w) = output(w) output(u)
Để ngăn chặn việc quay lại với các failure links trong quá trình tính toán của failure links và cũng như xử lý các ký tự văn bản mà không được xác định từ gốc, ta thêm một vòng từ gốc của cây cho các ký tự
Trang 3121
Sau khi tiền xử lý đƣợc hoàn thành, giai đoạn tìm kiếm sẽ duyệt tất cả các ký tự của văn bản S trên cây T(P), nó đƣợc bắt đầu từ gốc của cây T(P) và có thể sử dụng failure links bất kỳ khi nào ký tự trên S không khớp với bất kỳ cạnh đi ra của nút hiện tại Mỗi lần một nút với giá trị non-empty cho chức năng đầu ra và đƣợc bắt gặp, có nghĩa là các mẫu trong chức năng đầu ra của nút đã đƣợc tìm thấy trong văn bản, kết thúc tại vị trí hiện tại, vị trí này chính là kết quả ta cần tìm
Trang 3323
prev = node[node[now].parent].fail;
node[now].fail = node[prev].next[node[now].ch]; node[now].next[i] = node[node[now].fail].next[i]; }
Trang 34finish = new int[parttern.length];
for (int i = 0; i < parttern.length; i++) {
finish[i] = buildTree(parttern[i]);
}
construct_transition();
traverse(s);
Trang 35Đánh giá thuật toán:
Độ phức tạp thuật toán: O(|X| + n)
1.4 Tổng quan về vấn đề đối sánh mẫu xấp xỉ
1.4.1 Bài toán đối sánh mẫu xấp xỉ
Một thách thức lớn trong bài toán đối sánh mẫu là đối sánh mẫu xấp xỉ (approximate search) hay tìm kiếm mờ (fuzzy search) Đối sánh mẫu xấp xỉ cho phép tìm kiếm những thông tin “gần giống”, hướng tiếp cận này trong bài toán tìm kiếm mang lại kết quả mềm dẻo hơn, do đó đáp ứng được yêu cầu thực tế tốt hơn Vấn đề đối sánh mẫu xấp xỉ đặt ra trong nhiều ứng dụng khoa học kỹ thuật khác: nhận dạng chữ viết, nhận dạng ảnh, đồ thị, so sánh xấp xỉ trong xâu nén có độ dài không cố định,…và đặc biệt trong các hệ thống trích rút văn bản
Tìm kiếm xấp xỉ là tìm sự xuất hiện của xâu mẫu trong văn bản, trong đó cả văn bản và xâu mẫu đều có thể có “lỗi” Đây là các “lỗi” có thể nhận ra bằng mắt thường, không xét khía cạnh ngữ nghĩa, do một số ký tự nhất định bị chèn thêm hoặc bị xóa hoặc bị thay thế bởi ký tự khác Ví dụ “văn bản” và “văn bảm” và “văm bảnn”,… Những lỗi này do nhiều nguyên nhân khác nhau, có thể kể ra 1 số nguyên nhân như sau:
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ả, sử dụng dấu chấm câu sai
Do sự biến đổi hình thái từ trong một số ngôn ngữ
Trang 3626
Dữ liệu đưa vào cơ sở dữ liệu không chính xác, thường xuyên xảy ra với tên người, địa chỉ,…
Thay đổi bảng mã của các văn bản
Thông tin đầu vào không chính xác, chỉ “đại loại”
Bài toán so mẫu xấp xỉ chỉ là sự mở rộng từ bài toán so mẫu chính xác và được phát biểu một cách tổng quát như sau:
Cho xâu văn bản S độ 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í xuất hiện của xâu P trên xâu văn bản S, cho phép nhiều nhất k lỗi Số lỗi
k phản ánh giới hạn chấp nhận được về độ tương tự giữa xâu mẫu và xuất hiện của nó trên văn bản
Để đo số “lỗi” trong bài toán so mẫu xấp xỉ (hay còn gọi là so mẫu mờ), thực chất ta phải giải bài toán xác định độ tương tự giữa hai xâu thông qua một hàm khoảng cách (distance function) 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 và kinh điể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
Tuy nhiên, các kỹ thuật trên chủ yếu chỉ 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”, ) Trong những tình huống này, độ tương tự giữa hai xâu dựa trên các hàm khoảng cách kinh điển có thể rất nhỏ, song thực chất chúng lại rất gần nhau về mặt ngữ nghĩa.Kỹ thuật trích rút thông tin truyền thống này (như trong các máy tìm kiếm: Google, ) đơn giản chỉ dựa trên sự xuất hiện của các từ trong văn bản,
Trang 3727
nhược điểm là thường không quan tâm đến ngữ nghĩa Tìm kiếm theo ngữ nghĩa (semantic search) hiện nay được mọi người biết đến là một ứng dụng tất yếu trên Web ngữ nghĩa (Semantic Web) Web ngữ nghĩa là một xu hướng phát triển từ Web truyền thống, trong đó thông tin được gán trước một ngữ nghĩa nào đó (well-defined meaning), đem lại sự kết hợp tốt hơn giữa người và máy tính
1.4.2 Các hàm khoảng cách kinh điển
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 quy ướ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ư:
o Khoảng cách Hamming: phép sửa đổi chỉ là phép thay thế kí tự
o Khoảng cách Levenshtein: phép sửa đổi bao gồm: chèn, xoá và thay thế
Dãy con chung dài nhất (LCS): 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
Trang 3828
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ách tiếp cận giải bài toán so mẫu xấp xỉ
Các thuật toán so mẫu xấp xỉ hiện nay có thể được chia ra thành bốn loại [9]
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
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)
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 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 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
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 so 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