Tìm kiếm thông tin

Một phần của tài liệu nghiên cứu thuật toán knuth-morris-pratt và ứng dụng (Trang 59 - 76)

3.1.2.1 Giới thiệu

Mục đích của tìm kiếm là trả lại cho ngƣời dùng một tập các thông tin thỏa mãn nhu cầu của họ. Ta định nghĩa rằng thông tin cần thiết là câu truy vấn và các thông tin đƣợc chọn là tài liệu. Mỗi cách tiếp cận trong tìm kiếm thông tin bao gồm 2 thành phần chính: một là các kỹ thuật để biểu diễn thông tin (câu truy vấn, tài liệu) và hai là phƣơng pháp so sánh các cách biểu diễn này. Mục đích là để thực hiện tự động qui trình kiểm tra các tài liệu bằng cách tính toán độ tƣơng quan giữa các câu truy vấn và tài liệu. Qui trình tự động này thành công

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

khi nó trả về các kết quả giống với các kết quả đƣợc con ngƣời tạo ra khi so sánh câu truy vấn với các tài liệu.

Hình 3.1. Mô hình biểu diễn và so sánh thông tin

Gọi miền xác định của hàm biểu diễn câu truy vấn q là Q, tập hợp các câu truy vấn có thể có; và miền giá trị của nó là R, không gian thống nhất biểu diễn thông tin. Gọi miền xác định của hàm biểu diễn tài liệu d là D, tập hợp các tài liệu; và miền giá trị của nó là R. Miền xác định của hàm so sánh c là R × R và miền giá trị của nó là [0,1], tập các số thực từ 0 đến 1. Trong một hệ thống tìm kiếm lý tƣởng:

c(q(query), d(doc)) = j(query, doc) , ∀query ∈ Q, ∀doc ∈ D

Với j: Q × D  [0,1] biểu diễn việc xử lý của ngƣời dùng về mối quan hệ của thông tin trên câu truy vấn và thông tin trong tài liệu.

Có nhiều cách đo lƣờng khác nhau cho việc đánh giá mức độ xử lý trả về kết quả của một hệ thống tìm kiếm thông tin. Các cách đo lƣờng đều đòi hỏi một tập tài liệu và một câu truy vấn trên tập tài liệu đó, giả sử rằng mỗi tài liệu có thể liên quan hoặc không liên quan đến câu truy vấn.

Độ chính xác (Precision): đƣợc đo bởi tỉ lệ của tài liệu trả về chính xác trên tổng các tài liệu nhận đƣợc:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Độ bao phủ (Recall): đƣợc đo bởi tỉ lệ tài liệu trả về chính xác trên tổng các tài liệu có liên quan:

Kết quả sai (Fall-out): đƣợc đo bởi tỉ lệ các tài liệu không có liên quan tả về trên tổng các tài liệu không liên quan

3.1.2.2 Các mô hình tìm kiếm thông tin thường sử dụng

Mô hình so khớp: là một mô hình mà chúng ta có thể xem mỗi câu truy vấn là một biểu thức logic các mục từ, trong đó gồm các mục từ kết hợp với các toán tử logic (AND, OR, và NOT). Mô hình sẽ xem mỗi tài liệu là một tập hợp các mục từ. Mỗi mục từ sẽ chứa một danh sách các tài liệu có chứa nó, danh sách này gọi là posting, việc so khớp sẽ duyệt qua danh sách posting để kiểm tra các tài liệu có chứa mục từ hay không.

Phương pháp tính điểm: Mô hình so khớp chỉ trả về giá trị chân lý là có hoặc không có trong tài liệu tìm kiếm, kết quả trả về không có thứ hạng. Điều này đã dẫn đến kết quả tìm kiếm không đƣợc nhƣ mong muốn của ngƣời dùng. Để cải tiến mô hình này, ngƣời ta áp dụng cách tính điểm cho kết quả trả về, dựa trên trọng số của mục từ trên tài liệu.

Tần suất xuất hiện của mục từ t trên tài liệu d đƣợc ký hiệu là tft,d. Tần suất nghịch đảo của tài liệu d trên tập N tài liệu ký hiệu là idft = log(N / dft), khi đó trọng số mục từ t trên tài liệu d sẽ là tf-idf = tft,d x idft, điểm số của tài liệu d sẽ là tổng điểm các mục từ trong câu truy vấn có mặt trong d:

Ví dụ với 1000 tài liệu có 100 tài liệu chứa mục từ “tin” và 150 tài liệu chứa mục từ “học”, giả sử tài liệu thứ nhất d có 3 lần xuất hiện mục từ “tin” và 4

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

lần xuất hiện mục từ “học”, khi đó điểm số của câu truy vấn q=”tin học” trên tài liệu d sẽ là:

Score(q,d) = tftin,d - idftin + tfhọc,d - idfhọc = tftin,d × log (N/dftin) + tfhọc,d × log(N/dfhọc) = 3 × log (1000/100) + 4 × log (1000/150) ~ 6.23

Mô hình không gian vec-tơ: Mô hình so khớp và cả phƣơng pháp tính điểm số ở trên chƣa xét vai trò của các mục từ trong câu truy vấn. Ví dụ hai tài liệu chứa câu “Mary is quicker than John” và “John is quicker than Mary”, số lƣợng các mục từ nhƣ nhau nhƣng vai trò khác nhau hoàn toàn. Để giải quyết vấn đề này ngƣời ta đƣa ra mô hình không gian vec-tơ, mô hình này sẽ biểu diễn tài liệu d nhƣ một vec-tơ tần suất các mục từ V(d) .Với hai tài liệu trên thì tuy có các mục từ giống nhau, nhƣng biểu diễn vec-tơ của chúng thì lại khác nhau, khi đó chúng ta có thể tính mức tƣơng quan giữa hai tài liệu:

Đối với truy vấn q chúng ta cũng xem đây là một vec-tơ V(q) biểu diễn tần suất các mục từ truy vấn. Mức độ tƣơng quan giữa hai vector đƣợc tính theo hàm cosin của góc giữa chúng:

Hình 3.2. Mô hình không gian vec tơ

Ví dụ, với truy vấn best car insurance trên tập dữ liệu với N=1.000.000 tài liệu với tần số xuất hiện của 4 mục từ auto, best, car, insurance lần lƣợt là 5.000,

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Bảng 3.1. Tính điểm số

Nhƣ vậy, điểm số Score (q,d) = 0 + 0 + 0.82 + 2.46 = 3.28

3.2. Mã nguồn mở Lucene

3.2.1. Giới thiệu

Năm 1998, Doug Cutting – từng là nhân viên của Excite, Yahoo, và đang làm việc tại Apache Software Foundation - đã bắt đầu tiến hành xây dựng thƣ viện tìm kiếm thông tin mã nguồn mở Lucene với mục tiêu phát triển nó thành một thƣ viện tìm kiếm tài liệu hoàn chỉnh, cho phép các nhà phát triển ứng dụng dễ dàng tích hợp chức năng tìm kiếm vào hệ thống của mình [10].

Lucene là một thƣ viện tìm kiếm thông tin có khả năng xử lý và khả năng mở rộng ở mức cao, cho phép chúng ta có thể tích hợp vào các ứng dụng. Lucene là một dự án mã nguồn mở và nguyên thuỷ đƣợc phát triển bằng ngôn ngữ Java, ngày nay Lucene đƣợc phát triển bằng nhiều ngôn ngữ khác nhau nhƣ Delphi, Perl, C#, C++, Python, Ruby và PHP…

Thƣ viện này cung cấp các hàm cơ bản hỗ trợ cho việc đánh chỉ mục và tìm kiếm. Để có thể sử dụng Lucene, cần phải có sẵn dữ liệu. Dữ liệu có thể là tập hợp các tập tin dạng PDF, Word hay là các trang web HTML; hoặc là dữ liệu lƣu trong các hệ quản trị CSDL nhƣ MS SQL Server hay MySQL. Dùng Lucene, có thể tiến hành đánh chỉ mục trên dữ liệu hiện có để sau này có thể thực hiện thao tác tìm kiếm toàn văn trên dữ liệu đó.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 3.3. Mô hình đánh chỉ mục của Lucene

Thành phần Tạo chỉ mục: bao gồm các phần chức năng xử lý tạo chỉ mục, từ văn bản đầu vào để cho ra kết quả là một tập chỉ mục. Lucene chỉ hỗ trợ trên văn bản sau khi đƣợc tách nội dung ở dạng ký tự thuần, nó cho phép lập chỉ mục trên từng trƣờng thông tin của văn bản và cho phép thiết lập hệ số cho từng trƣờng thông tin để nâng cao vai trò lúc tìm kiếm.

Directory: cho phép định nghĩa vùng nhớ, xác định nơi lƣu trữ trên bộ nhớ ngoài và bộ nhớ trên RAM trong quá trình tạo chỉ mục. Document và Field: định nghĩa tài liệu và các trƣờng thông tin của tài liệu sử dụng cho lập chỉ mục, nó cũng sử dụng cho việc lấy kết quả trả về cho thành phần Tìm kiếm.

Analyzer: thực hiện chức năng xử lý và tách văn bản để lấy nội dung, chuẩn hóa, loại bỏ mục từ không cần thiết,… để chuẩn bị cho việc lập chỉ mục

IndexWriter: là phần chính trong thành phần Tạo chỉ mục, nó thực hiện việc tạo mới hoặc mở chỉ mục, sau đó thực hiện thêm mới hoặc cập nhật nội dung của chỉ mục.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

3.2.2. Các bƣớc sử dụng Lucene

1. Mô tả đối tƣợng cần đánh chỉ mục: Lucene coi mỗi đối tƣợng cần đánh chỉ mục là một Document. Mỗi Document có thể có nhiều Field, mỗi Field tƣơng ứng một thuộc tính của đối tƣợng cần đánh chỉ mục. Ví dụ, muốn tìm kiếm các trang web ở dạng HTML. Nhƣ vậy đối tƣợng cần đánh chỉ mục là trang HTML; các thuộc tính có thể là nơi lƣu trữ (host), đƣờng dẫn, tiêu đề, metadata và nội dung của chính trang web. Với mỗi Field, bạn có thể chọn giữa đánh chỉ mục hay không đánh chỉ mục. Nếu chọn đánh chỉ mục, bạn có thể tìm kiếm trên Field đó. Các Field không đánh chỉ mục thƣờng là các Field không quan trọng trong quá trình tìm kiếm và phục vụ chủ yếu cho nhu cầu trình bày kết quả trả về.

2. Đánh chỉ mục: Thực hiện xây dựng các hàm công cụ để chuyển đổi dữ liệu ban đầu thành dữ liệu mô tả trong Document. Ví dụ, nếu dữ liệu ban đầu của là tập tin PDF hay Word, thì phải có các hàm để đọc hiểu các định dạng này và chuyển về dạng chuỗi văn bản tƣơng ứng. Thao tác đánh chỉ mục khá phức tạp. Trƣớc hết dữ liệu văn bản sẽ đƣợc phân tích thành các từ khóa, đồng thời loại bỏ các từ không dùng đến (stop words, trong tiếng Anh các từ nhƣ a, an, the là các stop words), sau đó các từ khóa sẽ đƣợc dùng để tạo inverted index (chỉ mục nghịch đảo) và lƣu thành các phân đoạn dạng thuận tiện cho việc tìm kiếm sau này. Chỉ mục nghịch đảo dùng để chỉ cách lƣu trữ danh sách các tài liệu mà có chứa từ cho trƣớc. Gọi là nghịch đảo bởi vì thông thƣờng, với mỗi tài liệu cho trƣớc, ngƣời ta lƣu trữ danh sách các từ có trong tài liệu đó. Ví dụ, với từ khóa Lucene, ta sẽ lƣu trữ danh sách các trang web A, B, C có chứa từ khóa này. Sau này khi ngƣời dùng gõ vào từ khóa Lucene, danh

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

sách này có thể giúp định vị nhanh chóng các trang web có chứa nó. Nếu dùng chỉ mục thông thƣờng, phải quét qua hết các trang web có trong cơ sở dữ liệu mới tìm ra. Cách này rất tốn thời gian khi số lƣợng dữ liệu lớn.

3. Tìm kiếm: Sau khi dữ liệu đã đƣợc đánh chỉ mục, có thể thực hiện tìm kiếm trên chúng. Tìm kiếm toàn vẹn cho phép bạn có thể tìm kiếm theo danh sách các từ khóa cùng với các toán tử luận lí.

Lucene không phải là một ứng dụng hay một máy tìm kiếm hoàn chỉnh để ngƣời dùng có thể sử dụng ngay, đây chỉ là một thƣ viện, nó cung cấp các thành phần quan trọng nhất của một máy tìm kiếm đó là tạo chỉ mục và truy vấn. Chính vì chỉ cung cấp các thành phần quan trọng trong việc tạo chỉ mục nên ngƣời dùng rất linh hoạt trong việc ứng dụng vào sản phẩm của mình, cũng nhƣ có một số cải tiến cho phù hợp hơn.

3.3. Ứng dụng tìm kiếm thông tin trên văn bản

Ứng dụng bao gồm hai thành phần:

1. Thành phần tạo chỉ mục: Bao gồm chức năng chính nhƣ chỉ định dữ liệu để lập chỉ mục, thực hiện phân tích tài liệu, tạo chỉ mục và lƣu trữ xuống tập chỉ mục, cập nhập chỉ mục trong trƣờng hợp bổ sung hay thay đổi nội dung chỉ mục.

2. Thành phần tìm kiếm: Áp dụng thuật toán KMP để thực hiện tìm kiếm, hiển thị danh sách kết quả và có liên kết đến tài liệu gốc.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 3.4. Mô hình ứng dụng tìm kiếm thông tin văn bản

3.4. Cài đặt chƣơng trình thử nghiệm

3.4.1. Giải pháp, công nghệ sử dụng

Công nghệ, công cụ: Ứng dụng đƣợc xây dựng trên bộ công cụ Microsoft Visual Studio 2010, trên nền tảng .Net Framework 4.0. Sử dụng thƣ viện mã nguồn mở Lucene để thực hiện đọc, phân tích và lập chỉ mục các tài liệu đƣợc lƣu trữ.

Thuật toán sử dụng: Sử dụng thuật toán KMP để thực hiện việc so mẫu.

3.4.2. Nội dung chƣơng trình

Chƣơng trình sử dụng thƣ viện IFilter để đọc và phân tích các file của Microsoft Office và trích xuất văn bản từ các file đó. IFilter là một thƣ viện có sẵn trong window (từ window 2000 trở lên).

Hàm thực hiện đọc, phân tích và lập chỉ mục cho các file văn bản

public static string Parse(string filename) {

IFilter filter = null; try {

StringBuilder plainTextResult = new StringBuilder(); filter = loadIFilter(filename);

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ STAT_CHUNK ps = new STAT_CHUNK();

IFILTER_INIT mFlags = 0; uint i = 0;

filter.Init( mFlags, 0, null, ref i); int resultChunk = 0; resultChunk = filter.GetChunk(out ps); while (resultChunk == 0) { if (ps.flags == CHUNKSTATE.CHUNK_TEXT) { uint sizeBuffer = 60000; int resultText = 0;

while (resultText == Constants.FILTER_S_LAST_TEXT || resultText == 0) {

sizeBuffer = 60000;

System.Text.StringBuilder sbBuffer =

new System.Text.StringBuilder((int)sizeBuffer); resultText = filter.GetText(ref sizeBuffer, sbBuffer); if (sizeBuffer > 0 && sbBuffer.Length > 0)

{

string chunk = sbBuffer.ToString(0, (int)sizeBuffer); plainTextResult.Append(chunk); } } } resultChunk = filter.GetChunk(out ps); } return plainTextResult.ToString(); } finally { if (filter != null) Marshal.ReleaseComObject(filter);

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ }

- Hàm tạo bảng so sánh:

public static int[] BuildTable(string p) {

int[] result = new int[p.Length]; result[0] = 0;

for (int i = 1; i < p.Length - 1; i++) {

// The substring from p[1] to p[i] string s = p.Substring(0, i + 1);

var prefixes = Enumerable.Range(1, s.Length - 1) .Select(a => s.Substring(0, a)).ToList();

var suffixes = Enumerable.Range(1, s.Length - 1) .Select(a => s.Substring(a, s.Length - a)).ToList(); var common = prefixes.Intersect(suffixes).FirstOrDefault(); result[i] = (common == null) ? 0 : common.Length;

}

return result; }

}

- Hàm tìm kiếm

private static int SearchKMP(int[] x, string s) {

int n = s.Length; int l = x.Length; int find = 0;

Char[] charPattern = pattern.ToCharArray(); for (int i = 0; i < n; )

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ string a = s.Substring(i, l);

if (a.CompareTo(pattern).Equals(0)) {

return i; // Found match, return match position of the first letter }

// move position by BuildTable

Char[] charSubstring = a.ToCharArray(); int count = 0;

for (int j = 0; j < l; j++) {

if (charPattern[j] == charSubstring[j]) {

count++;// count of matched chars continue;

} else {

i += count - x[j]; // move forward steps = matched count - table value break;

} } }

return -999; // not found }

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 3.4.3.1. Giao diện chính của chương trình

Hình 3.5. Giao diện chính của chƣơng trình

Lựa chọn thƣ mục có chứa các file (doc, xls, ppt, html, txt) cần tìm kiếm.

Nhất nút “Tải dữ liệu” để thực hiện việc lập chỉ mục cho các file văn bản trong thƣ mục.

Nhập từ khóa cần tìm kiếm trong các văn bản.

Chƣơng trình sẽ thực hiện đọc nội dung của các file văn bản có trong thƣ mục. Sau đó thực hiện so khớp từ khóa cần tìm trong nội dung của các văn bản (Tìm kiếm toàn văn) theo thuật toán KMP. Chƣơng trình sẽ đƣa ra danh sách các file mà nội dung có chứa từ khóa tìm kiếm. Khi chọn vào một trong những file kết quả thì chƣơng trình sẽ thực hiện mở file đó lên để xem nội dung.

3.4.3.2. Kết quả thử nghiệm của chương trình khi tìm kiếm với từ khóa “Văn bản”

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 3.6. Kết quả tìm kiếm của chƣơng trình

3.5. Kết luận chƣơng 3

Chƣơng này trình bày về bài toán tìm kiếm mẫu, tìm kiếm thông tin trên văn bản. Áp dụng thuật toán KMP để xây dựng chƣơng trình thử nghiệm đơn giản dựa trên ngôn ngữ lập trình C# trên nền hệ điều hành Window và tiến hành chạy thử nghiệm chƣơng trình với một số cụm từ khóa tìm kiếm trên các file văn bản lƣu trữ.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

KẾT LUẬN

Đánh giá kết quả đề tài:

Trong quá trình nghiên cứu và thực hiện, luận văn đã đạt đƣợc nhƣng kết quả nhƣ sau:

Giới thiệu một số khái niệm cơ bản so khớp chuỗi, các hƣớng tiếp cận, các dạng so khớp và một số thuật toán so mẫu.

Một phần của tài liệu nghiên cứu thuật toán knuth-morris-pratt và ứng dụng (Trang 59 - 76)

Tải bản đầy đủ (PDF)

(76 trang)