Nghiên cứu thuật toán knuth morris pratt và ứng dụng

68 737 1
Nghiên cứu thuật toán knuth morris pratt và ứng dụng

Đ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

-1- MỤC LỤC MỤC LỤC DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG MỞ ĐẦU CHƯƠNG SO KHỚP CHUỖI 1.1 Khái niệm so khớp chuỗi 1.2 Lịch sử phát triển 1.3 Các cách tiếp cận 10 1.4 Ứng dụng so khớp chuỗi 10 1.5 Các dạng so khớp chuỗi 11 1.5.1 So khớp đơn mẫu 11 1.5.2 So khớp đa mẫu 12 1.5.3 So mẫu mở rộng 13 1.5.4 So khớp xác 14 1.5.5 So khớp xấp xỉ 15 1.5.5.1 Phát biểu toán 15 1.5.5.2 Các tiếp cận so khớp xấp xỉ 16 1.5.5.3 Độ tương tự hai xâu 17 1.5 Một số thuật toán so mẫu 18 1.5.1 Thuật toán Brute Force 18 1.5.2 Thuật toán Karp-Rabin 19 1.5.3 Thuật toán BM ( Boyer- Moor) 21 1.5.4 Các thuật toán khác 24 1.6 Khớp chuỗi với otomat hữu hạn 25 1.6.1 Otomat hữu hạn 25 1.6.1.1 Ôtômát hữu hạn đơn định DFA 26 1.6.1.2 Ôtômát hữu hạn không đơn định NFA 30 1.6.2 Otomat khớp chuỗi 32 1.6.2.1 Giới thiệu 32 1.6.2.2 Thuật toán xây dựng Otomat so khớp chuỗi 35 1.7 Kết luận chương 36 CHƯƠNG THUẬT TOÁN SO KHỚP CHUỖI KNUTH-MORRIS-PRATT 37 2.1 Thuật toán KMP 37 2.1.1 Giới thiệu thuật toán 37 2.1.2 Bảng so sánh phần 41 -22.1.3 Độ phức tạp thuật toán KMP 43 2.2 Thuật toán KMP mờ 44 2.2.1 Otomat so mẫu 44 2.2.2 Thuật toán 45 2.2.2.1 Thuật toán tạo lập TFuzz 45 2.2.2.2 Thuật toán tìm kiếm mẫu dựa vào bảng TFuzz 46 2.2.3 So sánh KMP thuật toán KMP mờ 47 2.3 Thuật toán KMP - BM mờ 48 2.3.1 Ý tưởng thuật toán 48 2.4.2 Otomat mờ so mẫu 50 2.3.2.1 Giới thiệu 50 2.3.2.2 Hoạt động otomat mờ so mẫu 50 2.3.3 Thuật toán tìm kiếm 51 2.4 Kết luận chương 52 CHƯƠNG ỨNG DỤNG THUẬT TOÁN KMP TRONG TÌM KIẾM THÔNG TIN TRÊN VĂN BẢN 53 3.1 Bài toán tìm kiếm mẫu văn 53 3.1.1 Tìm kiếm mẫu 53 3.1.2 Tìm kiếm thông tin 54 3.1.2.1 Giới thiệu 54 3.1.2.2 Các mô hình tìm kiếm thông tin thường sử dụng 56 3.2 Mã nguồn mở Lucene 58 3.2.1 Giới thiệu 58 3.2.2 Các bước sử dụng Lucene 60 3.3 Ứng dụng tìm kiếm thông tin văn 61 3.4 Cài đặt chương trình thử nghiệm 62 3.4.1 Giải pháp, công nghệ sử dụng 62 3.4.2 Nội dung chương trình 62 3.4.3 Kết thực nghiệm 65 3.4.3.1 Giao diện chương trình 65 3.4.3.2 Kết thử nghiệm chương trình tìm kiếm với từ khóa “Văn bản” 66 3.5 Kết luận chương 66 KẾT LUẬN 67 TÀI LIỆU THAM KHẢO 68 -3- DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT BM Thuật toán Boyer - Moore DFA Deterministic Finite Automata - Ôtômát hữu hạn đơn định DOC Document FA Finite Automata - Ôtômát hữu hạn HTML HyperText Markup Language IDF Inverse document frequency - Tần suất tài liệu ngược KMP KNUTH-MORRIS-PRATT LAN Local area network NFA Nondeterministic Finite Automata - Ôtômát hữu hạn không đơn định TF Term frequency - Tần suất từ -4- DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG Hình 1.1 Sơ đồ chuyển DFA 27 Hình 1.2 Mô tả DFA 28 Bảng 1.1 Ví dụ hàm chuyển δ DFA 29 Hình 1.3 Sơ đồ NFA 30 Hình 1.4 Di chuyển chuỗi 31 Bảng 1.2 Ví dụ hàm chuyển trạng thái δ NFA 32 Hình1.5 Ví dụ so khớp chuỗi 33 Hình 1.6 Ví dụ otomat so khớp chuỗi 35 Bảng 2.1 Bảng so sánh phần 42 Bảng 2.2 Thí dụ khác 42 Bảng 2.3 Trường hợp mẫu xấu với thuật toán KMP 43 Bảng 2.4 Bảng next 46 Bảng 2.5 Bảng TFuzz 46 Bảng 2.6 Minh họa thí dụ 47 Hình 2.1 Dịch chuyển trỏ mẫu 47 Bảng 2.7 Kết tìm xuất mẫu P tệp S theo KMP tiếp cận mờ 48 Hình 2.2 Ý tưởng chung thuật toán KMP-BM mờ 49 Hình 3.1 Mô hình biểu diễn so sánh thông tin 55 Hình 3.2 Mô hình không gian vec tơ 57 Bảng 3.1 Tính điểm số 58 Hình 3.3 Mô hình đánh mục Lucene 59 Hình 3.4 Mô hình ứng dụng tìm kiếm thông tin văn 61 Hình 3.5 Giao diện chương trình 65 Hình 3.6 Kết tìm kiếm chương trình 66 -5- MỞ ĐẦU Lý chọn đề tài Máy tính ngày sử dụng hầu hết lĩnh vực góp phần quan trọng vào việc thúc đẩy phát triển kinh tế, xã hội, khoa học kỹ thuật, … Máy tính đời nhằm phục vụ cho mục đích định người Với tất xử lý máy tính để lấy thông tin hữu ích trình xử lí vấn đề đặc biệt quan trọng tìm kiếm thông tin với khối lượng lớn, độ xác cao, thời gian nhanh Cùng với phổ biến công nghệ thông tin, số lượng tài liệu điện tử gia tăng ngày Đến nay, số lượng tài liệu lưu trữ lên đến hàng tỷ trang Trong đó, nhu cầu khai thác kho tài liệu khổng lồ để tìm kiếm thông tin cần thiết nhu cầu thường ngày thiết thực người sử dụng Tuy nhiên, khó khăn người gặp phải việc khai thác thông tin khả tìm xác thông tin họ cần kho tài liệu Để trợ giúp công việc này, hệ thống tìm kiếm phát triển nhằm phục vụ cho nhu cầu tìm kiếm người sử dụng Những hệ thống tìm kiếm bắt đầu phát triển đưa vào ứng dụng, phổ biến hệ thống tìm kiếm theo từ khóa Nhiều hệ thống hoạt động hiệu Internet Google, Bing, Yahoo!… Tuy nhiên, phần lớn công cụ tìm kiếm sản phẩm thương mại mã nguồn giữ bí mật Hoặc hệ thống tìm kiếm máy cá nhân Windows Search, Google Desktop… đáp ứng phần nhu cầu người sử dụng, miễn phí cho cá nhân, nhiên đáp ứng phạm vi nhỏ dừng lại mức độ tìm kiếm từ khóa theo tiêu đề phần tóm tắt Có cách tiếp cận hiệu để giải vấn đề thực việc so khớp tìm kiếm toàn văn Một thuật toán so khớp chuỗi kinh điển thuật toán KMP Có thể nói, KPM thuật toán mẻ sử dụng Việt Nam việc quản lý, lưu trữ xử lý lượng liệu lớn -6- hiệu xác Dựa hướng tiếp cận hướng dẫn giáo viên, mạnh dạn nhận đề tài “So khớp chuỗi thuật toán Knuth-MorrisPratt” Đối tượng phạm vi nghiên cứu  Các khái niệm so khớp chuỗi  Các khái niệm thuật toán so khớp chuỗi KMP  Một số ứng dụng thuật toán KMP Hướng nghiên cứu đề tài  Nghiên cứu tìm kiếm Knuth–Morris–Pratt ứng dụng việc tìm kiếm thông tin văn  Nghiên cứu giải pháp công nghệ cài đặt chương trình thử nghiệm Những nội dung Luận văn trình bày chương, có phần mở đầu, phần kết luận, phần mục lục, phần tài liệu tham khảo Luận văn chia làm ba chương với nội dung sau:  Chương 1: Trình bày khái niệm so khớp chuỗi, hướng tiếp cận, dạng so khớp số thuật toán so mẫu  Chương 2: Trình bày thuật toán KMP, thuật toán KMP mờ thuật toán KMP-BM mờ  Chương 3: Trình bày toán tìm kiếm thông tin văn tiến hành cài đặt thử nghiệm chương trình Phương pháp nghiên cứu Tổng hợp tài liệu công bố thuật toán tìm kiếm thông tin, khai phá liệu, đặc biệt kết nghiên cứu liên quan đến thuật toán tìm kiếm thông tin Thực nghiệm thuật toán tìm kiếm KMP với liệu mẫu Nhận xét, đánh giá kết thử nghiệm -7- Ý nghĩa khoa học đề tài Luận văn nghiên cứu kỹ thuật, thuật toán tìm kiếm thông tin sở hỗ trợ cho công tác dự báo, lập kế hoạch, quy hoạch, phân tích liệu quản lý, chuyên môn, nghiệp vụ -8- CHƯƠNG SO KHỚP CHUỖI 1.1 Khái niệm so khớp chuỗi So khớp chuỗi kỹ thuật đóng vai trò tảng lĩnh vực xử lý văn Hầu tất trình soạn thoải xử lý văn cần phải có chế để so khớp chuỗi tài liệu Việc tích hợp thuật toán so khớp chuỗi khâu sử dụng việc triển khai phần mềm thực hầu hết hệ điều hành Mặc dù liệu lưu trữ nhiều hình thức khác nhau, văn hình thức chủ yếu để lưu trữ trao đổi thông tin Trong nhiều lĩnh vực so khớp, trích chọn thông tin, tin sinh học…, lượng lớn liệu thường lưu trữ tập tin tuyến tính Hơn khối lượng liệu thu thập tăng lên nhanh nên đòi hỏi phải có thuật toán xử lý so khớp liệu văn hiệu So khớp chuỗi việc so sánh nhiều chuỗi (thường gọi mẫu Pattern) với văn để tìm vị trí số lần xuất chuỗi văn Ta hình thức hoá toán so khớp chuỗi sau: coi văn mảng T[1 n] có chiều dài n khuôn mẫu mảng P[1 m] có chiều dài m; thành phần T P ký tự rút từ bảng chữ hữu hạn ∑ Ví dụ, ta có ∑ = {0,1} ∑ ={a,b, ,z} Các mảng ký tự P T thường gọi chuỗi ký tự Ta nói chuỗi w tiền tố (hậu tố) chuỗi x, ký hiệu w ⊂ x (w ⊃ x), x = wy (x = yw), với y chuỗi Để ngắn gọn, ta kí hiệu Pk để thể tiền tố k - ký tự P[1 k] khuôn mẫu P[1 m] Ta nói khuôn mẫu P xảy với khoá chuyển s văn T (hoặc, theo tương đương, nói khuôn mẫu P xảy bắt đầu vị trí s + i văn T) ≤ s ≤ n-m T[s + s + m] = P[1 m] (nghĩa là, T[s+j] = P[j], với ≤ j ≤ m) Bài toán so khớp chuỗi toán tìm tất khoá chuyển hợp lệ với khuôn mẫu P cho xảy văn T -9- cho Ví dụ: khuôn mẫu P = abaa xuất lần văn T = abcabaabcabac, khoá chuyển s = Với toán này, rõ ràng ta có cách làm đơn giản tìm tất khoá chuyển hợp lệ dùng vòng lặp kiểm tra điều kiện P[1 m] = T[s+1 s+m] với n - m + giá trị s 1.2 Lịch sử phát triển Trong năm 1970, S.A Cook chứng minh kết lý thuyết giúp suy tồn thuật toán để giải toán so khớp mẫu có thời gian tỷ lệ với (M+N) trường hợp xấu D.E.Knuth V.R.Pratt kiên trì theo đuổi kiến trúc mà Cook dùng để chứng minh cho định lý ông nhận thuật toán tương đối đơn giản Đồng thời J.H.Morris khám phá thuật toán Knuth, Morris, Pratt không giới thiệu thuật họ năm 1976, thời gian R.S.Boyer J.S.Moore khám phá thuật toán nhanh nhiều Tháng – 1975, Alfred V Aho Margret J Corasick giới thiệu thuật toán so khớp chuỗi đa mẫu Aho Corasick tài liệu “Communications of the ACM 18” Năm 1980, Nigel Horspool giới thiệu thuật toán so khớp chuỗi tương tự thuật toán KMP, đảo ngược thứ tự so sánh tài liệu Software Practice & Experience, 10(6):501-506 Tháng - 1987, R.M.Karp M.O.Rabin giới thiệu thuật toán đơn giản gần thuật toán Brute Force có thời gian thực thi tỉ lệ với m+n tài liệu IBM J Res develop – vol 31 no.2 - 10 - 1.3 Các cách tiếp cận Có cách tiếp cận thuật toán so khớp chuỗi:  Thuật toán cổ điển: thuật toán chủ yếu dựa vào so sánh ký tự Các thuật toán điển hình bao gồm Brute Force, Naïve,…  Thuật toán máy tự động hậu tố: thuật toán sử dụng cấu trúc liệu hậu tố tự động để nhận tất hậu tố mẫu Các thuật toán điển hình bao gồm Knuth – Morris – Pratt, Boyer – Moore, Horspool,…  Thuật toán bit song song: thuật toán khai thác chất song song liệu bit để thực thao tác lúc Các thuật toán điển hình bao gồm Shift – Or, …  Thuật toán băm: thuật toán sử dụng kỹ thuật băm, tránh việc so sánh ký tự có độ phức tạp bậc Các thuật toán điển hình bao gồm Karp – Rabin Độ phức tạp tính toán: Trên thực tế có nhiều loại ký tự khác như: binary, DNA, Alphabet, numeric… loại ký tự có độ phức tạp khác Độ phức tạp tính toán tỉ lệ thuận với chiều dài mẫu, chiều dài vănbản độ lớn tập ký tự Các thuật toán so khớp chuỗi thường thực theo bước xử lý sau:  Bước tiền xử lý: bao gồm xử lý mẫu Khởi tạo cấu trúc liệu  Bước so khớp: thực việc so khớp mẫu văn 1.4 Ứng dụng so khớp chuỗi So khớp chuỗi toán ngành Tin học So khớp chuỗi sử dụng rộng rãi nhiều ứng dụng lĩnh vực khác như: - 54 - thuật toán trực tuyến nhanh chúng cần phải điều khiển lượng văn lớn nên thuật toán trực tuyến thực cách hiệu Tìm kiếm mục thực dựa tìm kiếm on-line Để giảm dư thừa lưu trữ truyền liệu, giải pháp sử dụng nén liệu Quá trình nén làm cho tệp chiếm không gian lưu trữ hơn, giảm thời gian chi phí truyền thông lại làm phần lớn cấu trúc liệu, dẫn đến khó khăn việc tìm kiếm trích rút thông tin Cách đơn giản song tốn thời gian (và khó khả thi với văn lớn) giải nén toàn tiến hành tìm kiếm thuật toán so mẫu kinh điển Hiện nay, có nhiều giải pháp tốt theo hai hướng là: so mẫu nén so mẫu miền nén So mẫu nén thực nén mẫu trước đem tìm kiếm văn nén, so mẫu miền nén sử dụng giải pháp nén phần văn Nén liệu text thực chất trình mã hoá, chuyển thông báo nguồn (trong bảng chữ nguồn A) thành mã (trong chữ mã B) ngược lại trình giải mã Vì thuật toán tìm kiếm văn nén áp dụng văn mã hoá dạng khối ký tự Tuy nhiên, yêu cầu bảo mật, văn mã hoá, cần có giải thuật tìm kiếm đảm bảo không bị rò rỉ thông tin trình tìm kiếm 3.1.2 Tìm kiếm thông tin 3.1.2.1 Giới thiệu Mục đích tìm kiếm trả lại cho người dùng tập thông tin thỏa mãn nhu cầu họ Ta định nghĩa thông tin cần thiết câu truy vấn thông tin chọn tài liệu Mỗi cách tiếp cận tìm kiếm thông tin bao gồm thành phần chính: kỹ thuật để biểu diễn thông tin (câu truy vấn, tài liệu) hai phương pháp so sánh cách biểu diễn Mục đích để thực tự động qui trình kiểm tra tài liệu cách tính toán độ tương quan câu truy vấn tài liệu Qui trình tự động thành công trả kết giống với kết người tạo so sánh câu truy vấn với tài liệu - 55 - Hình 3.1 Mô hình biểu diễn so sánh thông tin Gọi miền xác định hàm biểu diễn câu truy vấn q Q, tập hợp câu truy vấn có; miền giá trị R, không gian thống biểu diễn thông tin Gọi miền xác định hàm biểu diễn tài liệu d D, tập hợp tài liệu; miền giá trị R Miền xác định hàm so sánh c R × R miền giá trị [0,1], tập số thực từ đến Trong 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ý người dùng mối quan hệ thông tin câu truy vấn thông tin tài liệu Có nhiều cách đo lường khác cho việc đánh giá mức độ xử lý trả kết hệ thống tìm kiếm thông tin Các cách đo lường đòi hỏi tập tài liệu câu truy vấn tập tài liệu đó, giả sử tài liệu liên quan không liên quan đến câu truy vấn Độ xác (Precision): đo tỉ lệ tài liệu trả xác tổng tài liệu nhận được: Độ bao phủ (Recall): đo tỉ lệ tài liệu trả xác tổng tài liệu có liên quan: - 56 - Kết sai (Fall-out): đo tỉ lệ tài liệu liên quan tả tổng 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: mô hình mà xem câu truy vấn biểu thức logic mục từ, gồm mục từ kết hợp với toán tử logic (AND, OR, NOT) Mô hình xem tài liệu tập hợp mục từ Mỗi mục từ chứa danh sách tài liệu có chứa nó, danh sách gọi posting, việc so khớp duyệt qua danh sách posting để kiểm tra 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 trả giá trị chân lý có tài liệu tìm kiếm, kết trả thứ hạng Điều dẫn đến kết tìm kiếm không mong muốn 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 trả về, dựa trọng số mục từ tài liệu Tần suất xuất mục từ t tài liệu d ký hiệu tft,d Tần suất nghịch đảo tài liệu d tập N tài liệu ký hiệu idft = log(N / dft), trọng số mục từ t tài liệu d tf-idf = tft,d x idft, điểm số tài liệu d tổng điểm mục từ câu truy vấn có mặt d: Ví dụ với 1000 tài liệu có 100 tài liệu chứa mục từ “tin” 150 tài liệu chứa mục từ “học”, giả sử tài liệu thứ d có lần xuất mục từ “tin” lần xuất mục từ “học”, điểm số câu truy vấn q=”tin học” tài liệu d là: Score(q,d) = tftin,d - idftin + tfhọc,d - idfhọc = tftin,d × log (N/dftin) + tfhọc,d × log(N/dfhọc) - 57 = × log (1000/100) + × log (1000/150) ~ 6.23 Mô hình không gian vec-tơ: Mô hình so khớp phương pháp tính điểm số chưa xét vai trò mục từ câu truy vấn Ví dụ hai tài liệu chứa câu “Mary is quicker than John” “John is quicker than Mary”, số lượng mục từ vai trò khác hoàn toàn Để giải vấn đề người ta đưa mô hình không gian vec-tơ, mô hình biểu diễn tài liệu d vec-tơ tần suất mục từ V(d) Với hai tài liệu có mục từ giống nhau, biểu diễn vec-tơ chúng lại khác nhau, tính mức tương quan hai tài liệu: Đối với truy vấn q xem vec-tơ V(q) biểu diễn tần suất mục từ truy vấn Mức độ tương quan hai vector tính theo hàm cosin góc chúng: Hình 3.2 Mô hình không gian vec tơ Ví dụ, với truy vấn best car insurance tập liệu với N=1.000.000 tài liệu với tần số xuất mục từ auto, best, car, insurance 5.000, 50.000, 10.000, 1.000 Chúng ta có bảng tính điểm số sau: - 58 Bảng 3.1 Tính điểm số Như vậy, điểm số Score (q,d) = + + 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 – nhân viên Excite, Yahoo, làm việc 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 thành thư viện tìm kiếm tài liệu hoàn chỉnh, cho phép nhà phát triển ứng dụng dễ dàng tích hợp chức tìm kiếm vào hệ thống [10] Lucene thư viện tìm kiếm thông tin có khả xử lý khả mở rộng mức cao, cho phép tích hợp vào ứng dụng Lucene dự án mã nguồn mở nguyên thuỷ phát triển ngôn ngữ Java, ngày Lucene phát triển nhiều ngôn ngữ khác Delphi, Perl, C#, C++, Python, Ruby PHP… Thư viện cung cấp hàm hỗ trợ cho việc đánh mục tìm kiếm Để sử dụng Lucene, cần phải có sẵn liệu Dữ liệu tập hợp tập tin dạng PDF, Word trang web HTML; liệu lưu hệ quản trị CSDL MS SQL Server hay MySQL Dùng Lucene, tiến hành đánh mục liệu có để sau thực thao tác tìm kiếm toàn văn liệu - 59 - Hình 3.3 Mô hình đánh mục Lucene Thành phần Tạo mục: bao gồm phần chức xử lý tạo mục, từ văn đầu vào kết tập mục Lucene hỗ trợ văn sau tách nội dung dạng ký tự thuần, cho phép lập mục trường thông tin văn cho phép thiết lập hệ số cho 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ữ nhớ nhớ RAM trình tạo mục  Document Field: định nghĩa tài liệu trường thông tin tài liệu sử dụng cho lập mục, sử dụng cho việc lấy kết trả cho thành phần Tìm kiếm  Analyzer: thực chức xử lý tách vă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 mục  IndexWriter: phần thành phần Tạo mục, thực việc tạo mở mục, sau thực thêm cập nhật nội dung mục - 60 3.2.2 Các bước sử dụng Lucene Mô tả đối tượng cần đánh mục: Lucene coi đối tượng cần đánh mục Document Mỗi Document có nhiều Field, Field tương ứng thuộc tính đối tượng cần đánh mục Ví dụ, muốn tìm kiếm trang web dạng HTML Như đối tượng cần đánh mục trang HTML; thuộc tính nơi lưu trữ (host), đường dẫn, tiêu đề, metadata nội dung trang web Với Field, bạn chọn đánh mục hay không đánh mục Nếu chọn đánh mục, bạn tìm kiếm Field Các Field không đánh mục thường Field không quan trọng trình tìm kiếm phục vụ chủ yếu cho nhu cầu trình bày kết trả Đánh mục: Thực xây dựng hàm công cụ để chuyển đổi liệu ban đầu thành liệu mô tả Document Ví dụ, liệu ban đầu tập tin PDF hay Word, phải có hàm để đọc hiểu định dạng chuyển dạng chuỗi văn tương ứng Thao tác đánh mục phức tạp Trước hết liệu văn phân tích thành từ khóa, đồng thời loại bỏ từ không dùng đến (stop words, tiếng Anh từ a, an, the stop words), sau từ khóa dùng để tạo inverted index (chỉ mục nghịch đảo) lưu thành phân đoạn dạng thuận tiện cho việc tìm kiếm sau Chỉ mục nghịch đảo dùng để cách lưu trữ danh sách tài liệu mà có chứa từ cho trước Gọi nghịch đảo thông thường, với tài liệu cho trước, người ta lưu trữ danh sách từ có tài liệu Ví dụ, với từ khóa Lucene, ta lưu trữ danh sách trang web A, B, C có chứa từ khóa Sau người dùng gõ vào từ khóa Lucene, danh sách giúp định vị nhanh chóng trang web có chứa Nếu dùng mục thông thường, phải quét qua hết trang - 61 - web có sở liệu tìm Cách tốn thời gian số lượng liệu lớn Tìm kiếm: Sau liệu đánh mục, thực tìm kiếm chúng Tìm kiếm toàn vẹn cho phép bạn tìm kiếm theo danh sách từ khóa với toán tử luận lí Lucene ứng dụng hay máy tìm kiếm hoàn chỉnh để người dùng sử dụng ngay, thư viện, cung cấp thành phần quan trọng máy tìm kiếm tạo mục truy vấn Chính cung cấp thành phần quan trọng việc tạo mục nên người dùng linh hoạt việc ứng dụng vào sản phẩm mình, có số cải tiến cho phù hợp 3.3 Ứng dụng tìm kiếm thông tin văn Ứng dụng bao gồm hai thành phần: Thành phần tạo mục: Bao gồm chức định liệu để lập mục, thực phân tích tài liệu, tạo mục lưu trữ xuống tập mục, cập nhập mục trường hợp bổ sung hay thay đổi nội dung mục Thành phần tìm kiếm: Áp dụng thuật toán KMP để thực tìm kiếm, hiển thị danh sách kết có liên kết đến tài liệu gốc Hình 3.4 Mô hình ứng dụng tìm kiếm thông tin văn - 62 - 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 xây dựng công cụ Microsoft Visual Studio 2010, tảng Net Framework 4.0 Sử dụng thư viện mã nguồn mở Lucene để thực đọc, phân tích lập mục tài liệu lưu trữ  Thuật toán sử dụng: Sử dụng thuật toán KMP để thực 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 phân tích file Microsoft Office trích xuất văn từ file IFilter thư viện có sẵn window (từ window 2000 trở lên) Hàm thực đọc, phân tích lập mục cho file văn public static string Parse(string filename) { IFilter filter = null; try { StringBuilder plainTextResult = new StringBuilder(); filter = loadIFilter(filename); 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; - 63 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 > && 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); } - 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) - 64 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) ? : 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; ) { 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; } - 65 else { i += count - x[j]; // move forward steps = matched count - table value break; } } } return -999; // not found } 3.4.3 Kết thực nghiệm 3.4.3.1 Giao diện chương trình Hình 3.5 Giao diện chương trình  Lựa chọn thư mục có chứa file (doc, xls, ppt, html, txt) cần tìm kiếm  Nhất nút “Tải liệu” để thực việc lập mục cho file văn thư mục  Nhập từ khóa cần tìm kiếm văn  Chương trình thực đọc nội dung file văn có thư mục Sau thực so khớp từ khóa cần tìm nội dung văn (Tìm kiếm toàn văn) theo thuật toán KMP  Chương trình đưa danh sách file mà nội dung có chứa từ khóa tìm kiếm Khi chọn vào file kết chương trình thực mở file lên để xem nội dung - 66 - 3.4.3.2 Kết thử nghiệm chương trình tìm kiếm với từ khóa “Văn bản” Hình 3.6 Kết tìm kiếm chương trình 3.5 Kết luận chương Chương trình bày toán tìm kiếm mẫu, tìm kiếm thông tin vă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 ngôn ngữ lập trình C# hệ điều hành Window tiến hành chạy thử nghiệm chương trình với số cụm từ khóa tìm kiếm file văn lưu trữ - 67 - KẾT LUẬN Đánh giá kết đề tài: Trong trình nghiên cứu thực hiện, luận văn đạt kết sau:  Giới thiệu số khái niệm so khớp chuỗi, hướng tiếp cận, dạng so khớp số thuật toán so mẫu  Trình bày thuật toán KMP, thuật toán KMP mờ thuật toán KMP-BM mờ  Cài đặt thuật toán KMP ngôn ngữ lập trình C# chạy hệ điều hành Window sau thử nghiệm tìm kiếm với số cụm từ khóa file văn lưu trữ Hạn chế:  Chương trình thử nghiệm đơn giản Chương trình thực thuật toán tìm kiếm số định dạng bản: doc, ppt, xls, html, txt Chưa hỗ trợ tìm kiếm số định dạng: pdf, docx, xlsx, ppts  Chương trình dừng lại tìm kiếm máy cục bộ, chưa hỗ trợ tìm kiếm thông qua mạng LAN Internet Hướng phát triển tương lai: Với kết đạt được, tác giả đề xuất số công việc thời gian tới sau:  Tiếp tục xử lý vấn đề tồn chương trình thử nghiệm cài đặt như: Vấn đề liệu vào, xây dựng giao diện chương trình thân thiện dễ sử dụng  Tiếp tục nghiên cứu để ứng dụng, phát triển chương trình hỗ trợ tìm kiếm qua mạng Lan tìm kiếm Internet thông qua Website - 68 - TÀI LIỆU THAM KHẢO Tiếng Việt [1] Đặng Huy Ruận (2011), Lý thuyết thuật toán, NXB Đại học Quốc gia Hà Nội [2] Robert Sedgewick (1994), Cẩm nang thuật toán, Tập 1: Các thuật toán thông dụng, NXB Khoa học Kỹ thuật [3] Nguyễn Hữu Điển (2006), Một số vấn đề thuật toán, NXB Giáo dục [4] Vũ Thành Nam, Phan Trung Huy, Nguyễn Thị Thanh Huyền (2005), “Mã tích đàn hồi tìm kiếm văn mã hoá sử dụng thuật toán so mẫu theo tiếp cận mờ”, Báo cáo khoa học Hội nghị Ứng dụng toán học toàn quốc lần 2, Hà Nội, 12/2005 [5] Phan Thị Tươi (1986), Trình biên dịch 1986 (Chương : Bộ phân tích từ vựng), Nhà xuất Giáo dục Tiếng Anh [6] Thomas H Cormen (2009), Introduction to Algorithms, MIT Press [7] Christian Charras, Thierry Lecroq (2000), Handbook of Exact Stringmatching Algorithms [8] Donald Knuth, James H Morris, Jr, Vaughan Pratt (1977), “Fast pattern matching in strings”, Siam J.Comput, Vol 6, No 2, Nune 1977 [9] Aho A.V.(1992), Algorithms for finding patterns in strings, Chapter of Jan Van Leeuwen (ed.), Handbook of Theoretical Computer Science "Algorithms and Complexity", The MIT Press, pp 255-300 [10] Erik Hatcher, Michael McCandless (2008), Otis Gospodnetic: “Lucene in Committee Action”, Apache Jakarta Project Management [...]... cỏc thut toỏn tỡm kim chui hin cú Nhng chỳng ó i din cho a s cỏc t tng dựng gii bi toỏn tỡm kim chui Cỏc thut toỏn so sỏnh mu ln lt t trỏi sang phi thng l cỏc dng ci tin (v ci lựi) ca thut toỏn Knuth- Morris- Pratt v thut toỏn s dng Automat nh: Forward Dawg Matching, Apostolico-Crochemore, Not So Naive, Cỏc thut toỏn so sỏnh mu t phi sang trỏi u l cỏc dng ca thut toỏn Boyer-Moore Thut toỏn BM l thut... (2b): Vi mi i, 1 i m, d2i c xỏc nh l: d2i = ming + m - i| g 1 v (g i hoc Pi-g Pi) v ((g k hoc Pk-g = Pk) vi i k m) Cú nhiu cỏch tớnh toỏn bng d2 c a ra Thut toỏn di õy tớnh bng dch chuyn d2 l ca Knuth, cú s sa i ca Mehlhorn Thut toỏn s dng hm f cú tớnh cht f[m] = m+1 v vi 1 j < m, fj = mini j < i < m v Pi+1Pi+2 Pm = Pj+1Pj+2 Pm+j-i Thut tớnh bng dch chuyn d2 procedure computed 2(); begin for ... toỏn Knuth- MorrisPratt i tng v phm vi nghiờn cu Cỏc khỏi nim so khp chui Cỏc khỏi nim thut toỏn so khp chui KMP Mt s ng dng thut toỏn KMP Hng nghiờn cu ca ti Nghiờn cu tỡm kim KnuthMorrisPratt... nht D.E .Knuth v V.R .Pratt ó kiờn trỡ theo ui kin trỳc m Cook ó dựng chng minh cho nh lý ca ụng v nhn c mt thut toỏn tng i n gin ng thi J.H .Morris cng khỏm phỏ thut toỏn ny Knuth, Morris, Pratt. .. hn HTML HyperText Markup Language IDF Inverse document frequency - Tn sut ti liu ngc KMP KNUTH- MORRIS- PRATT LAN Local area network NFA Nondeterministic Finite Automata - ễtụmỏt hu hn khụng n

Ngày đăng: 13/12/2016, 12:52

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan