1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các tài liệu

71 38 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 4,9 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA HUỲNH THỊ XUÂN DIỆU ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU Chuyên ngành: Khoa học máy tính Mã số: 60.48.01.01 LUẬN VĂ

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA

HUỲNH THỊ XUÂN DIỆU

ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU

Chuyên ngành: Khoa học máy tính

Mã số: 60.48.01.01

LUẬN VĂN THẠC SĨ

Người hướng dẫn khoa học: PGS.TS Nguyễn Thanh Bình

Đà Nẵng – Năm 2018

Trang 2

Lời đầu tiên tôi xin trân trọng gửi lời cảm ơn đến cán bộ, giáo viên của Phòng Đào tạo và Khoa Công nghệ thông tin, Trường Đại học Bách khoa Đà Nẵng đã tạo mọi điều kiện thuận lợi cho tôi trong thời gian nghiên cứu và hoàn thành Luận văn

Với lòng kính trọng và biết ơn sâu sắc, tôi xin gửi lời cảm ơn đến thầy giáo hướng dẫn PGS.TS.Nguyễn Thanh Bình đã tận tình giúp đỡ tôi xây dựng ý tưởng nghiên cứu, cũng như trong suốt quá trình nghiên cứu và hoàn thiện Luận văn Thầy đã luôn ủng hộ, động viên và hỗ trợ những điều kiện tốt nhất để tôi hoàn thành Luận văn Bên cạnh đó, tôi cũng xin gửi lời cảm ơn đến gia đình và bạn bè, đồng nghiệp đã giúp

đỡ, hỗ trợ tôi nghiên cứu, hoàn thành luận văn

Xin chân thành cảm ơn các thầy, cô trong Hội đồng đã cho tôi những đóng góp quý báu để hoàn chỉnh luận văn này

Xin trân trọng cảm ơn!

TÁC GIẢ

Huỳnh Thị Xuân Diệu

Trang 3

Tôi xin cam đoan rằng những nội dung trong luận văn này là nghiên cứu của

riêng tôi, do tôi tự thực hiện dưới sự hướng dẫn trực tiếp của PGS.TS Nguyễn Thanh

Bình Trong toàn bộ luận văn, những nội dung được trình bày là của chính cá nhân tôi hoặc

là được tổng hợp từ nhiều nguồn tư liệu khác Mọi tài liệu tham khảo dùng trong luận văn

đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố

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

quy định cho lời cam đoan này

NGƯỜI CAM ĐOAN

Trang 4

ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU

Học viên: Huỳnh Thị Xuân Diệu Chuyên ngành: Khoa học máy tính

Mã số: 60.48.01.01 - Khóa: K34, Trường Đại học Bách khoa - ĐHĐN

Tóm tắt - Cây hậu tố là một cấu trúc dữ liệu quan trọng được sử dụng trong rất nhiều

thuật toán xử lý xâu Sức mạnh của cây hậu tố nằm ở khả năng biểu diễn tất cả các hậu tố của một xâu và cung cấp nhiều phép toán quan trọng giúp nâng cao tính hiệu quả của những thuật toán Chính nhờ những tính chất đó mà cây hậu tố được sử dụng rất nhiều trong các lĩnh vực khác nhau như: xử lý văn bản, trích chọn và tìm kiếm thông tin, phân tích dữ liệu sinh học, đối sánh mẫu, nén dữ liệu…

Để đánh giá mức độ giống nhau của văn bản, thường sử dụng các phép đo độ tương tự giữa các văn bản Sự tương đồng giữa hai văn bản là sự giống nhau về nội dung giữa hai văn bản đó Do đó, hai văn bản là bản sao hoặc gần giống nhau thì sẽ

có nội dung giống nhau nhiều, hay độ tương đồng giữa hai văn bản là cao

Luận văn tập trung nghiên cứu, đề xuất phương pháp so sánh văn bản dựa trên cây hậu tố để ứng dụng trong bài toán tính độ tương đồng văn bản, cụ thể là đánh giá mức độ giống nhau của hai văn bản và của một văn bản truy vấn so với tập văn bản mẫu trong kho dữ liệu

Từ khóa – cây hậu tố, độ tương đồng văn bản, bài toán tách câu, khoảng cách Jaro, thuật

toán Ukkonen

APPLICATION SUFFIX TREE TO MATCH THE SIMILARITY

BETWEEN DOCUMENTS

Abstract - Suffix trees are an important data structure used in many string processing

algorithms The strength of the suffix tree lies in its ability to represent all of the suffixes

of a string and provides many important mathematical operations to improve the efficiency of algorithms It is because of these properties that the suffix tree is used extensively in various fields such as word processing, extracting and searching information, biological data analysis, pattern matching, data compression

To evaluate the similarity of text, similarity measurements between texts are often used The similarity between the two texts is the similarity between them Therefore, if the two texts are identical or duplicate, their content will be very similar, or the similarity between the two documents will be high

The thesis focuses on the research, proposing a method of comparing the text based on the suffix trees to be applied in the problem of calculating the similarity of the text, namely the assessment

of the similarity of the two texts and of the text query with sample text file in datastore

Keywords – suffix trees, text match, sentence separation, Jaro distance, Ukkonen algorithm

Trang 5

MỤC LỤC

MỤC LỤC iv

LỜI CAM ĐOAN i

LỜI CẢM ƠN i

DANH MỤC CÁC HÌNH VẼ iii

DANH MỤC CÁC BẢNG iv

MỞ ĐẦU 1

1 LÝ DO CHỌN ĐỀ TÀI 1

2 MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN CỨU 2

3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU 2

4 PHƯƠNG PHÁP NGHIÊN CỨU 2

5 Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN CỦA ĐỀ TÀI 3

6 BỐ CỤC LUẬN VĂN 3

CHƯƠNG 1 NGHIÊN CỨU TỔNG QUAN 4

1.1 Đặt vấn đề 4

1.2 Các thuật tốn so khớp chuỗi 5

1.2.1 Thuật tốn Nạve 5

1.2.2 Thuật tốn Brute – Force 6

1.2.3 Thuật tốn Rabin – Karp 6

1.2.4 Thuật tốn Boyer – Moore 7

1.3 Các cơng cụ hiện cĩ 8

1.3.1 Hệ thống phần mềm Plagiarism Checker 8

1.3.2 Hệ thống phần mềm Dupli Checker 9

1.4 Kết chương 11

CHƯƠNG 2 ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU 12

2.1 Giới thiệu cây hậu tố 12

2.2 Một số khái niệm cơ sở 12

2.2.1 Trie hậu tố 13

2.2.2 Cây hậu tố 15

2.2.3 Chuỗi, chuỗi con, hậu tố và tiền tố 16

2.2.4 Cây hậu tố tổng quát 16

2.2.5 Liên kết hậu tố 17

2.3 Thuật tốn xây dựng cây hậu tố 18

2.3.1 Thuật tốn Ukkonen 18

2.3.2 Ứng dụng cây hậu tố trong bài tốn tìm xâu con chung dài nhất 23

2.4 Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các văn bản 24

2.4.1 Phát biểu bài tốn 24

2.4.2 Xây dựng tập dữ liệu 25

2.5 Mơ hình tổng quát của hệ thống 27

2.5.1 Kiến trúc hệ thống 27

2.5.2 Sơ đồ chi tiết 28

2.6 Phương pháp đo độ tương đồng văn bản 29

2.7 Kết chương 30

Trang 6

CHƯƠNG 3 XÂY DỰNG ỨNG DỤNG VÀ THỬ NGHIỆM 31

3.1 Đặc điểm ngôn ngữ tiếng Việt và bài toán tách câu 31

3.1.1 Câu và cấu trúc câu trong tiếng Việt 31

3.1.2 Bài toán tách câu 35

3.2 Môi trường cài đặt 36

3.3 Kết quả thử nghiệm và đánh giá 36

3.3.1 Kết quả thử nghiệm 36

3.3.2 Đánh giá kết quả 43

3.4 Kết chương 43

KẾT LUẬN 44

TÀI LIỆU THAM KHẢO 45 PHỤ LỤC

QUYẾT ĐỊNH GIAO ĐỀ TÀI LUẬN VĂN (bản sao)

Trang 7

DANH MỤC CÁC HÌNH VẼ

Hình 1.1 Minh họa giải thuật Nạve 5

Hình 1.2 Giao diện web của Plagiarism Checker Software 8

Hình 1.3 Kiểm tra nội dung giống nhau trên Plagiarism Checker Software 8

Hình 1.4 Kết quả so khớp với Plagiarism Checker Software 9

Hình 1.5 Giao diện web của Dupli CheckerSoftware 10

Hình 1.6 Kết quả so khớp với Dupli CheckerSoftware 11

Hình 2.1 Trie 13

Hình 2.2 Vai trị của ký tự cầm canh @ 14

Hình 2.3 Trie hậu tố 15

Hình 2.4 Cây hậu tố của chuỗi bbabab 16

Hình 2.5 Cây hậu tố tổng quát cho chuỗi S1=TACTAG; S2 = CACT 17

Hình 2.6 Cây hậu tố tổng quát và các liên kết 17

Hình 2.7 Cây hậu tố ngầm định cho xâu axabx trước (a) và sau (b) khi thêm ký tự thứ sáu b 19

Hình 2.8 Bước mở rộng j > 1 trong pha i Đi lên tối đa là cạnh từ cuối đường đi S[j-1 i] đến nút v sau đĩ theo liên kết hậu tố đến s(v), đi xuống theo đường đi cĩ nhãn  rồi áp dụng luật bổ sung phù hợp để thêm hậu tố S[j i+1] 20

Hình 2.9 Quá trình thực hiện của thuật tốn 22

Hình 2.10 Mơ hình kiến trúc của hệ thống 27

Hình 2.11 So sánh hai văn bản 28

Hình 2.12 So sánh văn bản với tập văn bản nguồn 29

Hình 3.1 Giao diện chương trình 38

Hình 3.2 So sánh 2 văn bản giống nhau hồn tồn cho kết quả tỉ lệ so khớp là 100% 38 Hình 3.3 So sánh 2 văn bản khác nhau hồn tồn cho kết quả tỉ lệ so khớp là 0% 39

Hình 3.4 So sánh 2 văn bản bất kỳ 40

Hình 3.5 Xem lịch sử chương trình 40

Trang 8

DANH MỤC CÁC BẢNG

Bảng 1.1 Thuật toán Naive 5

Bảng 1.2 Thuật toán Rabin - Karp 6

Bảng 1.3 So sánh và đánh giá một số thuật toán so khớp chuỗi 7

Bảng 2.1 Thuật toán Ukkonen dựng cây hậu tố ngầm định 21

Bảng 2.2 Thủ tục tìm LCS sử dụng cây hậu tố 26

Bảng 3.1 Các tài liệu mẫu để so với giá trị ước lượng 37

Bảng 3.2 Kết quả của chương trình so với giá trị ước lượng 37

Bảng 3.3 Thống kê tỉ lệ giống nhau của văn bản 1 (VB1) so với các văn bản khác trong kho dữ liệu theo từ và câu 41

Bảng 3.4 Thống kê tỉ lệ giống nhau của hai văn bản bất kỳ 43

Trang 9

Hiện nay, dữ liệu được lưu trữ dưới nhiều hình thức khác nhau, nhưng văn bản

vẫn là hình thức chủ yếu để lưu trữ và trao đổi thông tin

Ngày nay, với sự phát triển mạnh mẽ của Internet, dữ liệu văn bản đã trở nên phong phú về nội dung và tăng nhanh về số lượng Chỉ bằng một vài thao tác đơn giản, tại bất kỳ đâu, tại bất kỳ thời điểm nào, ta cũng có thể nhận về một khối lượng khổng lồ các trang web và các tài liệu điện tử liên quan đến nội dung tìm kiếm Chính sự dễ dàng này, dẫn đến tình trạng sao chép, vi phạm bản quyền và gian dối, chống đối trong các kết quả học tập, nghiên cứu diễn ra khá sôi nổi và khó kiểm soát Đặc biệt, trong lĩnh vực giáo dục – đào tạo, việc người học tham khảo và chép bài của nhau là phổ biến, làm giảm khả năng tư duy và chất lượng nghiên cứu, học tập Vấn đề đặt ra là, làm thế nào

để xác định phép đo độ giống nhau giữa các văn bản, trên cơ sở đó đưa ra những kết luận về việc sao chép bài, làm căn cứ để phân loại và đánh giá kết quả bài luận, nghiên

cứu của người học

Trong nhiều lĩnh vực như tìm kiếm, so khớp, trích chọn thông tin… một lượng lớn dữ liệu thường được lưu trữ trong các tập tin tuyến tính và khối lượng dữ liệu thu thập được tăng lên rất nhanh nên đòi hỏi phải có các thuật toán xử lý và so khớp dữ liệu

văn bản hiệu quả

So khớp chuỗi là một chủ đề quan trọng trong lĩnh vực xử lý văn bản Các thuật toán so khớp chuỗi được xem là những thành phần cơ sở được ứng dụng trong các hệ thống thực tế Hơn thế nữa, các thuật toán đối sánh chuỗi còn cung cấp các nền tảng, mô hình cho nhiều lĩnh vực khác nhau của khoa học máy tính như xử lý ngôn ngữ tự nhiên, khai thác dữ liệu văn bản, tin y sinh… Vì vậy, chúng tôi nghiên cứu các thuật toán so

khớp chuỗi để có thể ứng dụng trong bài toán tính độ tương đồng văn bản

Để đánh giá mức độ giống nhau của văn bản, thường sử dụng các phép đo độ tương tự giữa các văn bản Sự tương đồng giữa hai văn bản là sự giống nhau về nội dung giữa hai văn bản đó Do đó, hai văn bản là bản sao hoặc gần giống nhau thì sẽ có nội dung giống nhau nhiều, hay độ tương đồng giữa hai văn bản là cao

Đã có nhiều công trình nghiên cứu về đánh giá độ tương tự giữa các văn bản và

có thể sử dụng trực tuyến như Plagiarism Checker, Turnitin, Dupli Checker Tuy nhiên, những hệ thống này chỉ cho phép phát hiện sự trùng lặp trong nguồn cơ sở dữ liệu gốc và chỉ thực hiện được trực tuyến trên môi trường có Internet Bên cạnh đó, việc mở

Trang 10

rộng cơ sở dữ liệu mẫu theo yêu cầu người sử dụng trở nên khó khăn và chi phí rất cao

Với bài toán đặt ra như trên, chúng tôi đã tìm hiểu, nghiên cứu các phương pháp,

kỹ thuật biểu diễn và so khớp văn bản… và quyết định chọn đề tài “Ứng dụng cây hậu

tố để so khớp độ giống nhau giữa các tài liệu” làm đề tài tốt nghiệp luận văn cao học

2 MỤC TIÊU VÀ NHIỆM VỤ NGHIÊN CỨU

2.1 Mục tiêu nghiên cứu

Mục tiêu nghiên cứu của đề tài là xây dựng ứng dụng trong đó sử dụng thuật toán

so khớp chuỗi để phát hiện nội dung giống nhau giữa các tài liệu

2.2 Nhiệm vụ chính của đề tài

- Nghiên cứu về cấu trúc tài liệu dạng văn bản

- Tìm hiểu về phương pháp và kỹ thuật tách câu tiếng Việt

- Tìm hiểu các thuật toán tìm kiếm và so khớp chuỗi

- Xây dựng chương trình ứng dụng để so sánh độ giống nhau giữa các tài liệu

3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU

3.1 Đối tượng nghiên cứu

Đối tượng nghiên cứu của đề tài tập trung vào các nội dung:

- Cấu trúc tài liệu dạng văn bản

- Phương pháp và kỹ thuật tách câu tiếng Việt

- Các thuật toán tìm kiếm và so khớp chuỗi

3.2 Phạm vi nghiên cứu

- Tài liệu bằng ngôn ngữ tiếng Việt

- Xử lý văn bản theo cây hậu tố để phục vụ đánh giá mức độ giống nhau của văn bản tiếng Việt

4 PHƯƠNG PHÁP NGHIÊN CỨU

- Nghiên cứu lý thuyết:

 Thu nhập, phân tích các tài liệu và thông tin liên quan đến đề tài như: mô hình đặc trưng văn bản tiếng Việt, kỹ thuật tách câu tiếng Việt, các thuật toán tìm kiếm và so khớp chuỗi

 Tìm hiểu các tài liệu mô tả một số công cụ so khớp văn bản và các tài liệu liên quan

- Nghiên cứu ứng dụng: Nghiên cứu các công cụ, đề xuất thuật toán và xây dựng

Trang 11

Báo cáo của luận văn được tổ chức thành 3 chương chính:

Chương 1 Nghiên cứu tổng quan

Trong chương này, chúng tôi trình bày tổng quan về các thuật toán tìm kiếm và so khớp mẫu hiện có, giới thiệu một số ứng dụng tương tự

Chương 2 Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các tài liệu

Chương 2 được dành để trình bày khái niệm và các vấn đề liên quan đến cây hậu

tố, xác định và phân tích bài toán, cách tính độ đo tương đồng

Chương 3 Xây dựng ứng dụng và thử nghiệm

Trong chương này, chúng tôi trình bày tổng quan về đặc điểm ngôn ngữ tiếng Việt, lựa chọn công cụ phát triển, xử lý tài liệu đầu vào để đưa vào ứng dụng Giới thiệu các bước triển khai, xây dựng chương trình, đánh giá kết quả

Trang 12

CHƯƠNG 1 NGHIÊN CỨU TỔNG QUAN

1.1 Đặt vấn đề

Đánh giá sự giống nhau giữa các văn bản được ứng dụng vào nhiều mục đích khác nhau như: phân loại văn bản, tóm tắt văn bản, truy vấn thông tin, tìm kiếm… Đây không còn là vấn đề mới, đã có nhiều nghiên cứu được thực hiện với nhiều giải pháp khác nhau được đưa ra Với những khảo sát và nghiên cứu liên quan, các hệ thống phát hiện sự giống nhau của văn bản (hay sao chép văn bản) hầu hết đều dựa vào phương pháp so khớp chuỗi với bộ sưu tập các tài liệu nguồn (hay kho dữ liệu)

Quá trình xử lý trong hệ thống phát hiện sự giống nhau của văn bản thực hiện qua nhiều công đoạn, trong đó việc nghiên cứu đề xuất các thuật toán so sánh văn bản là một nhiệm vụ rất quan trọng Từ những kết quả khảo sát, chúng ta có thể hình thức hóa bài

toán phát hiện sự giống nhau của tài liệu văn bản như sau: Cho một văn bản T gọi là văn bản kiểm tra (hay nghi ngờ) và P là một tập hợp các văn bản nguồn (hay một kho dữ liệu) Vấn đề là phải xác định mức độ tương tự của văn bản T với các văn bản D trong P Nếu độ tương tự của T với các văn bản trong P là lớn thì T được coi là giống với các văn bản trong P Việc đo độ tương tự của hai văn bản thường dựa trên việc đo độ tương tự giữa các thành phần đơn vị trong T với các thành phần đơn vị của các văn bản trong P,

các thành phần đơn vị này có thể là từ, cụm n từ, câu, hay cả đoạn

Cho P[1 n] là một chuỗi bao gồm n ký tự, trong đó các P[i], 1<=i<=n là từng ký

tự ở trong chuỗi Cho T[1 m] là chuỗi mẫu bao gồm m ký tự, m<=n Ta giả sử rằng P và

T chỉ chứa các ký tự có trong tập hữu hạn S Ví dụ S={0, 1} hoặc S={a, b, c,…, z} Vấn

đề đặt ra là tìm xem T có xuất hiện trong P hay không Hay nói cách khác là tìm số nguyên s (0<s<n) sao cho P[s+1 s+n] = T[1 m]

Cho chuỗi T[1 n], một chuỗi con của T được định nghĩa là T[i j] với 1<=i, j<=n Chuỗi con này chứa các ký tự từ chỉ số i đến chỉ số j của mảng các ký tự trong T Lưu ý rằng T cũng chính là một chuỗi con của T với i=1, j=n

Một chuỗi con thực sự của chuỗi T[1 n] là chuỗi T[i j] với i<j và (i>0 hoặc j<n) Trong trường hợp i > j thì T[i j] là một chuỗi rỗng Tiền tố của một chuỗi T[1 n] là chuỗi T[1 i] với 1<=i<=n Hậu tố của một chuỗi T[1 n] là chuỗi T[j n] với 1<=j<=n

Trang 13

1.2 Các thuật tốn so khớp chuỗi

1.2.1 Thuật tốn Nạve

Đây là giải thuật cơ bản và đơn giản nhất Giải thuật này kiểm tra tất cả các khả

năng của chuỗi mẫu P[1 m] nằm trong chuỗi T[1 n] bằng cách duyệt từ đầu tới cuối chuỗi T, và đưa ra kết quả so khớp Phương pháp này cịn gọi là cách tiếp cận ngây thơ

8 “Tìm thấy mẫu với độ dịch chuyển s”

Hình 1.1 Minh họa giải thuật Nạve

Phân tích: vịng lặp while bên trong chạy tối đa m lần, vịng lặp for bên ngồi chạy tối đa n-m+1 lần Do vậy, thời gian chạy của giải thuật này là T(n) = O((n-m+1)*m) =

Trang 14

1.2.2 Thuật toán Brute – Force

Thuật toán Brute – Force [9] là một thuật toán theo kiểu vét cạn Bằng cách dịch

chuyển biến đếm j từ trái sang phải lần lượt từng ký tự của tập tin văn bản có chiều dài n Sau đó lấy m ký tự liên tiếp trong s (bắt đầu từ vị trí j) tạo thành một chuỗi phụ r So sánh r với p, nếu giống nhau thì trả về kết quả Thực hiện lại quá trình trên cho đến khi j

> n-m+1 Thuật toán này không có bước tiền xử lý

Xuất phát từ ý tưởng vét cạn nên Brute – Force có một số đặc điểm là ít tốn không gian bộ nhớ và không sử dụng thệm mảng phụ để lưu trữ

Thuật toán Brute – Force so khớp tất cả các vị trí xuất hiện của đoạn mẫu trong văn bản nên trong trường hợp xấu nhất thuật toán Brute – Force có độ phức tạp thực thi

là O(n*m)

1.2.3 Thuật toán Rabin – Karp

Thuật toán này do Michael Rabin và Richard Karp đề xuất [12] Ý tưởng trung tâm của thuật toán là sử dụng hàm băm để chuyển đổi mỗi xâu thành một số nguyên và phép toán so sánh hai xâu được đưa về phép toán so sánh các số nguyên

Ta nhận thấy rằng mỗi chuỗi S cấu tạo từ S đều có thể số hóa thành 1 số được Ví

Trang 15

Nhưng trong trường hợp xấu nhất thì việc so sánh phải thực hiện thêm lệnh kiểm tra

P[1 m]và T[i+1 i+m], điều này chỉ tiêu tốn O(m)thời gian thực thi Vì vậy, độ phức tạp

của thuật tốn Rabin - Karp là O(n*m)

1.2.4 Thuật tốn Boyer – Moore

Thuật tốn Boyer – Moore [11] kiểm tra các ký tự của mẫu từ phải sang trái và khi phát hiện sự khác nhau đầu tiên thì thuật tốn sẽ tiến hành dịch cửa sổ đi Trong

thuật tốn này, với ý tưởng là giả sử cĩ chuỗi s và chuỗi p, cần tìm p trong s; bắt đầu kiểm tra các ký tự của p và s từ phải sang trái và khi phát hiện sự khác nhau đầu tiên, thuật tốn sẽ tiến hành dịch p qua phải để thực hiện so sánh tiếp

Thuật tốn Boyer – Moore cĩ độ phức tạp trong trường hợp tốt nhất là O(n/m)

Tuy nhiên vì cách dịch này khơng phân tích triệt để các thơng tin của những lần thử trước, những đoạn đã so sánh rồi vẫn cĩ thể bị so sánh lại nên độ phức tạp thực thi của

thuật tốn này thơng thường là O(n*m)

Bảng 1.3 So sánh và đánh giá một số thuật tốn so khớp chuỗi

Thuật tốn

Độ phức tạp

Đánh giá Tiền

xử lý

So khớp

Nạve O(m*n) Thuật tốn lần lựơt xét từng vị trí trong xâu ký tự

gốc nên số bước thực hiện lớn

Brute – Force O(m*n) Theo kiểu vét cạn nên độ phức tạp lớn

Rabin - Karp O(m) O(m*n) So sánh dựa trên giá trị băm, tính tốn nhanh,

khơng phụ thuộc vào chuỗi cần tìm kiếm

Tiết kiệm bộ nhớ đệm vì khơng lưu lại nhiều kết quả tìm kiếm trước đĩ

Boyer – Moore O(m) O(m*n) Sử dụng hai hàm dịch chuyển, từ phải sang trái,

cho kết quả tìm kiếm nhanh

Trang 16

1.3 Các công cụ hiện có

1.3.1 Hệ thống phần mềm Plagiarism Checker

Plagiarism Checker Software là một sản phẩm của Plagiarisma.Net (trang chủ tại https://plagiarisma.net) Với phần mềm này, chúng ta có thể kiểm tra được những tài liệu của mình có trùng lặp hoặc sao chép từ các tài liệu khác được đăng tải trên các trang mạng hay không Phần mềm miễn phí này cung cấp tìm kiếm trên các công cụ tìm kiếm phổ biến như Google, Bing, … Phần mềm cũng sẽ hữu ích cho các blogger, những người

có thể muốn kiểm tra nếu bài viết của họ đã được sao chép hoặc ăn cắp ý tưởng của người khác

Giao diện của Plagiarism Checker Software như sau:

Hình 1.2 Giao diện web của Plagiarism Checker Software

Để thực hiện kiểm tra chỉ cần dán nội dung được kiểm tra vào thẻ của chương trình, hoặc hỗ trợ người dùng có thể tải một tập tin văn bản (doc, txt, htm, pdf, odt, rtf ) vào chương trình để thực hiện kiểm tra nội dung trùng lặp một cách nhanh chóng

Hình 1.3 Kiểm tra nội dung giống nhau trên Plagiarism Checker Software

Trang 17

Mỗi câu được phân tích kỹ lưỡng và một khi tìm kiếm hoàn thành, kết quả được hiển thị trong một cửa sổ chương trình mới

Hình 1.4 Kết quả so khớp với Plagiarism Checker Software

Ưu điểm:

Plagiarism Checker Software có một số ưu điểm:

- Tránh được hiện tượng đạo văn và phát hiện trùng lặp nội dung

- Chỉ có các tên miền gốc được hiển thị trong cửa sổ kết quả kiểm tra

- Chương trình chỉ có thể thực hiện kiểm tra trực tuyến cho nội dung trùng lặp

1.3.2 Hệ thống phần mềm Dupli Checker

DupliChecker.com là một phần mềm kiểm tra đạo văn trực tuyến miễn phí

Nếu bạn chỉ cần thực hiện kiểm tra nhanh, một lần, chỉ cần dán văn bản của bạn vào hộp văn bản được chỉ định nằm ở đầu trang Nó sẽ cho bạn kết quả ngay lập tức mà

Trang 18

không cần đăng ký

Hình 1.5 Giao diện web của Dupli CheckerSoftware

Bởi vì phần mềm là trực tuyến, nên nó có sẵn bất cứ nơi nào bạn muốn và có thể được sử dụng trên bất kỳ thiết bị nào của bạn

Sử dụng DupliChecker.com theo một trong hai cách sau:

 Dán văn bản vào hộp tìm kiếm, với tối đa 1000 từ cho mỗi tìm kiếm

 Tải lên tệp Docx hoặc Text của bạn bằng nút duyệt

Khi yêu cầu của bạn được gửi để xử lý, kết quả của bạn sẽ hiển thị trong vài giây Nếu không tìm thấy kết quả phù hợp nào, thông báo sẽ hiển thị “Không phát hiện

ra Đạo văn!”

Trong trường hợp có các trùng lặp được tìm thấy, DupliChecker.com sẽ hiển thị văn bản có liên quan cũng như nguồn mà nó bắt nguồn từ đó

Trang 19

Hình 1.6 Kết quả so khớp với Dupli CheckerSoftware

1.4 Kết chương

Chương 1 đã nghiên cứu các thuật toán so khớp chuỗi để có thể ứng dụng vào bài toán so sánh văn bản Thực tế tùy thuộc vào mô hình, dữ liệu, chúng ta có thể phát triển các thuật toán so khớp chuỗi cho phù hợp với yêu cầu Tìm hiểu một số công cụ hiện có trong việc phát hiện nội dung giống nhau giữa các tài liệu Tiếp theo trong chương 2, chúng tôi sẽ trình bày một thuật toán về so khớp chuỗi và ứng dụng của nó trong bài

toán so khớp độ giống nhau giữa các tài liệu

Trang 20

CHƯƠNG 2 ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA

CÁC TÀI LIỆU

2.1 Giới thiệu cây hậu tố

Cây hậu tố (suffix trees) [2] là một cấu trúc dữ liệu quan trọng được sử dụng trong rất nhiều thuật toán xử lý xâu Sức mạnh của cây hậu tố nằm ở khả năng biểu diễn tất cả các hậu tố của một xâu và cung cấp nhiều phép toán quan trọng giúp nâng cao tính hiệu quả của những thuật toán Chính nhờ những tính chất đó mà cây hậu tố được sử dụng rất nhiều trong các lĩnh vực khác nhau như: xử lý văn bản, trích chọn và tìm kiếm thông tin, phân tích dữ liệu sinh học, đối sánh mẫu, nén dữ liệu… Cây hậu tố cho một chuỗi S là một cây có các cạnh được gắn nhãn với các chuỗi, sao cho mỗi hậu tố của S tương ứng với đúng một đường đi từ gốc đến hậu tố đó, nó có thể sử dụng như một sơ đồ (diagram) của trạng thái dịch chuyển

Một trong những điểm mạnh của cây hậu tố là cho phép thay đổi và mở rộng cấu trúc mỗi khi có sự cập nhật dữ liệu mới Tính chất này có thể xử lý trên một tập dữ liệu lớn với nhiều dạng dữ liệu khác nhau, sẽ tiết kiệm được thời gian và không gian xử lý dữ liệu

Bên cạnh ưu điểm là một cấu trúc dữ liệu mạnh, các thuật toán trực tiếp xây dựng cây hậu tố có nhược điểm là phức tạp và tốn bộ nhớ

2.2 Một số khái niệm cơ sở

Gọi Ʃ là một tập hữu hạn có thứ tự gọi là bảng chữ cái (alphabet), các phần tử € Ʃ

được gọi là ký tự Ʃ* là tập các xâu (string) gồm các ký tự € Ʃ Có thể coi mỗi xâu € Ʃ* là một dãy hữu hạn tử € Ʃ Ký hiệu ε là xâu rỗng, tập các xâu khác rỗng được gọi là Ʃ+ = Ʃ – {ε}

Chiều dài của một xâu x, ký hiệu |x|, là số ký tự trong xâu x Các ký tự trong xâu x được đánh số từ 0 tới |x| - 1: x = x 0 x 1 …x |x|-1

Xâu nối của hai xâu x và y, ký hiệu xy, có chiều dài |x| + |y| và taọ thành bằng cách lấy các ký tự trong xâu x sau đó nối tiếp với các ký tự trong xâu y

Gọi xâu w là tiền tố (prefix) của xâu x, ký hiệu w ͼ x, nếu tồn tại xâu y để x

= wy, xâu w được gọi là hậu tố (suffix) của xâu x, ký hiệu w ͽ x, nếu tồn tại xâu y để x =

yw Dễ thấy rằng nếu w là tiền tố hoặc hậu tố của x thì |w| ≤ |x| Một xâu có thể vừa là

tiền tố vừa là hậu tố của một xâu khác Ví dụ ABA vừa là tiền tố vừa là hậu tố của xâu

ABABA Xâu rỗng vừa là tiền tố vừa là hậu tố của tất cả các xâu

Hai quan hệ ͽ, ͼ có tính bắc cầu, tức là:

Nếu x ͼ y và y ͼ z thì x ͼ z

Trang 21

Chiều dài của xâu ῡ: |ῡ| được gọi là độ sâu của nút v, ký hiệu depth(v) Theo cấu

trúc của trie, hai nút khác nhau phải có xâu nhãn khác nhau

 Có tương ứng 1-1 giữa các xâu với các nút lá trên trie: trie có đúng n lá và

Ʃ làm ký tự cầm canh mà ta ký hiệu là @: mỗi xâu sẽ được nối thêm ký tự @ vào

cuối xâu để đảm bảo không có xâu nào là tiền tố của một xâu khác Hình 3 là ví dụ về trie biểu diễn tập gồm 2 xâu: ABC@ và AB@ Có thể thấy rằng khi sử dụng ký tự cầm canh thì mọi cạnh trên trie nối tới nút lá đều mang nhãn @

Trang 22

Hình 2.2 Vai trò của ký tự cầm canh @

Nếu S là tập các hậu tố khác rỗng của một xâu + thì trie biểu diễn S đƣợc gọi là trie hậu tố (suffix trie) của T Để thỏa mãn tính chất phi tiền tố của tập S, ta coi xâu T có một ký tự cầm canh @ đúng cuối cùng còn mọi ký tự khác trong T đều không

Trang 23

Hình 2.3 Trie hậu tố

2.2.2 Cây hậu tố

Cây hậu tố T của chuỗi |S| kí tự của S là cây có hướng, có gốc và có các tính chất

sau:

- Các đường đi từ gốc đến lá tương ứng 1 - 1 với các hậu tố của S

- Mỗi nút trong, trừ nút gốc, có ít nhất là hai con

- Mỗi cạnh được gán nhãn bằng một chuỗi con (không rỗng) của chuỗi S

- Các cạnh bất kỳ xuất phát từ một nút chung phải bắt đầu bằng các ký tự khác

nhau

- Đối với mỗi nút lá thứ i, có nhãn là đường đi từ nút gốc đến nút đó biểu diễn hậu

tố (suffix) thứ i của chuỗi S

Để đảm bảo luôn dựng được cây hậu tố của chuỗi S người ta thêm một ký tự đặc biệt ($) vào cuối chuỗi S, gọi là kí tự kết thúc, như vậy sẽ không có hậu tố nào là tiền tố

Trang 24

của một hậu tố khác Ví dụ cây hậu tố T(bbabab)

Hình 2.4 Cây hậu tố của chuỗi bbabab

Trong ví dụ minh họa cây hậu tố T của chuỗi = bbabab$ có bảy hậu tố là bbabab$, babab$, abab$, bab$, ab$, b$ và $ được đánh số từ 1 đến 7 như hình vẽ, nhãn

của nút w là ab, nhãn của nút u là b và xâu baba là nhãn của đường đi từ gốc đến giữa cạnh (u, 2)

Sau đây là một số khái niệm liên quan đến cây hậu tố:

2.2.3 Chuỗi, chuỗi con, hậu tố và tiền tố

Một chuỗi S là danh sách các ký tự trên bảng chữ cái ∑ (có |∑| ký tự) được viết

liên tục từ trái sang phải Bất kỳ xâu con S[i j] thu được cũng là một xâu ký tự liên tục

trong S, có vị trí bắt đầu tại i và kết thúc tại j Đặc biệt, S[1 i] là tiền tố của S kết thúc tại

vị trí i và S[i |S|] là hậu tố của S bắt đầu tại vị trí i

2.2.4 Cây hậu tố tổng quát

Cây hậu tố tổng quát là một cây hậu tố được xây dựng cho tập các chuỗi S i Mỗi

nút lá lúc này nhận hai giá trị, một là chuỗi (i); hai là vị trí bắt đầu (hậu tố) của chuỗi đó

Để giải quyết bài toán xâu con chung của hai hay nhiều chuỗi chúng ta cần mở rộng khái niệm cây hậu tố để chứa nhiều chuỗi khác nhau trong một cấu trúc dữ liệu

chung, ta sử dụng cây hậu tố tổng quát, ví dụ cây hậu tố tổng quát T cho hai chuỗi

S 1 =TACTAG và S 2 =CACT

Trang 25

Hình 2.5 Cây hậu tố tổng quát cho chuỗi S1=TACTAG; S2 = CACT

Độ sâu chuỗi của một nút v trong cây T là P(v), là tổng của tất cả độ dài cạnh trên đường đi từ gốc đến nút v, đường đi chính là chuỗi nhãn của nút v

2.2.5 Liên kết hậu tố

Cho x biểu diễn một chuỗi bất kỳ, trong đó x biểu diễn ký tự đơn và  biểu diễn

một chuỗi con (có thể rỗng) Xét nút trong v với chuỗi nhãn x, nếu có một nút khác s(v)

có nhãn là , một con trỏ từ v đến s(v) được gọi là liên kết hậu tố (suffix link) Trường hợp đặc biệt nếu  rỗng thì x có liên kết hậu tố được trỏ đến gốc (root) Nút gốc không

được coi là nút trong và không có liên kết hậu tố nào bắt đầu từ nó Ví dụ như hình dưới đây, liên kết hậu tố được thể hiện là đường nét gạch nối

Hình 2.6 Cây hậu tố tổng quát và các liên kết

Trang 26

2.3 Thuật toán xây dựng cây hậu tố

Vào năm 1973, Weiner đã đưa ra thuật toán cài đặt cây hậu tố với độ phức tạp tuyến tính về thời gian, đến năm 1976 McCreight đã phát triển một thuật toán hiệu quả hơn về không gian, và đến 1995 Ukkonen đã cung cấp giải thuật dựng cây hậu tố đơn giản, dễ hiểu và tối ưu hơn hai thuật toán kia và được gọi là thuật toán Ukkonen Dưới đây chúng tôi xin được trình bày thuật toán dựng cây hậu tố của Ukkonen [8]

2.3.1 Thuật toán Ukkonen

 Dựng cây hậu tố ngầm định (implicit suffix tree)

Cây hậu tố ngầm định của chuỗi S là cây nhận được từ cây hậu tố của S sau các

bước xử lý:

i) Xóa tất cả các ký tự kết thúc $ trong các nhãn

ii) Xóa các cạnh không có nhãn (cạnh rỗng)

iii) Xóa các nút có ít hơn 2 con

Thuật toán: Gọi cây T i là cây hậu tố ngầm định cho S[1 i] Ý tưởng xây dựng của thuật toán là cập nhất cây T từ cây T2,…T m+1 trong m pha Thêm ký tự S[m+1]=$ thì việc

mở rộng cuối cùng ta được cây hậu tố ngầm định chính là cây hậu tố của S$

Đầu tiên ta có cây T1 với một cạnh duy nhất chứa S1 Pha i+1 được chia nhỏ thành

i+1 bước mở rộng trong đó ta thêm ký tự S i+1 vào hậu tố S[j i] của xâu S[1 i] Tại bước

mở rộng j, xét đường đi từ gốc có nhãn = S[j i] và thực hiện một trong ba luật mở rộng

sau đây:

1) Nếu  là nhãn của một nút lá: ký tự S i+1 được thêm vào cạnh nối với nút lá đó 2) Nếu không có đường đi từ  bắt đầu bằng S i+1 nhưng có ít nhất một đường đi nối tiếp : trường hợp này ta thêm một cạnh có nhãn là S i+1, nếu  kết thúc ở giữa một cạnh thì tạo một nút mới

3) Nếu có đường đi nối tiếp  bắt đầu bằng S i+1: không làm gì và chuyển sang bước tiếp theo

Tại bước mở rộng i+1 của pha i+1,  là xâu rỗng, thuật toán đơn giản thêm ký tự

S i+1 bên dưới nút gốc (trừ khi nó đã có)

Xét ví dụ trong hình 2.7 bốn hậu tố đầu tiên kết thúc ở nút lá, hậu tố cuối cùng chỉ

gồm ký tự x kết thúc bên trong mỗi cạnh Khi thêm ký tự thứ sáu b, bốn hậu tố đầu tiên

được mở rộng bằng luật 1, hậu tố thứ năm sử dụng luật 2 và với hậu tố thứ sáu là luật 3

Trang 27

Hình 2.7 Cây hậu tố ngầm định cho xâu axabx trước (a) và sau (b) khi thêm ký tự thứ

sáu b

Dễ dàng thấy rằng ta có thể tìm thấy điểm kết thúc của mỗi hậu tố trong i+1 hậu

tố của xâu S[1 i] bằng cách duyệt cây từ gốc với chi phí thời gian là O(||) Trong thuật

toán Ukkonen, mỗi nút trong mới được tạo ra sẽ có một liên kết hậu tố khi pha tiếp theo kết thúc Liên kết hậu tố có thể được sử dụng để giảm độ phức tạp khi thao tác

Đường đi có nhãn S[1 i] chắc chắn phải kết thúc ở lá và nó có đường đi dài nhất trong cây T i Khi xây dựng cây T i ta lưu lại nút lá tương ứng với toàn bộ xâu đang xét

S[1 i] Bước bổ sung đầu tiên của pha i+1 lấy nút lá này và áp dụng luật thứ nhất do đó

chỉ cần thời gian hằng số [4]

Đặt S[1 i] = x và (v, 1) là cạnh đến nút lá, nhãn của cạnh là , bước mở rộng

tiếp theo thuật toán cần tìm đường đi có nhãn là S[2 i] = Nếu v là nút gốc, ta duyệt

cây từ gốc theo thuật toán trước Nếu v không phải nút gốc thì có liên kết hậu tố từ v đến nút s(v), ta bắt đầu duyệt cây từ nút s(v) Đường đi từ vị trí hiện tại có nhãn  là đường đi

từ gốc có nhãn 

Tại bước mở rộng thứ j với j > 2 ta cũng làm tương tự Bắt đầu và kết thúc của

S[j-1 i] là nhãn của một nút trong, khi đó ta có liên kết hậu tố của nút này Kể cả khi xâu S[j-1 i] kết thúc ở một nút lá thì nút cha của nó hoặc là một nút trong (do đó có liên kết

hậu tố) hoặc là nút gốc Vậy ta không bao giờ phải đi ngược lên quá một cạnh

Trang 28

Hình 2.8 Bước mở rộng j > 1 trong pha i Đi lên tối đa là cạnh từ cuối đường đi 1 i] đến nút v sau đó theo liên kết hậu tố đến s(v), đi xuống theo đường đi có nhãn rồi

S[j-áp dụng luật bổ sung phù hợp để thêm hậu tố S[j i+1]

Việc tìm đường đi có nhãn  theo cách thông thường cần thời gian O(||), do đường đi nhãn  chắc chắn tồn tại và không có hai cạnh nào cùng xuất phát từ một đỉnh

có nhãn bắt đầu cùng một ký tự nên ta có thể dựa vào ký tự đầu nhãn và độ dài của cạnh

để tìm ra điểm kết thúc của đường đi trong thời gian tỉ lệ với số nút trên đường đi

Gọi (v, s(v)) là một liên kết hậu tố, thì độ sâu nút của v tối đa lớn hơn độ sâu nút của s(v) một đơn vị Với mỗi nút v trên đường đi x, có một nút s(v) trên đường đi

Tuy nhiên, độ sâu của v có thể lớn hơn, bằng hoặc nhỏ hơn độ sâu của nút s(v) một đơn

vị

Mặc dù đã được cải thiện tại mỗi pha của thuật toán Ukkonen có thể được thực hiện trong thời gian O(m) Tuy nhiên đến đây chúng ta vẫn thấy rằng độ phức tạp của nó được thực hiện trong thời gian O(m2

)

Để thuật toán dựng cây hậu tố ngầm định đạt được trong thời gian tuyến tính chúng ta có một số nhận xét sau đây:

Nhận xét 1: Luật mở rộng 3 kết thúc mỗi pha [14]

Nếu luật 3 được áp dụng nghĩa là đường đi có nhãn S[j i] chắc chắn được nối tiếp bằng ký tự S i+1 nên tất cả các đường đi có nhãn S[k i] với k > j Gọi j* là chỉ số của bước

mở rộng đầu tiên khi luật 3 được áp dụng Theo đó ta không cần thực hiện các bước mở

rộng k với k > j* trong pha hiện tại

Nhận xét 2: Khi đã là nút lá thì luôn luôn là nút lá [14]

Rõ ràng trong 3 luật mở rộng không có luật nào cho phép thêm một nút lá mới bên dưới một nút lá có nhãn  Do đó khi một nút lá đã được tạo ra thì nó sẽ luôn luôn là nút lá cho đến khi pha cuối cùng của thuật toán kết thúc

Trang 29

Với nhận xét trên gợi ý cách cài đặt hiệu quả thuật toán: thay vì cập nhật nhãn của

các nút lá một cách tường minh, ta gán nhãn cho các nút lá là cặp (p,) Trong đó p là vị

trí bắt đầu của xâu con và  là vị trí kết thúc của xâu con trong S, thay thế cho vị trí cuối

xâu đang xét Như vậy trong pha i+1 ta không cần thực hiện j i bước mở rộng tường minh đầu tiên Điểm mà ta thấy phù hợp với hậu duệ đầu tiên được gọi là điểm kết thúc Bằng

cách xét các điểm kết thúc, ta sẽ biết các điểm hoạt động sẽ được đi qua tiếp theo

Bảng 2.1 Thuật toán Ukkonen dựng cây hậu tố ngầm định

Như vậy, sử dụng liên kết hậu tố và các nhận xét trên, giải thuật Ukkonen có thể dựng cây hậu tố ngầm định trong thời gian O(m)

Trong mỗi pha i của thuật toán, ta chỉ cần thực hiện các bước mở rộng tường minh từ j i-1 đến j* Do bước mở rộng cuối cùng theo luật 1 hoặc 2 được áp dụng chính là một bước trước khi luật 3 lần đầu tiên được áp dụng nên ta có j i = j*-1 Như vậy số bước

mở rộng được thực hiện có thể tính theo công thức:

2 ( 1 1 ) 1 1 2 Vậy thời gian thực hiện của thuật toán là O(m) Như hình minh họa quá trình thực hiện của thuật toán dưới đây, mỗi dòng là một giai đoạn trong thuật toán, mỗi số là một bước mở rộng tường minh được thực hiện

Dưới đây là hình ảnh minh họa quá trình thực hiện của thuật toán:

1 Dựng cây hậu tố ngầm định T1 // T 1 có một cạnh đơn nhãn là S[1]

2 for i = 1 to m-1 do

3 begin

// Giai đoạn i+1;

// Cập nhật T i (với tất cả các hậu tố của S[1 i] đến T i+1 với tất các

hậu tố S[1 i+1])

4 for j = 1 to i+1 do

5 begin // Mở rộng j

Trong cây hiện tại, tìm vị trí kết thúc của đường đi từ gốc có nhãn

t[j i] Để có thể, mở rộng đường đi bằng cách thêm ký tự t[i+1], để có xâu t[j i+1] trong cây

6 end;

7 end;

Trang 30

Hình 2.9 Quá trình thực hiện của thuật toán

Cây hậu tố ngầm định cuối cùng T m được chuyển thành cây hậu tố thực sự trong thời gian O(m) Ta chỉ việc thêm ký tự $ vào cuối chuỗi S và thực hiện thuật toán, kết quả là một cây hậu tố ngầm định của chuỗi mà không có hậu tố nào là tiền tố của hậu tố khác

 Dựng cây hậu tố tổng quát

Áp dụng thuật toán Ukkonen như đã trình bày ta dễ dàng dựng cây hậu tố tổng

quát trong thời gian O(n) với n là tổng độ dài các chuỗi

Đầu tiên ta dựng cây hậu tố thông thường cho xâu S 1 Với các xâu S 2 , S 3 , , S k

trước tiên ta tìm tiền tố dài nhất S k [1 i] đã tồn tại trong cây Ta thực hiện các giai đoạn

i+1, i+2, m k của thuật toán để mở rộng cây hậu tố tổng quát cho toàn bộ xâu

Việc tìm tiền tố dài nhất đã có trong cây đồng nghĩa với việc tìm đường đi dài

nhất trong cây có nhãn S k [1 i] bằng cách duyệt từng ký tự trên đường đi từ gốc Có hai

trường hợp xảy ra:

1 Đường đi kết thúc ở nút v (có thể là nút gốc): thêm nút con mới nối với v bằng cạnh có nhãn là S k [i+1]

2 Đường đi kết thúc giữa một cạnh: chia đôi cạnh tại điểm đường đi kết thúc và

tạo ra nút mới v Tạo nút con của v nối với nó bằng cạnh Sk[i+1]

Sau khi thực hiện xong bước mở rộng đầu tiên của giai đoạn i+1 đã hoàn thành, ta

có thể đi theo nút cha của v, theo liên kết hậu tố để thực hiện các bước tiếp theo Lưu ý trong trường hợp 2 ta cũng cần đảm bảo liên kết hậu tố của v sẽ được thiết lập trong

bước mở rộng tiếp theo

Mỗi nút và cạnh có thể được biểu diễn trong bộ nhớ O(1), thì có thể lưu trữ cả cây

trong bộ nhớ O(n) Tổng độ dài các xâu trên các cạnh của cây là O(n2), nhưng có thể lưu mỗi cạnh bằng vị trí bắt đầu và kết thúc của một xâu con của S, nên tổng bộ nhớ cần dùng là O(n)

Một lựa chọn quan trọng khi lập trình cây hậu tố là biểu diễn liên kết giữa nút cha

và con trong cây Cách đơn giản nhất là sử dụng danh sách liên kết gọi là danh sách chị

em Mỗi nút có một con trỏ trỏ tới nút con đầu tiên, và một con trỏ thứ hai trỏ tới nút kế

Trang 31

tiếp trong danh sách chị em của nút đó

2.3.2 Ứng dụng cây hậu tố trong bài toán tìm xâu con chung dài nhất

Cây hậu tố là một cấu trúc dữ liệu biểu diễn các hậu tố của một xâu, được ứng dụng rộng rãi trong các thuật toán xử lý xâu bởi nó cung cấp nhiều phép toán hiệu quả giúp làm giảm thời gian thực hiện giải thuật Cây hậu tố được sử dụng trong nhiều lĩnh vực khác nhau như: xử lý văn bản, tìm kiếm và trích chọn thông tin, đối sánh mẫu dưới đây là một số ứng dụng của cây hậu tố:

Chuỗi con chung dài nhất (Longest Common Substring):

Chuỗi con của một chuỗi S là chuỗi thu được bằng cách chọn ra một số ký tự liên

tục trong S Nói cách khác Giả sử S = S 1 S 2 S m , một chuỗi Z = S i+1 S i+2 S i+t với i  0 và

i + t m là chuỗi con của S

Ví dụ: chuỗi Z = bcd là chuỗi con của chuỗi S = aabcbcdabdab

Cho hai chuỗi S và T, ta nói Z là chuỗi con chung của S và T nếu Z đồng thời là chuỗi con của cả hai Ví dụ: S = abcdefg và T = bccdegf có:

 Z = bc là chuỗi con chung

Chuỗi efg không phải chuỗi con chung

 Z = bc có độ dài 2 không phải là chuỗi con chung dài nhất

 Z = cde là chuỗi con dài nhất có độ dài 3

Trong cây hậu tố tổng quát của chuỗi S và T, đánh dấu các nút trong bằng 1 (hoặc

2) nếu cây con tại nút đó chứa nút lá có nhãn 1 (hoặc 2) Nhãn của đường đi từ gốc đến nút được đánh dấu cả hai là một chuỗi con chung của hai chuỗi Nút có nhãn dài nhất hay độ sâu đường đi lớn nhất cho ta lời giải của bài toán

Chuỗi con chung có chiều dài k (Common substrings of length k):

Cho m chuỗi S 1 , S 2 , , S m , với mỗi giá trị k từ 2 đến m, gọi là l(k), là độ dài của chuỗi con chung dài nhất của ít nhất k chuỗi trong tập đã cho

Ví dụ Xác định chuỗi con chung dài nhất của ít nhất hai chuỗi: Cho tập gồm m chuỗi, l(k) (2  k  m) là chiều dài của chuỗi con chung dài nhất tối thiểu là k của m

chuỗi Ví dụ cho các chuỗi sau: {sanddollar, sandlot, handler, grand, pantry} ta có:

Trang 32

- Input: Các chuỗi S1, …, Sm (tổng chiều dài n)

- Output: l(k) (2  k m) - các chuỗi con và độ dài của nó

Xây dựng cây hậu tố tổng quát cho m chuỗi, mỗi chuỗi duy nhất có một ký tự kết

thúc

2.4 Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các văn bản

Cây hậu tố là một cấu trúc dữ liệu quan trọng đƣợc sử dụng trong rất nhiều thuật toán xử lý chuỗi Nó cho phép thực hiện rất nhiều thuật toán hiệu quả quan trọng về chuỗi và đƣợc ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau của khoa học máy tính nhƣ: đối sánh mẫu, tìm xâu con chung Đây là những bài toán trong các kỹ thuật xử lý văn bản, tìm kiếm thông tin

Một trong những điểm mạnh của cây hậu tố là cho phép thay đổi và mở rộng cấu trúc mỗi khi có sự cập nhật dữ liệu mới Tính chất này có thể xử lý trên một tập dữ liệu lớn, đặc biệt là dữ liệu chuỗi, sẽ tiết kiệm đƣợc thời gian và không gian xử lý dữ liệu

2.4.1 Phát biểu bài toán

Chuỗi con của một chuỗi S là chuỗi thu đƣợc bằng cách chọn ra một số ký tự liên

T Tuy nhiên chúng không phải là lớn nhất vì chúng có trong ít nhất một xâu con chung dài hơn Chúng ta chỉ xét tới những xâu con chung có độ dài lớn nhất

Nhiệm vụ của chúng ta là tìm ra tất cả các xâu con chung duy nhất và có độ dài

Trang 33

lớn nhất của hai xâu A và B cho trước Mỗi xâu con chung này còn được gọi là LCS Vì vậy LCS có hai đặc tính:

 Nó xuất hiện duy nhất một lần trong cả hai xâu

 Nó không nằm trong bất kì một LCSs dài hơn (hay nó có chiều dài tối đa) Chúng ta có định nghĩa về LCS như sau:

LCS là một xâu con chung giữa 2 xâu có độ dài lớn hơn một độ dài d xác định và

nó có độ dài lớn nhất, nghĩa là không thể mở rộng nó bằng cách thêm vào bất kỳ kí tự nào và cuối cùng LCS là duy nhất trong cả hai xâu

Với ví dụ trên giả sử d = 3, Chuỗi S và T có 4 LCSs: ctc, gcbac, ggbcagctad, acbaccgc Xâu con ac không phải là LCS vì có độ dài bé hơn d và nó không phải là duy nhất trong cả hai chuỗi

Bài toán: Đưa ra tất cả các LCS giữa hai xâu S1, S2 cho trước

Input: Hai xâu S1 và S2;

Output: Tất cả các LCS của hai xâu;

- Cấu trúc LCS lưu trữ các thông tin sau (start1, start2, length)

- Start1 là vị trí bắt đầu của LCS ở xâu S1 và start2 là vị trí bắt đầu của LCS ở xâu

S2, length là độ dài của LCS, length >= k

- k là độ dài tối thiểu của 1 LCS,

- S1(p) là xâu con của S1 từ vị trí p đến p+k-1,

- S2(p) là xâu con của S2 từ p đến p-k+1,

- SS là mảng lưu trữ các LCS hiện tại,

- len1: độ dài S1,

- len2: độ dài S2

- 1 LCS sa = (start1, start2, length) trong danh sách SA được gọi là mở rộng được (extendable), nếu (start1 + p - start2) là 1 giá trị trong danh sách L1

Trang 34

Bảng 2.2 Thủ tục tìm LCS sử dụng cây hậu tố

1 Xây dựng cây hậu tố T1 từ S1, set SA = [], L1=[], SS=[];

2 for p := 0 to len2 – k do slide S2(p) on T1;

3 if S2(p) end at a node of T1 then

4 lưu tất cả các vị trí xuất hiện của S2(p) trong xâu S1;

5 lưu tất cả các LCS vào SS;

6 While all LCS in SS isn’t extentable do

7 if LCS sa= (start1, start2, length) is extentable then

length++;

delete value (start1 +1) in L1;

8 else save sa to SA;

9 if L1!= NULL then save all value in L1 to SA;

Trang 35

2.5 Mô hình tổng quát của hệ thống

2.5.1 Kiến trúc hệ thống

Để đánh giá mức độ giống nhau của văn bản, từ những nghiên cứu liên quan về

so khớp chuỗi giữa hai văn bản và mô hình tổng quan của hệ thống phát hiện sự giống nhau của văn bản, chúng tôi đề xuất mô hình xử lý: (1) So sánh mức độ giống nhau giữa hai tài liệu và (2) So sánh giữa một tài liệu (văn bản truy vấn) và kho dữ liệu (văn bản nguồn)

Chúng tôi đề xuất mô hình kiến trúc của hệ thống như trong hình 2.10:

thống kiểm tra nội

dung giống nhau

Hệ thống kiểm tra nội dung giống nhau, tính

độ tương đồng

Ngày đăng: 14/07/2020, 14:56

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w