Đối với các phần mềm trớc đây thờng thiên hớng cho việc lậptrình ứng dụng cho một số ngời, thì ngày nay xu thế phát triển của nghànhcông nghệ phần mềm là phải làm sao tạo ra đợc các sản
Trang 1tìm kiếm file trên windows ứng dụng
thuật toán đối sánh mẫu
Đồ án Tốt nghiệp đại học
Ngành kỹ s công nghệ thông tin
Trang 2
to¸n 233.2.2 ThiÕt kÕ vµ x©y dùng c¸c form cña ch¬ng tr×nh
îc 44
KÕt
luËn 45Tµi liÖu tham
kh¶o 46
Trang 3
Lời cảm ơn
Đầu tiên em xin chân thành cảm ơn các Thầy Cô Khoa Công NghệThông Tin đã hớng dẫn và giảng dạy rất nhiệt tình trong suốt năm năm học ởTrờng Đại Học Vinh Những kiến thức mà chúng em học đợc trên giảng đờng
sẽ là hành trang quý báu trên bớc đờng đời sau này
Để tìm hiểu, xây dựng và hoàn thành đợc đồ án này em xin cảm ơn tới
thầy giáo Thạc sỹ Trần Văn Cảnh - Giảng viên khoa CNTT Trờng Đại Học
Vinh đã tận tình hớng dẫn và giúp đỡ em trong quá trình thực hiện
Em cũng xin bày tỏ lòng biết ơn tới gia đình và bạn bè đã tạo điều kiện,giúp đỡ cho em trong suốt thời gian học tập, nghiên cứu để có đợc nhữngthành quả nh ngày hôm nay Với kiến thức còn phần nào hạn chế của mình, hivọng sẽ nhận đợc những ý kiến đóng góp quý báu từ thầy cô, gia đình và bạn
bè để em ngày một tiến bộ hơn
Vinh, 05/2009 Sinh viên thực hiện
Hoàng Đức Toàn
Trang 4
LờI NóI ĐầU
Công nghệ thông tin đang phát triển không ngừng, chúng ta đang sốngtrong một thế giới mà ở đó máy vi tính, mạng internet và các thiết bị kỹ thuật
số luôn hiện hữu ở tất cả mọi góc độ, lĩnh vực của cuộc sống hiện đại Một nhucầu thực tế trong xu thế hội nhập ngày nay đang đòi hỏi là trao đổi thông tin,kết nối thông tin, tìm kiếm các thông tin một cách nhanh nhất, chính xác nhất
và đáng tin cậy nhât Và dĩ nhiên các phần mềm đợc lập ra nhằm thực hiệncông việc đó Đối với các phần mềm trớc đây thờng thiên hớng cho việc lậptrình ứng dụng cho một số ngời, thì ngày nay xu thế phát triển của nghànhcông nghệ phần mềm là phải làm sao tạo ra đợc các sản phẩm có thể ứng dụngcho nhiều ngời để tìm kiếm thông tin một cách chính xác và nhanh nhất
Nắm bắt đợc xu thế đó, hàng loạt các ngôn ngữ lập trình ra đời và ngàycàng hoàn thiện Trong đó phải kể đến hai ngôn ngữ lập trình NET và JAVA
đang là sự lựa chọn hàng đầu của các lập trình viên Đây là hai công cụ để lậptrình nó phụ thuộc vào kiến thức và sở thích của từng ngời mà ứng dụng Điềuquan trọng ở đây em tìm hiểu nghiên cứu C# (Thuộc Visual Studio NET2005) để có thể triển khai các ứng dụng trên Windows Những phần mềm đợcviết dựa trên nền tảng C# sẽ có đợc khả năng thao tác, tích hợp về ứng dụngtốt
Đối với một ngôn ngữ lập trình thì khả năng áp dụng tạo ra những phầnmềm có tính ứng dụng cao là rất lớn, song với khuôn khổ và mục đích nghiên
cứu công nghệ, trong đồ án này em chỉ triển khai xây dựng ứng dụng Tìm“ Tìm
kiếm file trên windows ứng dụng thuật toán đối sánh mẫu“ Tìm để thể hiện khả
năng hớng đối tợng, lập trình trực quan của C# Khi đã hiểu rõ bản chất và tính
u việt của C# thì khả năng phát triển các ứng dụng của nó trong các bài toánlớn sẽ đạt đợc những thành công
Chơng 1 Giới thiệu
1.1 Bài toán tìm kiếm file trên windows
Dữ liệu trong máy tính đợc lu trữ dới rất nhiều dạng khác nhau, nhng sửdụng chuỗi vẫn là một trong những cách rất phổ biến Trên chuỗi các đơn vị dữliệu không có ý nghĩa quan trọng bằng cách sắp xếp của chúng Nhiều lúc ngời
sử dụng không để ý tới việc lu trữ các file dữ liệu thế nào mà hay lu trữ một
Trang 5ký tự đợc dùng gọi là bảng chữ cái khác, có số lợng là d.
Đối sánh mẫu là bài toán tìm sự xuất hiện của một mẫu với một số đặc
tính nào đó trong chuỗi các ký hiệu cho trớc Khái niệm “ Tìmchuỗ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, Dạng đơn giản nhất của bài toán đối sánh mẫu 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) Tìm độ lớndãy con chung dài nhất giữa hai xâu ký tự, tìm chuỗi con chung dài nhất giữahai xâu ký tự, đánh giá độ tơng tự tựa ngữ nghĩa giữa hai câu văn
Các phơng pháp đối sánh
• Dựa trên đặc tính mẫu: Tìm kiếm đơn mẫu, tìm kiếm đa mẫu
• Dựa trên kết quả trả về: Tìm kiếm chính xác, tìm kiếm xấp xỉ Độ tơng tự giữa hai xâu văn bản
Một cách tơng đối có thể hiểu độ tơng tự là mức độ giống nhau giữa haixâu kí tự (Xét theo quan điểm thống kê mức độ giống nhau giữa hai xâu sẽphản ánh mức độ tơng tự về ngữ nghĩa)
Một phơng thức trong phép đối sánh mẫu là tìm kiếm xấp xỉ (approximatesearch) hay tìm kiếm mờ (fuzzy search) So mẫu xấp xỉ cho phép tìm kiếmnhững thông tin “ Tìmgần giống” Hớng tiếp cận này trong bài toán tìm kiếm manglại kết quả mềm dẻo hơn, do đó đáp ứng đợc yêu cầu thực tế tốt hơn Vấn đềtìm kiếm xấp xỉ đặt ra trong nhiều ứng dụng khoa học kĩ thuật khác: nhậndạng chữ viết, nhận dạng ảnh, đồ thị, so sánh xấp xỉ trong các xâu có độ dàikhông cố định, và đặc biệt phổ biến trong các hệ thống trích rút văn bản Tìmkiếm xấp xỉ là tìm sự xuất hiện của mẫu trong văn bản, trong đó cả văn bản vàmẫu đều có thể có “ Tìmlỗi” Đây là các “ Tìmlỗi” có thể nhận ra bằng mắt thờng,không xét về khía cạnh ngữ nghĩa (OCRoptical character recognition errors),
do một số kí tự nhất định bị chèn thêm hoặc bị xóa hoặc bị thay thế, chẳng hạn
“ TìmViệt Nam” và “ TìmViệt Nan” hay “ TìmViệtt Nan”, Những lỗi này do nhiều nguyênnhân khác nhau, có thể kể ra nh:
Trang 6
- 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ănbản
- Lỗi in ấn, lỗi chính tả, sử dụng dấu chấm câu sai,
- Do sự biến đổi hình thái từ trong một số ngôn ngữ
- Dữ liệu đa vào cơ sở dữ liệu không chính xác, thờng xảy ra với tên ngời,
địa chỉ,
- Thông tin ngời tìm đa vào không chính xác, chỉ “ Tìmđại loại”
Có nhiều mô hình lỗi đợc đa ra, nhng phổ biến nhất và là cơ sở cho rấtnhiều mô hình lỗi khác là chuỗi con (hay xâu con) chung dài nhất, dãy conchung dài nhất Độ đo “ Tìmlỗi” này phản ánh độ tơng tự giữa hai xâu, làm cơ sở
để cài đặt tính năng tìm kiếm xấp xỉ trong cơ sở dữ liệu và trong các hệ thống
tìm kiếm file trong Windows Vì vậy bài toán đợc giải quyết ở đây là: Cho xâu
nguồn (hay xâu mẫu) P độ dài m (P1P2 ….Pm) và xâu đích S độ dài n (S1S2… Pm) và xâu đích S độ dài n (S1S2 ….Pm) và xâu đích S độ dài n (S1S2… Sn) trên cùng bảng chữ A Tính độ lớn dãy con chung dài nhất, tìm chuỗi con chung dài nhất giữa hai xâu P và S, xác định độ tơng tự giữa hai xâu P và S
Độ tựa ngữ nghĩa ở đây đợc hiểu là giá trị thực nằm trong khoảng [0,1]thoả mãn:
- Độ tựa ngữ nghĩa càng lớn nếu số chuỗi con của P xuất hiện trong Scàng nhiều
- Độ tựa ngữ nghĩa bằng 1 nếu xâu P xuất hiện trong S
- Độ tựa ngữ nghĩa bằng 0 nếu không có một phần nào đó của P xuất hiệntrong S
Lu ý rằng, trờng hợp S là một dòng dữ liệu văn bản (trong các máy tìmkiếm file của hệ thống, tìm kiếm web, ), xâu mẫu P thờng ngắn 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 tách
đoạn dòng dữ liệu S và so sánh từng đoạn với P (chẳng hạn, việc ngắt câu cóthể xem là một cách tách đoạn) Khi đó độ tơng tự sẽ đợc tổng hợp từ các kếtquả so sánh P và các khúc của S
Để giải bài toán xác định độ tơng tự giữa hai xâu, ở đây sẽ sử dụng hai độ
đo Một là độ tơng tự dựa vào độ dài chuỗi con chung dài nhất Mặc dù đây làmô hình lỗi kinh điển song với cách tiếp cận otomat mờ sẽ đem lại một thuậttoán nhanh, đặc biệt hiệu quả khi cần so mẫu P với rất nhiều xâu S Hai là “ Tìmđộgần tựa ngữ nghĩa” dựa trên sự thống kê mật độ xuất hiện các chuỗi con của Ptrong S Độ đo này sẽ phản ánh đợc độ tơng tự về ngữ nghĩa giữa hai xâu
1.2 Một số công cụ tìm kiếm
Trang 7
Hiện nay trên mạng Internet có rất nhiều công cụ tìm kiếm hữu ích chongời sử dụng Bao gồm các công cụ tìm kiếm đa chức năng và các công cụ tìmkiếm theo từng lĩnh vực riêng biệt Các công cụ đó cho phép ngời dùng có thểtìm kiếm một cụm từ, đề tài, bài viết, các file, các trang web, hay dữ liệu Cụthể: Google.com, Socbay.com, Xalo.com, Yahoo.com, Nhacso.net, …
Trang 8
Hình 1.3 Tìm kiếm search của Windows
1.3 Đánh giá các công cụ tìm kiếm
Công cụ tìm kiếm Search của hệ điều hành windows XP cho phép tìm kiếm các từ khoá trong một file, một th mục hay trong tất cả các ổ đĩa của máytính
Một số kiểu lu trữ tên tập tin trong Windows ngời sử dụng hay dùng:daihocvinh; dai hoc vinh; dhvinh; …
Với cách đặt tên nh vậy thì rất khó để có thể tìm kiếm đợc kết quả chophần mềm Tìm Kiếm Search của hệ điều hành windows XP
Đặc biệt với file: dai hoc vinh.txt mà ngời quản lý lại nghĩ rằng file là :
”daihocvinh” thì với phần mềm search của windows không thể nào tìm thấy
Trang 9
Hình 1.4 Tìm với windowsTồn tại một số vấn đề nữa về các công cụ tìm kiếm hiện nay: ví dụ vềcông cụ tìm kiếm của trang web ‘http://nhacso.net’
Trang 10
Hình 1.5 Tìm kiếm trên nhacso.net
Khi thực hiện tìm kiếm trên trang web này do ngữ nghĩa câu văn của tiếngViệt khác so với tiếng Anh nên kết quả tìm kiếm là khác nhau cho những cáchtrình bày khác nhau
Công cụ tìm kiếm Find của phần mềm Microsoft Word: công cụ này chỉcho phép tìm kiếm cụm từ nội bên trong một văn bản
Công cụ tìm kiếm Google hỗ trợ tìm kiếm theo chỉ mục Nhng khi ta tìmkiếm với một từ khoá thì nó liệt kê ra tất cả các trang có nội dung không đúngnghĩa với ý nghĩa từ khoá cần tìm
Trang 11Nắm bắt đợc các yêu cầu đó thì phần mềm Tìm kiếm file trên“ Tìm
Windows ứng dụng thuật toán đối sánh mẫu“ Tìm đợc xây dựng
Trang 12
Phần mềm này xây dựng cho phép tìm kiếm theo độ xấp xỉ khác nhau do
đó kết quả tìm đợc khác nhau Ngoài ra nó có thể cho phép tìm kiếm chính xáccác từ khoá khi ngời sử dụng nhập vào
- Chức năng thực thi chơng trình ngay trên kết quả tìm kiếm
Chơng 2 Các thuật toán trong chơng trình
2.1 Thuật toán tính độ lớn dãy con chung dài nhất
Bài toán :
Cho xâu mẫu P độ dài m, P=P1P2…Pm và xâu S độ dài n, S=S1S2…Sn trêncùng một bảng chữ A Tính độ lớn dãy con dài nhất của P và S Độ lớn nhấtdãy con chung của P, S ký hiệu là Ld (P,S)
Có thể hiểu đơn giản là bài toán tìm số lợng lớn nhất các kí tự chung giữa
2 xâu mà đảm bảo thứ tự xuất hiện
Thuật toán
Procedure Ld(string s, string p)
Var i, j, ketqua, m, n : integer;
Begin
Ketqua := 0;
m = length(p);
Trang 13Else if tồn tại j < k # m thỏa mãn M[k] = 1 Begin
Hình 2.1 Thuật toán tính độ lớn dãy con chung dài nhất
Ví dụ: Với 2 xâu “ Tìmdaihocvinh” và “ Tìmdai hoc vinh”
Chơng trình sẽ thực hiện thuật toán một để tìm độ lớn xâu con chung dàinhất, kết quả sẽ là:
Hình 2.2 Mô phỏng thuật toán tìm độ lớn xâu con chung dài nhất
2.2 Thuật toán tìm kiếm dãy con chung dài nhất giữa hai xâu ký tự
Bài toán:
Trang 14
Cho xâu mẫu P độ dài m: P = P1 Pm; và xâu S độ dài n: S = S1 Sn trêncùng bảng chữ A Tìm khúc con chung lớn nhất của P và S Khúc con chungdài nhất của P, S đợc kí hiệu là Lk(S, P)
Ví dụ: với P = “ Tìmkhoa tin truong dai hoc VINH”
S = “ TìmĐai hoc Vinh”
Nếu bỏ qua các kí tự viết hoa, nói cách khác là không phân biệt chữ hoachữ thờng thì Lk(P, S) = “ Tìmdai hoc vinh”
Trang 15
Ví dụ: Với 2 xâu “ Tìmdaihocvinh” và “ Tìmdai hoc vinh”
Chơng trình sẽ thực hiện thuật toán hai để tìm xâu con chung dài nhất, kếtquả sẽ là:
Hình 2.4 Mô phỏng thuật toán tìm kiếm xâu con chung dài nhất
Trang 16
2.3 Thuật toán đánh giá độ tơng tự ngữ nghĩa giữa hai câu văn
Xét ví dụ sau:
Câu 1: Ngày hôm nay cơn bão số 5 đã mạnh lên cấp 8
Câu 2: Cơn bão số 5 đổ bộ vào Quảng Trị, dự báo cơn bão sẽ tiếp tụcmạnh lên
Câu 3: Sức gió của cơn bão số 5 đã mạnh tới cấp 8
Câu 4: Cơn bão số 5 đổ bộ vào Quảng Trị, sức gió đã mạnh lên cấp 8.Một cách tơng đối có thể thấy theo khía cạnh tựa ngữ nghĩa câu 3 gầnnghĩa với câu 1 hơn câu 2 và câu 4 gần tựa ngữ nghĩa với câu 1 hơn câu 2,câu 3
Có thể xây dựng một hàm f(c1, c2) để đánh giá mức độ tựa ngữ nghĩagiữa hai câu trong tiếng Việt Nh trong ví dụ trên thì
f(c1,c2) < f(c1,c3) < f(c1,c4)
Thử nghiệm:
L1 1 + L1(L1-1)f(c1, c2) = —— x ———————
Lc(1,2) DLC + 1 + L1(l1-1)
Trong đó L1: số từ câu 1
Lc(1, 2): độ dài dãy từ chung giữa 2 câu
DLC : là tổng độ lệch giữa các từ chung của 2 câu
Trang 18Theo ví dụ trên thì mức độ gần (theo ngữ nghĩa trong thực tế) giữa (câu
2, câu 1) nhỏ hơn (câu 3, câu 1) khi áp dụng thuật toán trên đợc:
f(câu 1, câu 2) = 0,44039 < 0,55765 = f(câu 1, câu 3) Tơng tự mức độgần giữa (câu 3 , câu 1) cũng nhỏ hơn (câu 4, câu 1) cũng có mức độ gần nhỏhơn (câu 4, câu 1) khi áp dụng ta cũng thu đợc f(câu 1, câu 3) = 0,55765 <0,62343 = f(câu 1, câu 4)
Ví dụ: Với 2 xâu “ Tìmdaihocvinh” và “ Tìmdai hoc vinh”
Chơng trình sẽ thực hiện thuật toán ba để để tính độ tơng tự giữa hai xâu,kết quả sẽ là:
Hình 2.6 Mô phỏng thuật toán độ xấp xỉ cuả hai xâu
Chơng 3 Cài đặt3.1 Lựa chọn ngôn ngữ
Trang 19
Hiện nay có rất nhiều ngôn ngữ lập trình có thể giúp ngời phát triển phầnmềm tạo ra các ứng dụng của mình một cách tốt nhất Đặc biệt là các ngônngữ lập trình bậc cao nó hỗ trợ các công cụ, chức năng và giao diện tốt dễ sửdụng Ngôn ngữ lập trình C# cũng là một trong những nhân tố đó Sở dĩ emchọn C# để thiết kế chơng trình này vì C# là ngôn ngữ có những u điểm đó làngôn ngữ đơn giản, hiện đại, hớng đối tợng, hớng modul Bên cạnh đó nó còn
là ngôn ngữ mạnh mẽ và mềm dẻo, có ít từ khoá và dễ sử dụng ở đây ngônngữ C# sử dụng để khai thác các đối tợng cụ thể, có thể định nghĩa cho từnglớp riêng biệt Trong chơng trình này thì C# đợc dùng để định nghĩa các lớpriêng biệt nh lớp “ TìmTìm Kiếm”, ”Độ xấp xỉ”,
Các thành phần trong C# đều là đối tợng
Tất cả các phơng thức và sự kiện trong C# đợc chứa trong khai báo: cấutrúc (struct) hoặc lớp (class)
Ngôn ngữ C# sử dụng khoảng 80 từ khoá và một số kiểu dữ liệu đợc dựngsẵn
Dựa trên nền tảng của C, C++ và Java
Có những đặc tính : Thu gom bộ nhớ tự động, các kiểu dữ liệu mở rộng,bảo mật mã nguồn …
Tóm lại những nét u điểm của C# có thể đợc tổng hợp nh sau :
- C# là ngôn ngữ đơn giản
C# loại bỏ một vài sự phức tạp của những ngôn ngữ nh Java và C++, baogồm việc loại bỏ những macro, những template, đa kế thừa, và lớp cơ sở ảo.Chúng là nguyên nhân gây nên sự nhầm lẫn hay dẫn đến những vấn đề cho ng-
ời phát triển C++ Nếu chúng ta là ngời học ngôn ngữ này đầu tiên thì chắc chắn
là sẽ không trải qua những thời gian để học nó, nhng khi đó ta sẽ không biết
đ-ợc hiệu quả của ngôn ngữ C# khi loại bỏ những vấn đề trên
Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++ Nếu chúng tathân thiện với C và C++ hoặc thậm chí là Java, chúng ta sẽ thấy C# khá giống
về diện mạo, cú pháp, biểu thức, toán tử, nhng nó đã đợc cải tiến làm cho ngônngữ đơn giản hơn Một vài trong các sự cải tiến là loại bỏ các d thừa, hay làthêm vào những cú pháp thay đổi Ví dụ nh, trong C++ có ba toán tử làm việcvới các thành viên là ::, , và -> Để biết khi nào dùng ba toán tử này cũngphức tạp và dễ nhầm lẫn Trong C#, chúng đợc thay thế với một toán tử duynhất gọi là (dot) Đối với ngời mới học thì điều này và những việc cải tiếnkhác làm bớt nhầm lẫn và đơn giản hơn
Trang 20
- C# là ngôn ngữ hiện đại
Những đặc tính nh là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểudữ liệu mở rộng, và bảo mật mã nguồn là những đặc tính đợc mong đợi trongmột ngôn ngữ hiện đại C# chứa tất cả những đặc tính trên
là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ hoạ, bản tính, hay thậm chínhững trình biên dịch cho các ngôn ngữ khác
- C# là ngôn ngữ ít từ khoá
C# là ngôn ngữ sử dụng chỉ khoảng 80 từ khoá và hơn mời kiểu dữ liệu
đ-ợc xây dựng sẵn Phần lớn các từ khoá đđ-ợc sử dụng để mô tả thông tin Chúng
ta có thể nghĩ rằng một ngôn ngữ có nhiều từ khoá thì sẽ mạnh hơn Điều nàykhông phải sự thật, ít nhất là trong trờng hợp ngôn ngữ C#, chúng ta có thể tìmthấy rằng ngôn ngữ này có thể đợc sử dụng để làm bất cứ nhiệm vụ nào
C# là một trong rất nhiều ngôn ngữ lập trình đợc hỗ trợ bởi .NETFramework (nh C++, Java,VB…) Có thể hiểu đơn giản đây là một trung tâmbiên dịch trong đó tất cả các ngôn ngữ đợc hỗ trợ bởi NET Framework sẽ đợcchuyển đổi ra MSIL (một dạng mã trung gian) rồi từ đấy mới đợc biên dịch tứcthời (Just in time Compiler – JIT Compiler) thành các file thực thi nh exe.Một thành tố quan trong nữa trong kiến trúc NET Framework chính là CLR(.NET Common Language Runtime), khối chức năng cung cấp tất cả các dịch
vụ mà chơng trình cần giao tiếp với phần cứng, với hệ điều hành
Có thể sử dụng Visual Studio 2003, 2005 hoặc 2008 phiên bản ExpressEditions do Microsoft cung cấp hoàn toàn miễn phí
Trang 22
class LopTK
{
public string p, s; //p là xâu mẫu, s xâu đích
public int dp, ds, da; //dp,ds lần lượt là độ dài xâu p,s
public int[] A = new int[10000];
public int[] TTLeft, TTright;
public int[] Danhdau;
public int[] Q;
public int Contro;
bool OK;
public int luuthaydoi;
public LopTK(string pa, string sa)
TTLeft = new int[dp];
TTright = new int[dp];
Q = new int[dp];
Danhdau = new int[dp];
for (int i = 1; i < dp; ++i)