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

luận văn thạc sĩ Tìm kiếm mờ và ứng dụng tìm kiếm thông tin trong các văn bản nén

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

ĐẠI HỌC THÁI NGUYÊN
KHOA CÔNG NGHỆ THÔNG TIN

ĐỖ THỊ HẠNH

TÌM KIẾM MỜ VÀ ỨNG DỤNG TÌM KIẾM THÔNG
TIN TRONG CÁC VĂN BẢN NÉN

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

60 48 35 01

LUẬN VĂN THẠC SĨ

Người hướng dẫn: PGS.TS. ĐOÀN VĂN BAN

Thái Nguyên - 2009
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




LỜI CẢM ƠN

ĐẠI HỌC THÁI NGUYÊN
KHOA CÔNG NGHỆ THÔNG TIN



Em xin chân thành cảm ơn các thầy, cô khoa Công nghệ thông
tin trường Đại học Thái Nguyên đã tạo điều kiện giúp đỡ và truyền đạt
cho em những kiến thức về chuyên ngành và những kiến thức xã hội.
Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến PGS.TS. Đoàn
Văn Ban - Viện Khoa học Công nghệ Việt Nam. Thầy đã trực tiếp
hướng dẫn và giúp đỡ em hoàn thành luận văn. Mặc dù, trong quá

ĐỖ THỊ HẠNH

trình làm luận văn em đã gặp nhiều khó khăn nhưng thầy luôn động
viên, chia sẻ, đó là nguồn động lực lớn giúp em vượt qua. Thầy chính
là tấm gương cho em trong công tác giảng dạy, nghiên cứu khoa học,

TÌM KIẾM MỜ VÀ ỨNG DỤNG TÌM KIẾM
THÔNG TIN TRONG CÁC VĂN BẢN NÉN

cũng như trong cuộc sống. Em xin cảm ơn thầy.
Em không quên sự động viên, khích lệ của gia đình, bạn bè và
những người thân đã giúp đỡ em vượt qua mọi khó khăn để em hoàn
thành khoá học.

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

Em xin chân thành cảm ơn!

60 48 35 01
Thái Nguyên, tháng 11 năm 2009


LUẬN VĂN THẠC SĨ

Người hướng dẫn: PGS.TS. ĐOÀN VĂN BAN

Thái Nguyên - 2009
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




2.1.3. Thuật toán KMP mờ ............................................................... 28

MỤC LỤC
MỞ ĐẦU ............................................................................................... 1
Chương 1. TÌM KIẾM MẪU TRONG VĂN BẢN THEO CÁCH
TIẾP CẬN OTOMAT MỜ .................................................................. 5

2.1.3.1. Otomat so mẫu ................................................................. 28
2.1.3.2. Tính đúng đắn của thuật toán ........................................... 29
2.1.3.3. Thuật toán ........................................................................ 29

1.1. Tổng quan về tìm kiếm mẫu trên văn bản .................................... 5

2.1.3.4. So sánh KM P và thuật toán KMP mờ ............................. 32

1.1.1 Giới thiệu chung về vấn đề tìm kiếm văn bản ............................ 5


2.1.4. Thuật toán KMP - BM mờ ...................................................... 33

1.1.2. Các dạng tìm kiếm và các kết quả nghiên cứu .......................... 7
1.1.2.1. Tìm đơn mẫu ..................................................................... 7
1.1.2.2. Tìm đa mẫu ........................................................................ 8
1.1.2.3. Tìm mẫu mở rộng .............................................................. 9

2.1.4.1. Ý tưởng của thuật toán ..................................................... 33
2.1.4.2. Otomat mờ so mẫu ........................................................... 35
2.1.4.3. Thuật toán 2.4 .................................................................. 37
2.2. Bài toán so mẫu xấp xỉ............................................................... 38

1.1.2.4. Tìm kiếm xấp xỉ ............................................................... 10

2.2.1. Đặt vấn đề............................................................................... 38

1.1.2.4.1. Phát biểu bài toán ..................................................... 10

2.2.2. Bài toán .................................................................................. 39

1.1.2.4.2. Các tiếp cận tìm kiếm xấp xỉ ..................................... 11

2.2.3. Độ tương tự dựa trên độ dài khúc con chung của hai xâu ........ 40

1.1.2.4.3. Độ tương tự giữa hai xâu .......................................... 12

2.2.3.1. Phát biểu bài toán............................................................. 40

1.1.3. Tìm kiếm trong văn bản nén và mã hoá .................................. 14

1.2. Hệ mờ ........................................................................................ 15
1.3. Ý tưởng chung của tiếp cận otomat mờ...................................... 15
1.4. Khái niệm otomat mờ ................................................................ 17
1.5. Một số thuật toán so mẫu ........................................................... 18
1.5.1. Thuật toán KMP ( Knuth- Morris- Pratt) ................................ 18
1.5.2. Thuật toán BM ( Boyer- Moor) ............................................... 22
1.6. Kết luận chương 1 ..................................................................... 26
Chương 2. BÀI TOÁN SO MẪU THEO CÁCH TIẾP CẬN
OTOMAT MỜ.................................................................................... 27
2.1. Bài toán so mẫu chính xác ......................................................... 27
2.1.1. Phát biểu bài toán ................................................................... 27
2.1.2. Độ mờ của mô hình ................................................................ 27

2.2.3.2. Otomat so mẫu ................................................................. 42
2.2.4. Độ gần tựa ngữ nghĩa.............................................................. 43
2.2.4.1. Ý tưởng về độ gần ........................................................... 43
2.2.4.2. Thuật toán sơ bộ tính độ gần ............................................ 44
2.2.4.2.1. Ý tưởng ..................................................................... 44
2.2.4.2.2. Thuật toán chi tiết ..................................................... 44
2.2.4.3. Giải thích độ mờ của mô hình .......................................... 45
2.3. Kết luận chương 2 ..................................................................... 46
Chương 3. TÌM KIẾM MẪU TRONG VĂN BẢN NÉN VÀ MÃ
HOÁ .................................................................................................... 47
3.1. Tiếp cận tìm kiếm tổng quát trên văn bản nén và mã hoá ........... 47
3.2. Tìm kiếm trên văn bản nén ........................................................ 50
3.2.1. Các mô hình nén văn bản ........................................................ 50
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên






4


3.2.2. Thuật toán tìm kiếm trên dữ liệu nén dạng text ....................... 50

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

3.3. Tìm kiếm trên văn bản mã hóa................................................... 55
3.3.1. Tìm kiếm trên văn bản mã hóa dạng khối kí tự ....................... 55
3.3.2. Mã đàn hồi .............................................................................. 55

Các ký hiệu

3.3.3. Tìm kiếm trên văn bản mã hóa bởi mã đàn hồi ....................... 58



Xâu rỗng

wi

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

w(f, d)

Xâu con (hay khúc con) độ dài f của xâu w, kết


3.3.3.1. Ý tưởng chung ................................................................. 58
3.3.3.2. Phương pháp đánh giá độ mờ xuất hiện mẫu trên văn bản
mã hóa .......................................................................................... 59

thúc ở vị trí d trên w

3.3.3.2.1. Bài toán .................................................................... 59

w1 ≤ s w2

Xâu w1 là khúc đuôi của w2

3.3.3.2.2. Mô tả phương pháp ................................................... 59

w1 ≤ ls w2

Xâu w1 là khúc đuôi dài nhất của w2

w(t) hoặc preft(w)

Khúc đầu độ dài t của xâu w

suft(w)

Khúc cuối độ dài t của xâu w

|A|

Lực lượng của tập A


3.3.3.2.3. Chi tiết hóa các otomat trong thuật toán ................... 60
3.3.3.2.4. Thuật toán tìm kiếm mẫu dựa trên otomat ................. 61
3.3.4. Tìm kiếm trên văn bản mã hóa hai tầng .................................. 63
3.4. Kết luận chương 3 ..................................................................... 64
KẾT LUẬN ......................................................................................... 65

Các chữ viết tắt

TÀI LIỆU THAM KHẢO.................................................................. 67

NFA

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên

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



5

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




MỞ ĐẦU

DANH MỤC CÁC HÌNH VẼ
1. Lý do chọn đề tài

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

Bộ não của con người có thể xử lý thông tin ở hai mức:

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

- Mức định lượng (chính xác)

Hình 2.1. Dịch chuyển con trỏ trên mẫu ............................................... 32

- Mức định tính (không chính xác, bất định, mơ hồ, không

Hình 2.2. Ý tưởng chung của thuật toán KMP-BM mờ ........................ 35
Hình 2.3. Một ví dụ với các khối độ dài t = 3 ....................................... 44
Hình 2.4. Tập mờ mô tả độ gần tựa ngữ nghĩa của mẫu P
so với xâu đích S................................................................. 45

chắc chắn, nhập nhằng, không rõ ràng, mờ)
Tính thông minh trong quá trình xử lý thông tin thể hiện ở khả
năng xử lý thông tin định tính. Đây là điều mà thế hệ máy tính hiện nay
đang hướng tới.

Hình 3.1. Phương pháp so mẫu trên miền nén có sử dụng otomat mờ .. 48

Máy tính ngày nay đã được sử dụng trong hầu hết các lĩnh vực và

Hình 3.2. Phương pháp so mẫu không giải mã ..................................... 49

đã góp phần quan trọng vào việc thúc đẩy sự phát triển kinh tế, xã hội,


Hình 3.3. Queue trước (a) và sau (b) khi thực hiện thủ tục Decompress 52

khoa học kỹ thuật, … Máy tính ra đời nhằm phục vụ cho những mục

Hình 3.4. Queue trước (a) và sau (b) bước nhảy n2‟ ............................. 53

đí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

Hình 3.5. Đồ thị xây dựng khái niệm tích đàn hồi ................................ 56

thông tin hữu ích và trong quá trình xử lí đó một vấn đề đặc biệt quan

Hình 3.6. Đồ thị xác định mã đàn hồi ................................................... 58

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

Hình 2.7. Quá trình mã hóa hai tầng ..................................................... 64

gian nhanh nhất.

Hình 2.8. Quá trình giải mã hai tầng ..................................................... 64

Tìm kiếm thông tin thì bài toán đóng vai trò quan trọng là bài toán

Hình 2.9. Quá trình tìm kiếm mẫu trên văn bản mã hóa hai tầng .......... 64

so mẫu, với mẫu có thể ở bất kỳ kiểu dữ liệu nào, từ văn bản đến các loại
dữ liệu đa phương tiện khác (ảnh, video, âm thanh, …). Trên thực tế có
rất nhiều ứng dụng tìm kiếm thông tin như: công cụ tìm kiếm của các hệ
điều hành, khai phá web trên Internet, ...

Để 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 chúng tôi chọn đề tài này cụ thể là tìm kiếm
văn bản text. Tìm kiếm văn bản text nếu như những văn bản có khối
lượng lớn thì có thể mất nhiều thời gian với những thuật toán kinh điển.
Vậy đặt ra vấn đề tìm kiếm văn bản nhưng ở dạng nén sẽ nhanh hơn.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên





1


Nên chúng tôi đi vào làm cụ thể là tìm kiếm mẫu trong văn bản nén.

- Đưa ra các thuật toán tìm kiếm, các kết quả nghiên cứu trên.

Ngoài ra, văn bản nén cũng là văn bản mã hoá nhưng dung lượng giảm

- Luận văn cũng mong muốn nêu ra được một số hướng nghiên

nhiều so với văn bản nguồn nên chúng tôi đi nghiên cứu mở rộng thêm

cứu mở rộng về tìm kiếm mẫu theo hướng tiếp cận otomat mờ.

văn bản mã hoá.


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

Trong các bài toán tìm kiếm, để tìm kiếm nhanh đáp ứng được nhu

Luận văn tập trung nghiên cứu các kiến thức có liên quan, các cơ

cầu và không chỉ tìm kiếm cứng nhắc trong với từ khoá đưa ra. Người

sở lý thuyết: Hệ mờ, otomat mờ, các thuật toán tìm kiếm mẫu, các thuật

dùng mong muốn có thể tìm được cả những thông tin liên quan gợi ý cho

toán tìm kiếm mẫu theo cách tiếp cận otomat mờ.

người dùng. Vậy bài toán đó thì việc tìm kiếm theo hệ mờ là rất cần

7. Phương pháp nghiên cứu

thiết. Vì vậy cần phải xây dựng các thuật toán mềm dẻo cho phép phát

Otomat mờ được xem là sự tổng quát hoá của otomat hữu hạn.

huy được sức mạnh của tìm kiếm mờ và đặc biệt cho phép sử dụng được

Trong đó tập trạng thái là các tập mờ, hàm chuyển trạng thái và trạng

nguồn tri thức giàu tính chuyên gia trong những tính huống tìm kiếm

thái kết thúc được biểu diễn qua các quan hệ mờ. Theo đánh giá của các


phức tạp.

chuyên gia, các hệ hình thức otomat mờ là mô hình toán học thích hợp

2. Mục đích nghiên cứu

với một số hệ thống quyết định, điều khiển, nhận dạng và đặc biệt được

Luận văn tập trung nghiên cứu về tiếp cận otomat mờ và xây dựng

dùng trong đoán nhận mẫu. Tận dụng những ưu điểm trên và sự kết hợp

một số giải thuật tiếp cận otomat mờ để tìm kiếm mẫu của văn bản nén.

với lý thuyết mờ, sử dụng một số hệ hình thức otomat mờ để giải bài

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

toán so xâu mẫu. Để thấy rõ được tiếp cận otomat mờ chúng tôi chọn

- Tìm hiểu về otomát mờ.

một bài toán cụ thể là tìm kiếm mẫu trong văn bản nén và mã hoá.

- Tìm hiểu về văn bản nén và mã hoá.

Trong phạm vi luận văn, bài toán có thể làm với các tệp dữ liệu
nén mà không cần giải nén toàn bộ. Ý tưởng cơ bản là đọc tuần tự trên


- Cách so mẫu theo hướng tiếp cận otomát mờ.
4. Giả thuyết khoa học

tệp nén và mở nén một số mã nén, lưu kết quả giải nén cục bộ vào vùng

Nếu chúng ta sử dụng tiếp cận otomát mờ thì chúng ta không những
tìm kiếm được những thông tin chính xác mong muốn mà còn tìm kiếm
được những thông tin liên quan trong thời gian nhanh nhất, đáp ứng nhu

đệm và áp dụng thuật toán theo tiếp cận mờ trên vùng đệm này.
Nội dung luận văn gồm có phần mở đầu, 3 chương, phần kết
luận, tài liệu tham khảo và phụ lục.
Chương 1- Giới thiệu chung về vấn đề tìm kiếm văn bản, trọng tâm

cầu người dùng.

là bài toán so xâu mẫu. Hướng tiếp cận của luận văn cho bài toán so

5. Nhiệm vụ nghiên cứu
- Nghiên cứu về otomat mờ.

mẫu, chính xác và xấp xỉ, trên môi trường nén và mã hoá hoặc không sử

- Nghiên cứu về nén và mã hoá.

dụng một số hệ hình thức otomat mờ.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




2

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



3


Chương 2 - Đưa ra ví dụ về bài toán so mẫu xấp xỉ và chính xác....

Chương 1. TÌM KIẾM MẪU TRONG VĂN BẢN THEO

Chương 3- Giới thiệu một số thuật toán tìm kiếm mẫu trên môi

CÁCH TIẾP CẬN OTOMAT MỜ

trường văn bản nén và mã hoá.
1.1. Tổng quan về tìm kiếm mẫu trên văn bản
1.1.1 Giới thiệu chung về vấn đề tìm kiếm văn bản
Kiểu văn bản (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 searching) hay đối sánh chuỗi (string
matching). 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à so xâu mẫu hay có thể gọi ngắn gọn là so mẫu

(string pattren matching). Dạng đơn giản nhất 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 có sự
đối sánh chuỗi ở một dạng nào đó. Các phương pháp tìm kiếm văn bản
và tìm kiếm chuỗi 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 của hệ điều hành, các hệ thống trích rút dữ 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, 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 chuỗi 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
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



4

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



5


trích rút thông tin và các hệ thống sinh- tin học. Một lý do nữa, bởi con

1.1.2. Các dạng tìm kiếm và các kết quả nghiên cứu


người ngày nay không chỉ đối mặt với một lượng thông tin khổng lồ mà

Phân loại các thuật toán tìm kiếm dựa trên các đặc tính của mẫu ta

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

có các dạng: tìm đơn mẫu, tìm đa mẫu (mẫu là tập các xâu), tìm mẫu mở

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ự

rộng (extended strings), tìm biểu thức chính qui (regular expressions) với

thay thế (wild card), các khoảng trống (gaps) và các biểu thức chính quy

hai hướng tiếp cận là tìm kiếm chính xác và xấp xỉ.

(regular expresions). 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ừ đó, 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

Nội dung của luận văn chỉ tập trung giải quyết vấn đề để tìm đơn
mẫu, chính xác và xấp xỉ.
1.1.2.1. Tìm đơn mẫu
Bài toán 1.1:

kiếm xấp xỉ” (approximate matching, approximate searching).

Cho xâu mẫu P dộ dài m, P = P1 P2… Pm , và xâu độ dài n, S = S1 S


Cho đến nay, đã có nhiều hướng tiếp cận giải các bài toán so mẫu
đượ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 chưa đạt hiệu quả cao trong thực hành, nếu không tận
dụng được những khả năng trong đặc điểm của kiến trúc máy tính. Hiện
nay, tiêu biểu cho những thuật toán mang tính chất thực hành theo hướng
nâng cao khả năng tận dụng kiến trúc máy tính là tiếp cận song song bit
(bit- parallelism) 1, 2, 3.
Có thể phân các loại thuật toán so mẫu 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. 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 cần 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 thực ra cũng dựa trên tìm kiếm on-line.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



6

2…

Sn (S thường dài, là một văn bản) trên cùng một 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 so 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 “thô” nhất và đã được sử dụng rộng rãi là Brute- Force.
Phương pháp này đơn giản chỉ là lần lượt bắt đầu từ vị trí trong S để đối
sánh với mẫu P. Mặc dù có tốc độ chậm, thời gian xấu nhất tỉ lệ với tích
m.n, song trong nhiều ứng dụng thực tế các chuỗi phát sinh ra thường có
thời gian xử lý thực sự luôn tỷ lệ với m + n. Ngoài ra, một ưu điểm khác
là nó thích hợp với cấu trúc của hầu hết các hệ máy tính.
Cho đến nay, rất nhiều thuật toán so đơn mẫu được đưa ra 4 5,
2, trong đó kinh điển nhất là KMP.
Có thể xem như có ba tiếp cận chung cho các thuật toán so mẫu,
phụ thuộc vào cách duyệt tìm mẫu trong văn bản. Việc đánh giá tốc độ
của các thuật toán dựa trên kích cỡ của mẫu P và bảng chữ A.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



7


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

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ỏ 2.
Theo tiếp cận thứ hai có thuật toán nổi tiếng Commentz - Walter
4, trong đó kết hợp ý tưởng của Boyer - Moore và Aho- Corasisk ,

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à tìm kiếm

nhanh về lý thuyết, song lại không hiệu quả trong thực hành [2]. Một mở

mẫu trong cửa sổ này. Tại mỗi vị trí trong cửa sổ, cần tìm một khúc cuối

rộng của thuật toán Horspool là Set Horspool. Cuối cùng là thuật toán

của cửa sổ mà là khúc cuối của xâu mẫu P. Thuật toán BM là một điển

Wu-Manber, một phương pháp pha trộn giữa tiếp cận tìm kiếm hậu tố

hình cho tiếp cận này và một biến thể đơn giản hoá của nó là Horspool.

(suffix search approach) và một kiểu hàm băm, được đánh giá là nhanh

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. 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à

trong thực hành.
Trong tiếp cận thứ ba đã có những mở rộng từ thuật toán BOM và
SBOM; tương tự với Shift- Or BNDM là Multiple BNDM 2.

là 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à BNDM. Với
những mẫu dài, thuật toán BOM được đánh giá là nhanh nhất 2.

1.1.2.3. Tìm mẫu mở rộng
Trong nhiều ứng dụng, tìm kiếm mẫu 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 trong các ứng dụng:

1.1.2.2. Tìm đa mẫu

Mở rộng đơn giản nhất cho phép mẫu là một dãy các lớp hay các

Bài toán 1.2:

tập ký tự, giả sử được đánh số thứ tự là 1,2,…,m. Bất kỳ ký tự nào trong

Cho một mẫu P gồm tập các từ khoá w 1 , w 2 ,….,w k và xâu

lớp thứ i cũng có thể được xem là ký tự thứ i của mẫu.

vào S = S 1 S 2 …S n trên cùng bảng chữ A. Tìm sự xuất hiện của các
từ khoá w i trong S.

Mở rộng thứ hai là giới hạn khoảng trên độ dài: 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

Một cách đơn giản để tìm nhiều từ khoá 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 AhoCorasisk 4, có tốc độ cải thiện đáng kể khi số từ khoá nhiều và thuật

trong một khoảng xác định trước. Điều nà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.
Mở rộng thứ ba sử dụng các ký tự tùy chọn và ký tự lặp. Trong 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 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 giải quyết bằng cách điều chỉnh lại thuật toán Shift -

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



8

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



9


Or và BNDM, trong đó có sử dụng cơ chế song song bit để mô phỏng

Bài toán so mẫu xấp xỉ tổng quát được phát biểu như sau:

otomat đa định, cho phép tìm tất cả các xuất hiện của mẫu.

Bài toán 1.3.
Cho văn bản T độ dài n và xâu mẫu P độ dài m trên cùng một

1.1.2.4. Tìm kiếm xấp xỉ

bảng chữ A. Tìm các vị trí trong văn bản khớp với mẫu, cho phép


1.1.2.4.1. Phát biểu bài toán
Tìm kiếm 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ó thể kể ra một vài kiểu “lỗi”, như
những lỗi đánh máy hay lỗi chính tả trong hệ thống trích rút thông tin,

nhiều nhất k lỗi.
1.1.2.4.2. Các tiếp cận tìm kiếm xấp xỉ
Trong 2, tác giả chia các thuật toán tìm kiếm xấp xỉ hiện nay ra
thành 4 loại.

những sự biến đổi chuỗi gen hay các lỗi đo đạc trong sinh- tin học và

1) Các thuật toán dựa trên quy hoạch động: Đây là tiếp cận xuất

những lỗi truyền dữ liệu trong các hệ thống xử lý tín hiệu,… Vì trong

hiện đầu tiên và đã được dùng để tính khoảng cách soạn thảo (Edit

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

Distance) (như trong 4).

xấp xỉ càng trở nên quan trọng.

2) Các thuật toán sử dụng otomat tìm kiếm: Trước tiên xây dự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

một hàm của mẫu P và số lỗi k, sau đó tạo otomat đa định hữu hạn (như


nay còn đòi hỏi cả những kết quả gần giống hoặc có được kết quả phù hợp

trong 9, 1). Đây là hướng tiếp cận được quan tâm nhiều vì có độ phức

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”

tạp thời gian trong trường hợp xấu nhất là O(n) (tuy nhiên đòi hỏi độ

có thể do nhiều nguyên nhân khác nhau, có thể kể ra như sau:

phức tạp không gian lớn hơn).

- 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.

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 rất nhiều thuật toán hiệu quả nhờ khai thác bản

- Lỗi in ấn, sai lỗi chính tả, sử dụng dấu chấm sai,…

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ý.

- Do sự biến đổi hình thái từ trong một số ngôn ngữ.

Nói chung song song bit được dùng để song song hoá các kỹ thuật khác,

- Dữ liệu đưa vào cơ sở dữ liệu không chính xác, thường xảy ra với

như tạo otomat đa định, lập ma trận quy hoạch động. Nói chung kỹ thuật


tên người, địa chỉ…

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

- Thông tin người tìm đưa vào không chính xác, chỉ “đại loại”.

đặt không tận dụng khả năng song song của thanh ghi. Trong 2 các tác

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

giả cũng chỉ ra một số thuật toán dùng cơ chế song song bit là BPR và

là đáp ứng được nhu cầu tìm kiếm “mềm dẻo” này của người sử dụng.

BPD để tái tạo một otomat đa định hữu hạn và BDM để tái tạo các thuật
toán quy hoạch động.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



10

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



11



4) Các thuật toán sử dụng cơ chế lọc: Cố gắng thu hẹp không gian

Nan”,… Có thể kể ra một số kỹ thuật phổ biến đo độ tương tự giữa hai

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

xâu: Xâu con chung dài nhất, dãy con chung dài nhất, khoảng cách soạn

chứa một đoạn nào “khớp” với mẫu. Nói chung, phương pháp này đạt

thảo (Edit distance). Nhiều ứng dụng sử dụng các biến thể của các hàm

đượ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

khoảng cách này.

mẫu. Hai thuật toán hiệu quả nhất theo tiếp cận này là PEX và ABNDM

1) Khoảng cách soạn thảo (Edit distance): 4, 7 Đối với hai xâu x,

2. Trong PEX, mẫu được chia thành k + 1 đoạn và sắp xếp để tìm kiếm

y khoảng cách soạn thảo Edit distance (x,y) là số nhỏ nhất các phép sửa

đ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

đổi về mặt soạn thảo (editing transformations) để biến đổi xâu x thành

hiện bất kỳ. Thuật toán ABNDM là một mở rộng của thuật toán BNDM,


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ì

trong đó tái tạo otomat đa định hữu hạn cho tìm kiếm xấp xỉ. Nói chung,

sự khác nhau giữa hai xâu càng nhiều (hay độ tương tự càng nhỏ) và

các thuật toán sử dụng cơ chế lọc làm việc tốt hơn tỷ lệ k/m nhỏ. Đối với

ngược lại. Khoảng cách soạn thảo thường để kiểm tra chính tả hay tiếng

trường hợp tỷ lệ k/m lớn, các thuật toán sử dụng cơ chế song song bit

nói. Tuỳ thuộc vào quy ước về các phép sửa đổi mà ta nhận được các

được đánh giá tốt hơn.

loại khoảng cách soạn thảo khác nhau, chẳng hạn như:

Đối với bài toán tìm kiếm đa mẫu cũng đã có một số phát triển theo
hướng xấp xỉ. 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ỏ; Multi BP 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.

+ Khoảng cách Hamming: Phép sửa đổi chỉ là phép thay thế ký tự.
+ Khoảng cách Levenshtein: Phép sửa đổi bao gồm: Chèn, xoá, và
thay thế ký tự.
+ Khoảng cách Damerau 3: Phép sửa đổi bao gồm: Chèn, xoá,
thay thế và hoán vị liền kề của các ký tự.


Một vài tiếp cận xấp xỉ cho bài toán tìm mẫu mở rộng và tìm biểu

2) Xâu con chung dài nhất (hay khúc con chung dài nhất): Một xâu

thức chính qui có thể kể ra như: thuật toán dựa trên quy hoạch động cho

w là xâu con hay khúc con (substring or factor) của xâu x nếu x = uwv

biểu thức chính qui; thuật toán sử dụng một otomat đa định hữu hạn cho

(u, v có thê rỗng). Xâu w là khúc con chung của hai xâu x, y nếu w đồng

phép có “lỗi”, thuật toán song song bit dựa trên phương pháp của BPR, …

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

1.1.2.4.3. Độ tương tự giữa hai xâu
Để tìm kiếm xấp xỉ, 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

3) Dãy con chung dài nhất 4, 6: 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

recognition errors), chẳng hạn “Việt Nam” và “Việt Nan” hay “Việtt

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



12

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



13


dài nhất LCS (x,y). Có thể dùng độ dài dãy con chung của hai xâu x, y

1.2. Hệ mờ

để tính khoảng cách Levenstein giữa x và y theo công thức:

Vấn đề cốt lõi quyết định khả năng xử lý thông tin là vấn đề của logic
mềm dẻo, trong đó logic đa trị là một ví dụ. Có thể nói rằng logic 2 trị:

LevDistance (x,y) = m + n - 2 length(LCS( x,y))

đúng - sai (1 - 0) là logic hết sức cứng nhắc, không thể lý giải cho nhiều

1.1.3. Tìm kiếm trong văn bản nén và mã hoá
Để giảm sự dư thừa trong lưu trữ và truyền dữ liệu, một giải pháp

sự việc của đời sống nói chung và của khoa học công nghệ nói riêng.

Định nghĩa 1.1:

được sử dụng là nén dữ liệu. Quá trình nén làm cho các tệp chiếm ít
không gian lưu trữ hơn, giảm được thời gian và chi phí truyền thông
nhưng lại làm mất đi phần lớn cấu trúc của dữ liệu, dẫn đến khó khăn
trong việc tìm kiếm và trích rút thông tin. Cách đơn giản nhất song rất
tốn thời gian (và khó khả thi với những văn bản quá lớn) là giải nén toàn

Mọi sự vật, hiện tượng đều có tính đa cấu trúc đan xen, do đó tất
yếu có tính không rõ ràng, mập mờ, không chính xác..., bất định. Viên
gạch lý thuyết cơ sở để xây dựng nên thế giới không chính xác này có
thể chọn là tập mờ và được xác định như sau:
Giả sử X là tập nền (vũ trụ) và là tập rõ; A là tập con trên X;

bộ rồi tiến hành tìm kiếm bằng một thuật toán so mẫu kinh điển. Hiện
nay, đã có nhiều giải pháp tốt hơn theo hai hướng chính là: so mẫu nén

µ ()là hàm của x biểu thị mức độ thuộc về tập A, thì A được gọi là tập

(full- compressed pattern matching hay còn gọi là compressed pattern

mờ khi và chỉ khi:

matching) và so mẫu trên miền nén (compressed- domain pattern
matching) 9. So mẫu nén thực hiện nén mẫu trước rồi đem đi tìm kiếm
trên văn bản nén (compressed text representation), còn so mẫu trên miền
nén sử dụng giải pháp nén từng phần của văn bản.
Nén dữ liệu text thực chất là một quá trình mã hoá, chuyển các
thông báo nguồn (trong bảng chữ nguồn A) thành các bản mã (trong bản
chữ mã B) và ngược lại là quá trình giải mã. Vì vậy thuật toán tìm kiếm

trên văn bản nén có thể áp dụng đối với văn bản mã hoá dạng khối ký tự.
Tuy nhiên, do yêu cầu bảo mật, đối với những văn bản mã hoá, cần có
những giải thuật tìm kiếm đảm bảo không bị rò rỉ thông tin ngay trong
quá trình tìm kiếm.

A

A  ( x,  A ( x)) x  X ,  A ( x) : X  0,1
Trong đó µA() được gọi là hàm thuộc của tập mờ
1.3. Ý tưởng chung của tiếp cận otomat mờ
Khi tìm kiếm chính xác sự xuất hiện của mẫu P trong văn bản T,
câu trả lời sẽ là “có” hoặc “không”. Cách nhìn mờ cho phép trả về kết
quả là "độ mờ xuất hiện mẫu" (một cách hiểu nôm na là “mức độ xuất
hiện” hay “mức độ khớp” của mẫu P trong T). Tuỳ thuộc vào nhu cầu
hay quan niệm trong hệ thống tìm kiếm mà có thể đưa ra định nghĩa
chính xác về “độ mờ xuất hiện mẫu” cho từng trường hợp cụ thể. Một
cách tự nhiên, cách nhìn theo quan điểm hệ mờ về sự xuất hiện mẫu
cũng đáp ứng được nhu cầu tìm kiếm mẫu xấp xỉ.

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



14

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



15



Để giải bài toán so mẫu theo tiếp cận mờ, ta duyệt xâu đích S từ trái

+ Khi cần tìm kiếm mẫu P trong nhiều xâu S, chỉ cần dùng chung

sang phải và tại mỗi vị trí j, cần tính được ngay độ mờ xuất hiện mẫu P.

một otomat mờ so mẫu được xây dựng từ mẫu P. Điều này đặc biệt hữư

Một câu hỏi đặt ra: Giả sử đã biết độ mờ  của mẫu P tại vị trí j trên S,

ích khi tìm kiếm trong cơ sở dữ liệu.

làm cách nào để xác định được độ mờ ‟ tại vị trí tiếp theo? Ý tưởng để
trả lời câu hỏi này là: Bằng cách tiền xử lý mẫu P, ta hy vọng có thể tính
được ‟ theo công thức ‟= ( , Sj+1 ). Điều này gợi ý cho ta việc sử
dụng một số hệ hình thức otomat mờ để tính độ mờ xuất hiện thông qua
hàm chuyển trạng thái  của otomat.
Ý tưởng chung của các thuật toán so mẫu theo tiếp cận otomat mờ
[11] như sau:
- Giai đoạn tiền xử lý mẫu P: Dựa vào thông tin trên mẫu P, xây
dựng otomat mờ so mẫu.
- Giai đoạn sánh mẫu: Duyệt xâu đích S từ trái sang phải, mỗi lần
một ký tự. Khởi đầu độ mờ là 0. Giả sử đã biết độ mờ tại vị trí j (j =
0,…, n- 1) trên S là . Khi đọc được ký tự Sj+1, tính ngay được độ mờ tại
vị trí j + 1 trên S là ‟= ( , Sj+1), trong đó  là hàm chuyển của otomat
mờ được xác định trong giai đoạn tiền xử lý mẫu.
Ưu điểm quan trọng nhất của thuật toán so mẫu theo tiếp cận otomat
mờ là:

- Không đòi hỏi lưu trữ toàn bộ S rồi mới so mẫu, do bản chất tuần
tự đọc từng ký tự trên S, nên có thể áp dụng trong các thuật toán hướng
online, đặc biệt là trên môi trường mạng, với không gian lưu trữ bộ đệm

1.4. Khái niệm otomat mờ
Một số nghiên cứu về otomat mờ có thể xem trong 9, ….
Mô hình otomat mờ dạng tổng quát có mỗi trạng thái mờ là một
tập con mờ trên tập nền X = 1, …, n (X hữu hạn), có hàm thuộc mở
rộng là f: X  R. Ta có thể biểu diễn f dưới dạng vector rõ (f(1),
f(2),…,f(n)). Như vậy, trạng thái mờ được xem như là một véctor n
chiều toạ độ thực. Tuỳ theo từng ứng dụng cụ thể mà có thể xem f(i) 
0,1 hay f(i)  N hay f(i)  R,….
Định nghĩa 1.2. Một otomat mờ tổng quát là bộ A(P) = (A, Q, qo, ,
F), trong đó:
+ Bảng chữ vào A = A0t , trong đó mỗi chữ là một xâu gồm t ký tự
trên bảng chữ cơ sở A0.
+ Q là tập hữu hạn các trạng thái mờ có dạng q = (v1, v2,….vk)
trên tập nền X = 1,…, k với giá trị mờ nguyên
+ q0  Q là trạng thái khởi đầu
+ F là tập các trạng thái kết thúc
+ Hàm chuyển : Q × A  Q
Hàm chuyển có thể được mở rộng trong đó tín hiệu tác động là một
xâu thuộc A*:

cho S không lớn, tuỳ từng ứng dụng.
- Thông tin về mẫu được tiền xử lý và bao hàm trong cấu trúc của

(q, wa) = ((q, w),a), w  A*, a  A.
Số thành phần trong trạng thái mờ và tập giá trị mờ phụ thuộc vào


otomat mờ tương ứng nên:
+ Luôn phản ánh được thông tin về sự xuất hiện mẫu mỗi khi duyệt

quan điểm về “độ mờ xuất hiện mẫu” và nhu cầu tìm kiếm trong từng
bài toán cụ thể.

đến một vị trí bất kỳ trên xâu đích S.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



16

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



17


Để thuận lợi cho việc trình bày sau này, quy định một số ký hiệu
như sau:

qua h - 1 phép so sánh và tiếp tục so sánh 2 ký tự Ph và Sj (hình 1.1). Do
h phụ thuộc vào i nên ký hiệu h = nexti, i = 1,…,m.

Với w, w1, w2 là các xâu ký tự,

j


+ wi là ký tự thứ i của xâu w

S

+ w(f,d) là xâu con (hay khúc con) độ dài f của xâu w, kết thúc ở vị trí

i

d trên w.

P

+ w1  s w2 nếu w1 là khúc đuôi của w2
P

+ w1  ls w2 nếu w1 là khúc đuôi dài nhất của w2

?

h=next[i]

+ Với w = w1, w2….wm, 0  t  m

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

w(t) hoặc preft(w) là khúc đầu độ dài t của w, w(t) = w1 w2….wt

Nếu Sj  Ph thì phải tiếp tục lùi con trỏ trên mẫu. Để khắc phục

Suft(w) là khúc cuối độ dài t cuả w, Suft(w) = wm - t+1 w m-t+2....wm


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ó

Quy ước pref0(w) = suf0(w) =  ( là xâu rỗng)

nhiều khả năng bằng Sj. Vì Sj  Pi nên cần tìm h thoả mãn Ph  Pi .

+ Với a là một ký tự, w = w1w2…wm, ký hiệu wa = w1w2…wma

Trong KMP, khi i > m ta được một xuất hiện của mẫu bắt đầu từ

1.5. Một số thuật toán so mẫu

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

1.5.1. Thuật toán KMP ( Knuth- Morris- Pratt)

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

Thuật toán KMP được trình bày chi tiết trong 4, 5, 14 nội dung

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à

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

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.2).

m

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:

m +1

P

P1P2…Pi -1  Sj - i + 1Sj - i + 2…S j - 1 và Pi  Sj

j

Khi đó cần phải bắt đầu đối sánh mẫu từ vị trí j - h +1 trên S (trường

S

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 -

h=next[m+1]
P

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ỏ
Hình 1.2. Ý nghĩa của mảng next tại vị trí m + 1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



18


Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



19


Như vậy, với mỗi vị trí i trên P, i = 1..m + 1, cần xác định next i

 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

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).

var i, j: Integer;
counter: Integer;

+ Pi  Pnext i

begin

(để có nextm + 1, tưởng tượng như đã bổ sung thêm ký tự  vào

Initnext ();
i:= 1; j:= 1; counter: = 0;

cuối P, với  là một ký tự không xuất hiện trong P).


repeat

Ví dụ 1.1. Với P = aababaab ta có bảng next như sau:
i

1

2

3

4

5

6

7

8

9

while i < = m and j < = n do

next[i]

0

0


2

0

2

0

0

2

4

begin
while (i > 0) and (Sj  Pi) do i: = next i;

Thuật toán 1.1. Xây dựng mảng next

i: = i + 1; j = j + 1;

procedure Initnext();

end;

var i, j: Integer;

if( i > m) then


begin

begin

i: = 1; j: = next 1: = 0;

Ghi nhận vị trí xuất hiện mẫu là j - m;

while i< = m do

counter: =counter + 1;

begin

end;

while j > 0 and Pi  P j do j: = next j;

i: = next m + 1;

i: = i + 1; j: = j + 1;

until j > n;

if ( i < = m) and (Pi = P j) then next i := next j

Ghi nhận counter;

else next i : = j;


end;
Độ phức tạp của thuật toán 4, 5

end;

- Pha tiền xử lý mẫu: Độ phức tạp thời gian và không gian để xây

end;
Thuật toán 1.2. KMP tìm nhiều lần lặp mẫu

dựng bảng next là O(m).
- Pha tìm kiếm: Thời gian xấu nhất là O(m+n).

proedure KMP();

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



20

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



21


Nếu i = 0, ta đã tìm được một xuất hiện của mẫu P.


1.5.2. Thuật toán BM ( Boyer- Moor)
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

Ngược lại, nếu i > 0 và Pi  Sk -m+i, xét hai khả năng:

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

a) Nếu vị trí xuất hiện trái nhất của ký tự S k -m+i trong P là i - g,

thuật toán BM, có thể có những bước nhẩy xa trên S được thực hiện, nhờ

khi đó mẫu P được dịch sang phải g vị trí sao cho P i-g dóng

vậy BM được đánh giá là thuật toán nhanh nhất về thực hành, đây là lựa

thẳng với Sk-m+i và sẽ bắt đầu quá trình đối sánh mới, bắt đầu

chọn hiệu quả cho những ứng dụng thông thường như các trình soạn thảo

từ Pm so với Sk+g. Nếu Pi-g nằm bên phải của Pi (khi g < 0) thì

văn bản.

mẫu P chỉ dịch sang phải 1 vị trí.

Ý tưởng cơ bản của thuật toán là sử dụng một “Cửa sổ trượt” như

b) Giả sử sufi(P) là một xâu con của Pi+1-gPi+2-g....Pm-gvà Pi-g  Pi

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


(nếu có nhiều xuất hiện như vậy của sufi(P) thì chọn vị trí phả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

nhất). Khi đó sẽ dịch mẫu P sang phải một đoạn dài hơn so vớ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

trường hợp (2a) sao cho khúc Pi+1-gPi+2-g....Pm-g dóng thẳng với

sang trái. Khi gặp ký tự không khớp, cửa sổ trượt sang phải qua một

khúc Sk-m+i+1Sk-m+i+2...Sk và bắt đầu quá trình đối sánh mới từ Pm

đ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

so với Sk+g.

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.

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.

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.

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)

(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 hiện nào của mẫu.
(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).
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



22

và ((g  k hoặc Pk-g = Pk) với i  k  m)
Có nhiều cách tính toán bảng d2 được đưa ra. Thuật toán 1.3. tính
bảng dịch chuyển d2 là của Knuth, có sự sửa đổi của Mehlhorn.
Trong thuật toán 1.3 sử dụng hàm f có tính chất f[m] = m+1 và với 1
 j < m, fj = mini j < i < m và Pi+1Pi+2....Pm = Pj+1Pj+2....Pm+j-i.
Thuật toán 1.3. Tính bảng dịch chuyển d 2
procedure computed 2();
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên




23


Thuật toán 1.4. Thuật toán BM tìm sự xuất hiện của mẫu P trong xâu

begin
for i: = 1 to m do d2i : = 2 *m- i;

vào S

j := m; k: = m+ 1;

procedure BM();

while j > 0 do

var i, j: integer;

begin

counter: integer;

fj: = k;

begin

while k <= m and Pj  Pi do

j:= m; counter: = 0;


begin

while j <= n do
begin

d2k:= min d2k, m- j  ;

i: = m;

k: = fk];
end;

while i >0 and Sj  Pi do

j := j - 1; k := k - 1;

begin i: = i - 1; j: = j - 1; end;
if i: = 0 then

end;

Ghi nhận một lần xuất hiện mẫu tại vị trí j + 1;

for i: = 1 to k do d2i : = min d2i, m +k - i

begin

j: = fk;

counter: = counter + 1;

j := j + m + 1;

while k < = m do

end;

begin

else j: =j+ max d1Sj, d2i ;

while k <=j do

end;

begin

Ghi nhận counter;

d2k := min d2k, j-k + m 
end;

k := k + 1;

Độ phức tạp của thuật toán 4, 5

end;

Độ phức tạp thời gian là O(m + n) và độ phức tạp không gian là

j: = fj;


O(m).

end;
end;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



24

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



25


Chương 2. BÀI TOÁN SO MẪU THEO CÁCH TIẾP CẬN

1.6. Kết luận chương 1
Chương này đã trình bày tổng quan về vấn đề tìm kíêm văn bản,
phát biểu và tổng kết các hướng nghiên cứu cho các dạng bài toán tìm
kiếm. Nội dung của luận văn tập trung giải quyết bài toán so đơn mẫu,

OTOMAT MỜ
2.1. Bài toán so mẫu chính xác
2.1.1. Phát biểu bài toán


chính xác, xấp xỉ theo hướng tiếp cận sử dụng một số hệ hình thức

Cho xâu mẫu P độ dài m (P = P1P2 ... Pm) và xâu đích S độ dài n (S

otomat mờ. Ý nghĩa của tiếp cận này cũng như mô hình otomat mờ tổng

= S1S2 ... Sn) trên cùng bảng chữ A. Tìm tất cả các vị trí xuất hiện của

quát được giới thiệu ở mục 1.2. Cuối cùng là hai thuật toán kinh điển nổi
tiềng cho bài toán so đơn mẫu chính xác là KMP và BM được trình bày.
Việc tính toán bảng next trong KMP và ý tưởng về bước dịch chuyển xa
trong BM là nguồn gốc cho 2 thuật toán so đơn mẫu chính xác, xấp xỉ
theo tiếp cận mờ sẽ được đưa ra ở chương 2.

mẫu P trong xâu S.
Từ việc giải bài toán trên dễ dàng thống kê được tần suất xuất hiện
mẫu P trong một văn bản.
2.1.2. Độ mờ của mô hình
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 khoảng [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ờ
xuất hiện mẫu P trên S tại vị trí j là giá trị nguyên   0 thoả mãn:
-  = 0 nếu Sj  P1
-  là số lớn nhất sao cho P1P2 ...P = Sj-+1Sj-+2..... Sj
Trong các thuật toán so mẫu theo tiếp cận mờ ở đây, mỗi khi đọc
được một kí tự Sj sẽ cho biết ngay độ mờ xuất hiện mẫu. Giả sử đã biết
độ mờ tại vị trí j là , khi đọc được ký tự Sj+1 = a, độ mờ mới sẽ được

xác định như một hàm kiến thiết của cặp (,a).
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. Khi đó độ mờ được
xác định thông qua hàm TFuzz:

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



26

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



27


TFuzz: {0,1, ...,m} × (AP  #)  {0,1, ...,m}

- Duyệt S, mỗi lần một kí tự, bắt đầu từ S1. Giả sử trạng thái của

(,a)  ‟ = TFuzz (,a)
 gọi là độ mờ cũ, ‟ gọi là độ mờ mới khi gặp kí tự 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).

Hàm TFuzz được xây dựng dựa vào bảng next như trong thuật toán


- Tại vị trí j trên S, nếu trạng thái của otomat là q, có nghĩa khúc

KMP tìm nhiều lần lặp mẫu đã trình bày ở Mục 1.5.1. Dựa vào Định nghĩa

đầ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

1.3, bằng phương pháp quy nạp, ta nhận được ngay kết quả sau:

lần xuất hiện mẫu, bắt đầu từ vị trí j -m+1.

Bổ đề 2.1. Giả sử độ mờ xuất hiện mẫu P tại vị trí Sj là , khi đó

Mô hình otomat mờ cần được xây dựng một cách thích hợp để đáp

độ mờ mới ’ tại Sj+1 được xác định bởi một hàm ’ = TFuzz (, Sj+1),

ứng được yêu cầu sánh mẫu như trên.

với TFuzz được xác định như sau:

Định nghĩa 2.2. Otomat mờ so mẫu là bộ A(P) = (A, Q, q0, , F) trong đó:
+ Bảng chữ vào A = AP  {#}

0, x  P1
+ TFuzz (0, ) = 
1, x  P1

+ Tập trạng thái Q = {0,1,...,m}
+ Trạng thái khởi đầu q0 = 0


+ TFuzz (i, #) = 0, i = 0..m

+ Trạng thái kết thúc F = m.

i+1, nếu  = Pi+1

 TFuzz i, x  
i 1..m

+ Hàm chuyển : Q  A  Q

(q,a) = TFuzz (q,a), với hàm TFuzz được xác định như trong Bổ đề 2.1.

j, j  i và j là số lớn nhất sao cho

2.1.3.2. Tính đúng đắn của thuật toán

P1P2...Pj-1 = Pi-j+2Pi-j+3...Pi và Pj = , nếu   {Pi+1, #}

Định lý 1.1. Cho xâu mẫu P độ dài m. A(P) là otomat mờ được xác định

Việc xác định j dựa vào bảng next và một vòng lặp.

theo định nghĩa 2.2. Giả sử q = (q0, w), w  A*. Nếu q = F thì P là khúc

2.1.3. Thuật toán KMP mờ

cuối của w.

2.1.3.1. Otomat so mẫu


Chứng minh. Dựa vào Bổ đề 2.1. và định nghĩa 2.2., tiến hành quy

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:

nạp theo độ dài của từ w, dễ dàng nhận được điều phải chứng minh.
2.1.3.3. Thuật toán
Khi cài đặt thuật toán cần lưu ý lựa chọn cấu trúc dữ liệu phù hợp

- 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.

để có thể truy nhập nhanh chóng trong bảng TFuzz.
Gọi A[0..k] là mảng lưu giữ bảng chữ A của otomat, trong đó k là
số kí tự phân biệt trong mẫu P. Màng được sắp theo chiều tăng của các kí

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



28

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



29



tự và A[k] = „#‟. Để thuận tiện khi truy nhập đến các chữ cái trong A, có

var j, counter: integer; fuz: array [1..50] of integer; {* độ mờ*}

thể sử dụng mảng index xác định vị trí của chữ trong bảng.

begin
j :=1; counter :=0; fuz[0] = 0;

i, nếu c = A [i]
index [c] =

while (còn đọc được Sj) do

k, nếu c  {A[0], A[1], ...A[k-1]}

begin fuz [j] = TFuzz [fuz[j-1], index [Sj]];

TFuzz là mảng [0..m, 0..k], trong đó TFuzz [i, j] là độ mờ mới khi

if fuz [j] = m then

độ mờ i gặp kí tự x có index [] = j.

begin counter :=counter+1;

Khi đó chi tiết thuật toán tạo lập bảng TFuzz và tìm kiếm dựa vào

Ghi nhận vị trí j-m+1;


bảng TFuzz sẽ như sau:

end;

Thuật toán 2.1. Tạo lập TFuzz

end; {while}

procedure initTFuzz()

Ghi nhận counter;

var i, j, t: integer;

if counter = 0 then Ghi nhận vị trí 0;

begin

end;
for i: = 0 to m do

Ví dụ 2.1. Với mẫu P = aababaab, A = {a, b, #}, AP = {a,b}.

TFuzz [i,m]:=0;

Bảng TFuzz được tính toán dựa trên mảng next (ví dụ 1.1, Mục

for j: = 0 to k do TFuzz [0, j] := 0;


1.5.1) cho kết quả như sau:

TFuzz [0, index [P1]]:=1;

A

a

b

#

0

1

0

0

1

2

0

0

elsse j:=i+1;


2

0

3

0

while (j > 0) and (Pj  A([t]) do j:=next [j];

3

4

0

0

4

2

5

0

5

6


0

0

6

7

0

0

7

2

8

0

8

4

0

0

for i: = 0 to m do


Q

for t: = 0 to k-1 do
begin if i = m then j:= next [i+1]

TFuzz [i, index [A[t]]:= j;
end;
end;
Thuật toán 2.2. Tìm kiếm mẫu dựa vào bảng TFuzz
procedure FPM();
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



30

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



31


Quá trình so mẫu trên dòng dữ liệu S = aabaababaababaababaab sẽ
như sau:

Với P = aababaab, sử dụng bảng next (ví dụ 1.1, mục 1.5) để tìm
sự xuất hiện của mẫu trong dòng ký tự S như sau:

j 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

S a a b a a b a b a a b a b a a b a b a a b
j 1 2 3 4 2 3 4 5 6 7 8 4 5 6 7 8 4 5 6 7 8

ghi nhận
11-8+1=4

ghi nhận
168+1=9

ghi nhận
21-8+1=14

S = a a c ...

j=3

P=aababaab

i=3

dịch lần thứ nhất a a b a b a a b

i = next[i] = 2

dịch lần thứ 2

i = next[i] = 0

aababaab


Ta thấy có 2 lần dùng i:= next[i] và 2 lần so sánh Sj và Pi (i khác
nhau). Nói chung có thể xảy ra nhiều lần dùng next trong khi con trỏ trên

2.1.3.4. So sánh KM P và thuật toán KMP mờ

S vẫn giữ nguyên. Điều này làm chậm đáng kể so với tiếp cận mờ: mỗi

j-i = i - 1

lần nhận một ký tự Sj là một lần điều chỉnh giá trị mờ theo otomat: j =

i

TFuzz (j-1, Sj). Lệnh này thực hiện rất nhanh nếu TFuzz được biểu diễn

S
i

dưới dạng một mảng và được tính toán cẩn thận trước theo thông tin trên

P

mẫu P.
P

Kết quả sau so sánh tốc độ thực hiện việc tìm sự xuất hiện mẫu P

?
next [i]


trong tệp dữ liệu lớn S theo hai thuật toán KMP và tiếp cận mờ trên máy

Hình 2.1. Dịch chuyển con trỏ trên mẫu

PC IBM tốc độ 233MHz.

Giả sử đã xuất hiện khúc đầu độ dài i-1 của P trên S, tính tới vị

Mẫu P

Kích thước tệp S

TKMP

TFuzzy-KMP

trí j, có nghĩa đã có P(i - 1) = sufi - 1(S(j - 1)) hay độ mờ tại vị trí j - 1

1)

aababcab

1400 KB

17% s

11% s

là j-i = i - 1. Xét ký tự Sj, có thể xảy ra hai khả năng:


2)

MDSVF6V

140.000 KB

35 s

30 s

3)

bacabccaa

1200 KB

16% s

10% s

4)

S068FAB50

140.000 KB

37 s

30 s


+ Trường hợp 1: Sj = Pi (hay độ mờ tại vị trí j là j = i)
Tăng i, j lên 1. Với trường hợp này tốc độ thao tác của thuật toán
KMP như trong tiếp cận mờ.
+ Trường hợp 2: Sj  Pi (hay độ mờ tại vị trí j là j  i)
Trong KMP, con trỏ j trên S giữ nguyên, chỉ dịch chuyển con trỏ
trên mẫu (dùng lệnh i:= next[i] (Hình 2.1). Vì vậy phải mất thời gian
dịch chuyển theo bảng next, thậm chí nhiều lần. Ví dụ như:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



32

2.1.4. Thuật toán KMP - BM mờ
2.1.4.1. Ý tưởng của thuật toán
Trong thuật toán Boyer - Moore (BM), các ký tự trên mẫu P được
duyệt từ phải sang trái, bắt đầu từ Pm. Tại thời điểm gặp ký tự không
trùng khớp, chẳng hạn Pi = a còn Sj = b, khi đó sẽ quyết định dịch con trỏ
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



33


trên mẫu. Phép dịch chuyển ứng với mỗi ký tự trên P, nếu sự không

1+m-n1

trùng khớp xảy ra ở đó, được xác định trong bước tiền xử lý mẫu P.


m+1

Trong thuật toán “ký tự không khớp” này của BM, có một trường hợp
cho phép dịch chuyển tốt nhất (xa nhất) là khi ký tự b không xuất hiện

S

ptr

trong mẫu P. Từ chi tiết này, kết hợp với kiểu sánh mẫu như trong KMP,
P(n1)

ta sẽ có một “thuật toán theo tiếp cận mờ tổng quát kiểu KMP và BM”,
trong đó độ mờ vẫn được tính toán dựa trên hàm TFuzz, đồng thời sẽ có
những bước nhảy dài trên xâu đích, đem lại hiệu quả tìm kiếm cao.

ptr+m-n1

Hình 2.2. Ý tưởng chung của thuật toán KMP-BM mờ
2.1.4.2. Otomat mờ so mẫu

Ý tưởng của thuật toán này là [11]: gọi ptr là con trỏ trên xâu đích

Định nghĩa 2.3. Cho P là xâu mẫu độ dài m trên bảng chữ A. Ap là

S (khởi đầu ptr = 0 và độ mờ tại đó bằng 0 báo hiệu chưa tìm thấy mẫu).

bảng các ký tự xuất hiện trong P. Otomat mờ so mẫu là A(P) = (Ak, Q, q0,


Mỗi lần xét một khối w gồm m + 1 ký tự liên tục trên S, bắt đầu từ vị trí

F, ), trong đó:

ptr, ta gọi khối này là “khối ký tự quan sát” và ký hiệu wi là ký tự thứ i
trong w (với w1 = Sptr). Dựa trên bảng TFuzz, tính độ mờ xuất hiện mẫu
khi gặp ký tự w1 (hay chính là Sptr), ký hiệu độ mờ này là n1, đồng thời
xác định bước nhảy tiếp theo để từ đó sẽ xét khối ký tự w mới, ký hiệu

+ Ak là bảng chữ vào, mỗi chữ là một xâu ký tự độ dài k trên A,
k=m+1
+ Q là tập hữu hạn các trạng thái,
Q = {q=(n1,n2)| n1, n2  N, 0  n1  m, 1  n2  k}

bước nhảy là n2. Nếu n1 là độ mờ tại Sptr thì có nghĩa sufn1(S(ptr)) =

 n1 gọi là độ mờ tại vị trí đang xét

P(n1) (Hình 2.2). Xảy ra các khả năng sau:

 n2 gọi là bước nhảy tiếp theo vị trí đang xét

+ Nếu n1 = m, chứng tỏ đã xuất hiện mẫu bắt đầu từ vị trí ptr - m + 1
trên S. Để không bỏ sót sự xuất hiện lồng nhau của mẫu, đặt n2 = 1.
+ Nếu n1 lớn hơn độ mờ tại vị trí được xét trước vị trí ptr, có
nghĩa đang có hy vọng tìm thấy mẫu nên n2 = 1.

+ q0 là trạng thái khởi đầu, q0 = (0,1)
+ F là trạng thái kết thúc, F = (m,1)
+ Hàm chuyển : Q × Ak  Qs

(q, w)  q‟ = (q, w)

+ Trong các trường hợp còn lại của n1, chỉ mới xuất hiện khúc đầu

Với q = (n1, n2) thì q‟ = (n1‟, n2‟) được xác định như sau:

P(n1) khớp với khúc cuối độ dài n1 của S(ptr). Nếu việc khớp mẫu thành

 Nếu n2 > 1 thì đặt n1 = 0

công với khối ký tự quan sát w, thì ký tự Pm sẽ khớp với ký tự Sptr+m-n1

 Tính n1‟ = TFuzz (n1, w1)

(hay w1+m-n1). Do đó, nếu Sptr+m-n1 không phải là một ký tự xuất hiện trong

 Nếu n1‟ = m hoặc n1‟ > n1 thì n2‟ = 1,

P thì có thể thực hiện bước nhảy xa để đọc w mới bắt đầu từ vị trí ptr+m-

ngược lại (n1‟ < m và n1‟  n1) thì xét:

n1+1 trên S mà vẫn đảm bảo không bỏ sót sự xuất hiện nào của mẫu.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



34

Nếu w1+m-n1‟  Ap thì n2‟ = 1, ngược lại n2‟=1+m-n1‟

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



35


if w1+m-q.n1  Ap then q.n2: = 1+m-q.n1; endif;

Hoạt động của otomat mờ so mẫu như sau:
Cho mẫu P độ dài m và xâu đích S độ dài n trên bảng chữ A. A(P)

endif;

là otomat được xác định theo định nghĩa 2.3. Ta sẽ dùng otomat A(P) để

endif;

đoán nhận tất cả các vị trí xuất hiện mẫu P trong xâu S và tổng số lần

qold := q;

xuất hiện mẫu. Thuật toán cơ bản dựa trên otomat được mô tả như sau:
Thuật toán 2.3.

endwhile;
2.1.4.3. Thuật toán 2.4

Ta dùng các ký hiệu:


procedure GFSearching (); {tìm kiếm mẫu dựa trên định nghĩa 2.3}

+ j là con trỏ quan sát trên S

var apr: array [1..N] of integer;

+ q.n1, q.n2 là hai thành phần của trạng thái q

counter, j, n1, n2, n1’, n2’: integer;

+ w là khối ký tự quan sát bắt đầu từ vị trí j trên xâu đích S, giả sử
đã bổ sung thêm m ký tự # vào cuối S.

begin
j:= 0; n1:= 0; n2 := 1;

+ qold là trạng thái của otomat tại vị trí trước khi đọc w

while j <= n do

+ q là trạng thái otomat sau khi tác động w, q = (qold, w)

begin

j := j + n2;

+ Counter là biến đếm số lần xuất hiện mẫu.

if n2 > 1 then n1:= 0;


Bước 1: Khởi tạo

n1’ := TFuzz [n1, index [S[j]]];
n2’: = 1;

j: = 0; counter := 0; qold.n1 :=0; qold.n2 :=1;
Bước 2: While j  n do

if n1’ = m then
begin

j: = j + qold.n2
Đọc khối ký tự quan sát w; {w1 Sj}

counter := counter + 1;
apr[counter]:= j - m + 1;

{Tính q = (qold, w)}

end

if qold.n2 > 1 then qold.n1:= 0; endif;

else if n1’ < m and n1’ <= n1 then

q.n1: = TFuzz (qold.n1, w1);

begin if j + m - n1’ > n then return;
if index [S[j + m - n1’]] = k then n2’ : = 1 + m - n1’;


q.n2: = 1;
end;

if q.n1= m then
Ghi nhận vị trí xuất hiện mẫu là j - m + 1;

n1:=n1’; n2: = n2’;

Counter: = counter + 1;

end;

else if q.n1 < m and q.n1 < qold.n1 then

end;

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



36

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



37


Tính độ tương tự giữa hai xâu bằng các kĩ thuật trên được kết quả


2.2. Bài toán so mẫu xấp xỉ
2.2.1. Đặt vấn đề

như sau:

Để tìm kiếm xấp xỉ, cần sử dụng một hàm khoảng cách (distance

+ Độ dài dãy con chung dài nhất: 3, độ tương tự có thể xem là 3/18

function) đo độ tương tự giữa hai xâu. Tương tự ở đây được hiểu là giữa

+ Độ dài xâu con chung dài nhất: 2, độ tương tự có thể xem là 2/18

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

+ Khoảng cách Levenshtein: 14.

thường, không xét về khía cạnh ngữ nghĩa (OCR - optical character

+ Khoảng cách Hamming: 18 (đúng bằng độ dài xâu S).

recognition errors), chẳng hạn “Việt Nam” và “Việt Nan” hay “Việtt

Độ tương tự giữa hai xâu kí tự P và S theo những độ đo kinh điển

Nan”,... Có thể kể ra một số kỹ thuật phổ biến đo độ tương tự giữa hai

kể trên là rất nhỏ, mặc dù hai xâu rất gần nhau về mặt ngữ nghĩa. Để đáp


xâu: xâu con chung dài nhất, dãy con chung dài nhất, khoảng cách soạn

ứng nhu cầu tìm kiếm trong những tình huống như trên, một mô hình lỗi

thảo (Edit Distance).

phản ánh độ tương tự giữa hai xâu kí tự là “Độ bảo toàn thứ tự xuất hiện

Các kỹ thuật trên chủ yếu chỉ hiệu quả khi có những sai khác về

các kí tự” được đề xuất.

mặt chính tả: có sự bổ sung, xoá hay thay thế một số kí tự. Trong nhiều

Do độ tương tự xác định theo hai cách này phản ánh được độ gần

tình huống, những kỹ thuật này chưa đáp ứng đầy đủ yêu cầu thực tế,

gũi ngữ nghĩa giữa hai xâu, xét về mặt thống kê, nên được gọi là “độ

như khi cần tìm kiếm theo tên người nước ngoài (chẳng hạn “christian

tương tự tựa ngữ nghĩa”.

Charras” và “Charas C”), khi có sự sai khác do biến đổi hình thái từ, cấu

Một mô hình lỗi kinh điển là dựa vào độ dài khúc con chung dài

trúc câu (“approximate searching” và “search approximately”), một số


nhất song với cách tiếp cận otomat mờ được đề xuất ở đây sẽ đem lại

trường hợp thứ tự ghép từ khác nhau nhưng mang ngữ nghĩa giống nhau

một thuật toán nhanh, đặc biệt hiệu quả khi cần so mẫu P với rất nhiều

(“toán logic” và “logic toán”) hoặc do thứ tự sai song vẫn hiểu được

xâu S.

đúng nghĩa (“toán giải tích” và “giải tích toán”,...). Phương pháp xác

2.2.2. Bài toán

định độ tương tự giữa hai xâu kí tự theo “độ gần tựa ngữ nghĩa” được đề
xuất trong luận văn sẽ đáp ứng nhu cầu tìm kiếm như trên.

Bài toán được phát biểu: Cho xâu nguồn P độ dài m và xâu đích S
độ dài n. Xác định dộ tương tự giữa hai xâu P và S.

Xét một tình huống khác. Khi ứng dụng trong thực tế, mỗi từ theo

Bài toán này có thể coi là cốt lõi để cài đặt tính năng tìm kiếm xấp

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

xỉ tựa ngữ nghĩa trong cơ sở dữ liệu và trong các hệ thống trích rút vă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á


bản. Trường hợp S là một dòng dữ liệu văn bản (trong các máy tìm kiếm

là P = derq và S là “Ở trường tôi bạn Minh được đánh giá là một trong những

của hệ thống khai phá text, khai phá web,...), xâu mẫu P thường ngắn

sinh viên học Toán giỏi nhất", hình thức hoá là S = abcdefghiklmnopqrs.

còn xâu đích S dài hơn rất nhiều so với P nên để phản ánh ngữ nghĩa
được tốt cần phải chặt khúc dòng dữ liệu S và sánh từng khúc với P

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



38

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



39


(chẳng hạn, việc ngắt câu có thể xem là một cách chặt khúc). Khi đó độ

+ Quy ước pref0(u) = suf0(u) =  (từ rỗng)

tương tự sẽ được tổng hợp từ các kết quả so sánh P và các khúc của S.


+ Với hai số tự nhiên f, d, ||u||  d  f  0, đặt u(f,d) = suff(prefd(u)) là khúc

Khi áp dụng trong các hệ thống xử lý văn bản, rất hay gặp những

cuối độ dài f của một khúc đầu gồm d kí tự của u. Quy ước u(0,d) = .

lỗi nhỏ về mặt chính tả (như: “Việt Nam” và “Việt Nan”, “vật lý” và “vật

+ Với mỗi xâu y là khúc con của u, đặt lid(y,u) = (|y|, Min {dN| f  0:

lí” ...) hoặc do dùng các từ đồng nghĩa hay có nghĩa tương tự nhau (như

u(f,d) = y}).

„yêu‟ và „thích‟, „mê‟,...) do sự biến đổi về hình thái từ (trong một số ngôn

+ 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

ngữ: Anh, Pháp, ... “approximate” và “aproximately”). Để đáp ứng nhu

là khúc con nào đó của u, độ dài của xâu y như vậy được ký hiệu là

cầu tìm kiếm được tốt hơn, có thể dùng các thuật toán tìm kiếm xấp xỉ

lfuz(v, u).

nhưng tính tới độ tương tự của các kí tự, về mặt chính tả hoặc về mặt ngữ

Ví dụ 2.2. Cho u = drabcgaba, pref6(u) = drabcg, suf2(drabcg) = cg, do


nghĩa. Khi đó khái niệm “xuất hiện” hay “thuộc xâu P” của một kí tự c

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

được hiểu như sau:

thúc tại vị trí 4 trên u và ab có độ dài 2.

- Sử dụng một hàm đo độ tương tự với ngưỡng mờ  nào đó do
người sử dụng chọn.

Cho v = ghbacabc, lfact(v,u) = abc, lfuz (v,u) = 3, lfact (u,v) = ba,
lfuz(u,v) = 2.

- Tìm kí tự hình thức trong P có độ tương tự cao nhất so với c và
nằm ở bên trái nhất.

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 độ tương tự đó lớn hơn ngưỡng  thì coi như c chính là kí tự

nếu P(f,d) = P(f‟,d‟) (khi đó hiển nhiên f = f‟). Lớp tương đương của một

tương ứng trên P, nếu không thì coi như c không xuất hiện trên P.

cặp (f,d) được kí hiệu là [f,d]. Cặp số (f,d) được gọi là có nghĩa (với P)

2.2.3. Độ tương tự dựa trên độ dài khúc con chung của hai xâu


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

2.2.3.1. Phát biểu bài toán

cho lid(y,P) = (f,d).

Bài toán: Cho xâu mẫu P = P1P2 ...Pm (độ dài m) và xâu đích S =

Ví dụ 2.3. Cho u = drabcgaba, các cặp (2,4), (2,8) tương đương vì u (2,4) =

S1S2 ... Sn (đo độ dài n) trên bảng chữ A. Tìm khúc con chung dài nhất

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

giữa hai xâu P và S.

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.

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:

Phương pháp giải quyết
Độ 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).

+ prefm(u) = u1u2..um (hay gọn hơn là u(m), là khúc đầu gồm m chữ của u.

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ị


+ sufm(u) = uk-m+1uk-m+2...uk là khúc cuối gồm m chữ của u.

trí thứ j, sau khi đọc được kí tự Sj, cho biết ngay cặp giá trị (f,d) có nghĩa

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên



40



41


×