Rất nhiều người không có thời gian để lọc ra trong một tệp các cuốn sách được thông tin mình mong muốn. Thậm chí trong một cuốn sách dầy tới nghìn trang. Mục lục ở mỗi cuốn sách cũng là các tóm tắt ý, các chủ đề viết về cho cuốn sách. Người dùng có thể tìm trong các mục lục đó, cũng có thể tìm theo từ khóa (ứng với mỗi tài liệu, chúng được tìm theo từ khóa dựa vào chương trình đọc tài liệu đó). Như hình trên, vấn đề là, tìm được một cuốn sách chứa chủ đề của mình và có đủ lượngông tin cần thiết cho vấn đề mình quan tâm. Hoặc khi chưa đủ thông tin, người dùng được gợi ý những cuốn sách viết về những chủ đề có liên quan mà người ta cần tra cứu thông tin về.
Bài toán đặt ra là, trong kho dữ liệu, bao gồm rất nhiều cuốn sách, rất nhiều các tài liệu như bài báo, tạp chí. Người dùng cần tra cứu thông tin về một vấn đề nào đó. Hệ thống sẽ phải cung cấp những cuốn sách viết về vấn đề đó và sắp xếp theo thứ tự ưu tiên nhất định cho người đọc. Hơn nữa, hệ thống cũng cung cấp các tài liệu mà những người dùng trước đó đã sử dụng khi cần tra cứu vấn đề đó.
Người dùng thiết lập một phiên giao dịch, bằng việc đăng nhập vào hệ thống hoặc có thể không cần đăng nhập (Tất nhiên, khi đăng nhập vào hệ thống sẽ được hỗ trợ một số tính năng tìm kiếm nâng cao). Bằng việc đánh một từ khóa người dùng quan tâm, hệ thống sẽ cung cấp hai loại kết quả:
85 trang |
Chia sẻ: Dung Lona | Lượt xem: 1454 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Đề tài Xây dựng ứng dụng phân tích ngữ nghĩa trong tìm kiếm tài liệu trực tuyến, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
kiếm ngữ nghĩa, chúng ta sẽ thấy rằng, cây tìm kiếm đứng trước tình trạng thiếu logic đưa đến vấn đề chưa hoàn tất hay “ngắc ngứ” (Incompleteness and Halting Problem).
Đầu tiên, về vấn đề Incompleteness, kết luận có thể được xem như là một sự suy diễn của một dãy logic gắn lại với nhau. Ở mỗi điểm, có thể có nhiều hướng khác nhau để tới một suy diễn mới. Vì vậy, để đạt hiệu quả, có một nhóm các khả năng phân nhánh để bằng cách nào đó hướng tới một giải pháp đúng, và nhóm các phân nhánh đó có thể trải ra trong các hướng mới lạ.
Trong một hệ thống logic phức tạp, có một số lượng lớn các chứng cớ tiềm tàng. Một số chúng dài và không rõ ràng nếu chỉ có một chứng cơ. Được chúng minh vào những năm 1930, một số hệ thống logic đủ phức tạp vốn đã là không đầy đủ. Nói cách khác, có các câu lệnh mà không thể được chứng minh một cách logic. Luận cứ của nó cho điều đó liên quan đến một vấn đề khác, vấn đề Halting.
Vấn đề Halting suy ra rằng, các giải thuật hiện nay sẽ không bao giờ kết thúc trong một câu trả lời. Khi nói về Web, chúng ta nói tới hàng triệu các sự kiện và chục ngàn luật và có thể nối kết đan lại với nhau trong những hướng phức tạp. Vì thế, không gian của các chứng cứ tiềm tàng là vô tận, và cây này theo logic sẽ trở nên vô tận.
1.2.2 Chiến lược tìm kiếm
Chiến lược tìm kiếm với thông tin trên Web ngữ nghĩa dựa trên nền tảng các công nghệ trên.
Từ search engine thường được dùng rộng rãi để mô tả các công cụ tìm kiếm dựa trên crawler và các thư mục do con người cung cấp. Đây là hai loại của các search engine tập hợp các danh sách của chúng trong những cách khác nhau hoàn toàn.
Search engine dựa vào crawler gồm 3 phần:
1. Bộ thu thập thông tin:
Robot là một chương trình tự động duyệt qua các cấu trúc siêu liên kết để thu thập tài liệu và đệ quy nó để nhật về tất cả các tài liệu có liên quan với tài liệu này. Về bản chất, nó chỉ là một chương trình duyệt và thu thấp thông tin từ các site theo đúng giao thức web. Như trình duyệt thông thường không được gọi là robot do thiếu tính chủ động. Chúng chỉ duyệt web khi có sự tác động của con người.
2. Bộ lập chỉ mục - Index
Hệ thống lập chỉ mục hay gọi là hệ thống phân tích và xử lý dữ liệu thực hiện việc phân tích, trích chọn những thông tin cần thiết (thường là các từ đơn, từ ghép, cụm từ quan trọng) từ những dữ liệu mà robot thu thập được và tổ chức thành cơ sở dữ liệu riêng để có thể tìm kiếm trên đó một cách nhanh chóng, hiệu quả. Hệ thống chỉ mục là danh sách các từ khóa, chỉ rõ các từ khóa nào xuất hiện ở trang nào, địa chỉ nào.
3. Bộ tìm kiếm thông tin
Search engine là cụm từ để chỉ toàn bộ hệ thống bao gồm bộ thu thập thông tin, bộ lập chỉ mục và bộ tìm kiếm thông tin. Các bộ này hoạt động liên tục từ lúc khởi động hệ thống, chúng phụ thuộc lần nhau về mặt dữ liệu và độc lập về hoạt động.
Search engine tương tác với user thông qua giao diện web, có nhiệm vụ nhận và trả về những tài liệu thỏa yêu cầu của user.
Nói các khác, tìm kiếm từ là tìm kiếm các trang mà những từ trong câu truy vấn xuất hiện nhiều nhất, trừ stopword (những từ quá thông dụng, cảm thán). Một từ trong câu truy vấn càng xuất hiện nhiều trong một trang thì trang đó càng được chọn để trả về. Một trang chứa tất cả các từ trong câu truy vấn thì tốt hơn là trang không chứa hoặc chỉ một số từ. Ngày nay, hầu hết các search engine đều hỗ trợ chức năng tìm kiếm cơ bản và nâng cao, từ đơn từ ghép, cụm từ, danh từ riêng
Ngoài việc tìm chính xác theo từ khóa, các search engine còn cố gắng hiểu ý nghĩa thực sự của câu hỏi thông qua câu chữ do người dùng cung cấp. Điều này được thể hiện qua chức năng sửa lỗi chính tả.
Nguyên lý hoạt động
Search engine điều khiển robot đi thu thập thông tin trên mạng thông qua các hyperlink. Khi robot phát hiện ra một site mới, nó gửi tài liệu về cho server chính để tạo cơ sở dữ liệu chỉ mục phục vụ cho nhu cầu tìm kiếm thông tin.
Vì thông tin trên mạng luôn thay đổi nên robot phải cập nhật liên tục các site cũ. Mật độ cập nhật phụ thuộc vào từng hệ thống search engine. Khi search engine nhận câu truy vấn, nó tiến hành phân tích, tìm trong cơ sở dữ liệu chỉ mục và trả về những tài liệu thỏa yêu cầu.
XỬ LÝ VĂN BẢN TIẾNG VIỆT
Từ và cấu trúc từ của tiếng Việt
Định nghĩa từ
Khái niệm từ nghe rất thông dụng dễ hiểu nhưng định nghĩa chính xác thế nào thì không đơn giản. Từ trước tới nay cũng có nhiều định nghĩa được đưa ra, tất cả đều đúng, nhưng chưa hoàn chỉnh. Dưới đây, tôi nêu ra một số định nghĩa về từ.
Thời Hy Lạp cổ đại, trường phái ngôn ngữ Alexandre định nghĩa: “Từ là đơn vị nhỏ nhất trong chuỗi lời nói”. Theo E.Sapir: “Từ là một đoạn nhỏ nhất có ý nghĩa, hoàn toàn có khả năng độc lập và bản thân có thể làm thành câu tối giản.
Còn với những nhà ngôn ngữ học tiếng Việt, thì theo Lê Văn Lý: “Từ là một tín hiệu ngữ âm có thể cấu tao bằng một âm vị hay sự kết hợp với âm vị, mà sự phát âm chỉ tiến hành trong một lần, hoặc là một âm tiết mà chữ viết biểu thị bằng một đơn vị tách rời có thể hiểu được.” Theo Nguyễn Kim Thản thì “Từ là đơn vị cơ bản của ngôn ngữ, có thể tách khỏi các đơn vị khác của lời nói để vận dụng một cách độc lập và là một khối hoàn chỉnh về mặt ý nghĩa và cấu tạo”. Quan niệm của ông về “đơn vị cơ bản” là những đơn vị có số lượng hữu hạn để thông báo, trao đổi tư tương cho nhau. Đơn vị này phải có ý nghĩa, và khi sử dụng, người dùng phải có ý thức về nó. Chính vì thế, từ không thể là câu, và không thể là âm tiết (vì nhiều khi âm tiết không có nghĩa và khi sử dụng, người dùng không ý thức về nó).
Cấu trúc từ tiếng Việt
Từ của tiếng Việt không giống với những ngôn ngữ phương Tây khác là không thể tách để xác định từ loại. Từ trong tài liệu tiếng Việt có thể là từ đơn (1 từ) , từ ghép. Theo như thống kê trên trang thì độ dài của một từ tiếng Việt được thể hiệnt trong bảng:
Độ dài của từ
Tần số
Tỉ lệ %
1
8933
12.2
2
48995
67.1
3
5727
7.9
4
7040
9.7
≥ 5
2301
3.1
Tổng cộng
72994
100
Table 1: : Tần suất xuất hiện độ dài từ tiếng Việt trên trang Vdict.com
Các phương pháp tách từ tiếng Việt đã được nghiên cứu
Nguyên lý thống kê dựa vào Internet
Thông qua các search engine thương mại, chúng ta có thể rút trích những thông tin thống kê hữu ích từ Internet. Đó là tần số tài liệu (document frequency – df), số lượng các tài liệu đã được lập chỉ mục có chứa từ cần xét. Ta chuẩn hóa giá trị df bằng cách chia cho một hằng số MAX (là số lượng các tài liệu tiếng Việt đã được lập chỉ mục) để xấp xỉ xác suất xuất hiện của một từ trên Internet.
Trên thực tế, chúng ta khó có thể biết được chính xác số lượng các tài liệu tiếng Việt đã được lập chỉ mục, do đó, thông qua thực nghiệm1 giá trị df của các từ thông dụng, chúng tôi chọn giá trị MAX là 109.
Tiếng Việt
df
có
21.3 × 106
của
20.4 × 106
một
14.4 × 106
Table 2: Tần số tài liệu của một số từ thông dụng trong tiếng Việt
Do từ tiếng Việt gồm một (số) tiếng liên tiếp nhau, ta cần độ đo thông kê mức độ liên kết giữa các tiếng. Mutual information -MI là một khái niệm quan trọng trong lý thuyết thông tin, được dùng trong xử lý ngôn ngữ tự nhiên để thể hiện quan hệ giữa hai từ cụ thể x và y (Church et al [3]):
Tuy nhiên, chúng tôi không chỉ xét các cặp tiếng mà còn xét nhóm n tiếng (n-gram). Tương tự Chien et al [3], chúng tôi mở rộng công thức tính MI của bigram cho n-gram:
Với cw là chuỗi gồm n tiếng (cw = s1s2sn), lw và rw là hai chuỗi con dài nhất (n-1) của cw (lw = s1s2sn-1 và rw = s2s3sn). Nếu giá trị MI(cw) lớn thì lw và rw có khuynh hướng cùng xuất hiện chung trong tài liệu trên Internet (tức là cw có khả năng cao là từ ghép).
Ví dụ: xét chuỗi “đại học khoa học tự nhiên”, ta so sánh khả năng chuỗi “khoa học tự nhiên” hay “học khoa học tự” là từ ghép. Ta thấy rằng “khoa học tự nhiên” có giá trị MI lớn hơn hẳn MI của “học khoa học tự” (không có ý nghĩa).
Chuỗi
Wf
MI
khoa học tự nhiên
39200
0.92
khoa học tự
41800
học tự nhiên
39900
học khoa học tự
14900
0.27
học khoa học
28600
Table 3: Ví dụ về MI của n-gram
Trong phần tiếp theo, tôi sẽ giới thiệu hướng tiếp cận bằng giải thuật di truyền để xác định MI tối ưu toàn cục, tức là cách tách từ hợp lý nhất của câu
Giải thuật di truyền
Với mỗi câu, chúng ta sẽ xác định cách tách từ hợp lý nhất. Tuy nhiên, không gian tìm kiếm sẽ rất lớn do có nhiều cách tổ hợp các tiếng thành từ. Dựa vào nguyên lý tiến hóa và di truyền, giải thuật di truyền thích hợp cho việc xác định (xấp xỉ) các lời giải tối ưu hóa toàn cục trong không gian tìm kiếm rất lớn thay vì các lời giải tối ưu cục bộ (Michalewicz, [10]). Giải thuật di truyền sẽ tiến hóa một quần thể qua nhiều thế hệ nhằm tối ưu hóa toàn cục thông quá quá trình chọn lọc, lai, biến dị và tái sinh. Chất lượng của mỗi cá thể trong quần thể được xác định bằng hàm thích nghi và qua mỗi thế hệ, chúng ta sẽ chọn lại N cá thể tốt nhất sau khi thực hiện quá trình lai, biến dị và tái sinh.
Giải thuật di truyền áp dụng cho bài toán tách từ tiếng Việt được tóm tắt như sau:
Mục tiêu: Xét văn bản t gồm n tiếng t=s1s2sn. Mục tiêu của quá trình GA là xác định những cách tách hợp lý nhất văn bản t thành m đọan t=w1w2wm với wk=sisj (1 ≤ k≤ m, 1≤ i, j≤ n) có thể là từ đơn hay từ phức.
Cách biểu diễn: Quần thể (pop) là tập hợp các cá thể (id) được biểu diễn bằng xâu nhị phân. Mỗi bit tương ứng với một tiếng. Vậy, một từ sẽ gồm các bit giống nhau liên tiếp.
Ví dụ:
học sinh học sinh học
0 0 1 0 0
học sinh # học # sinh học
w1 w2 w3
Khởi tạo quần thể: Ở bước này, ta khởi gán các tham số như số lượng thế hệ, kích thước quần thể, tỉ lệ lai, tỉ lệ biến dị và tỉ lệ tái sinh. Các cá thể ban đầu của quần thể được phát sinh ngẫu nhiên. Tuy nhiên, chúng tôi áp dụng một số ràng buộc nhằm tối ưu hóa các chuỗi ngẫu nhiên được phát sinh ra. Dưới đây là thống kê rút ra từ từđiển trực tuyến chưa 72994 từ và ngữ2
Thống kê theo độ dài của từ trong từ điển
Độ dài của từ
Tần số
Tỉ lệ %
1
8933
12.2
2
48995
67.1
3
5727
7.9
4
7040
9.7
≥ 5
2301
3.1
Tổng cộng
72994
100
Do hiện chưa có từ điển chuẩn dành cho xử lý ngôn ngữ nên chúng tôi quyết định chọn thống kê dựa trên một từ điển thông dụng. Dựa vào số liệu thống kê, ta thấy rằng có trên 67% các từ trong từđiển có độ dài là 2 tiếng, khoảng 30% là từ đơn hay từ gồm 3-4 tiếng. Các từ dài hơn chỉ chiếm khoảng 3% trong từđiển, trong đó thường là các thành ngữ.
Phép lai: Chúng tôi áp dụng thao tác lai 1-điểm chuẩn trên hai xâu bit. Với cặp cá thể id1 id2, hai cá thể con được tạo ra bằng cách lấy phần đầu của id1 nối vào phần sau của id2 và ngược lại. Tuy nhiên, nếu cá thể con vi phạm các điều kiện giới hạn về kích thước (mỗi đoạn wk có kích thước tối đa là 4), ta sẽ chuẩn hóa cá thể này bằng cách đảo các bit gây ra vi phạm ở cuối đoạn này.
Phép biến dị: Thay vì dùng phép biến dị đảo bit ngẫu nhiên, chúng tôi chỉ đảo các bit ở biên của mỗi phân đoạn. Tương tự phép lai, ta sẽ chuẩn hóa các cá thể để thỏa điều kiện giới hạn kích thước của phân đoạn.
Tái sinh: Sau khi thực hiện phép lai và biến dị, ta chọn lại một số cá thể ở thế hệ trước (theo tỉ lệ đã chọn) đưa vào quần thể mới.
Phép chọn: Ở mỗi thế hệ, chúng ta chỉ chọn giữ lại N cá thể tốt nhất. Hàm thích nghi của mỗi cá thể id được xác định như sau:
với id=w1w2wm là một cá thể trong quần thể pop = {id1, , idN}
Hội tụ: Quá trình tiến hóa nhằm cải thiện độ thích nghi của các cá thể trong quần thể, tức là cải thiện chất lượng của việc tách từ. Do đó, chúng ta sẽ dừng quá trình tiến hóa nếu độ thích nghi của thế hệ sau không cao hơn thế hệ trước, hoặc số lượng thế hệ đạt ngưỡng cho trước.
Giải thuật dùng trong bài toán sẽ dựa vào bộ từ điển ngôn ngữ tiếng Việt cho sẵn trước để xác định các từ loại. Giải thuật chúng tôi dùng sẽ được trình bày phần sau cố gắng phán đoán chính xác nhất ý nghĩa từ loại.
Thuật toán, otomat tách từ
Trong phần này, tôi chỉ giới thiệu mang tính lý thuyết các giải thuật, các otomat tách từ tiếng Việt đã được nghiên cứu.
1. Xây dựng ôtômát âm tiết đoán nhận tất cả các âm tiết tiếng Việt
2. Xây dựng ôtômát từ vựng đoán nhận tất cả các từ vựng tiếng Việt.
3. Dựa trên các ôtômát nêu trên, xây dựng đồ thị tương ứng với câu cần phân tích và sử dụng thuật toán tìm kiếm trên đồ thị để liệt kê các cách phân tích có thể.
Bảng chữ cái của ôtômát âm tiết là bảng chữ cái tiếng Việt, mỗi cung chuyển được ghi trên đó một ký tự. Ví dụ, với ba âm tiết phương, pháp, trình ta sẽ có ôtômát đoán nhận âm tiết như Hình 1.
Hình 16: Xây dựng ôtômát âm tiết
Thuật toán xây dựng ôtômát âm tiết
Input: Từ điển âm tiết
Output: Ôtômát âm tiết.
Thuật toán:
1. Lập trạng thái khởi đầu ;
2. Vòng lặp đọc cho tới khi hết tệp dữ liệu, lấy ra từng âm tiết. Gọi các ký tự của âm tiết đó là
a.
b. Vòng lặp trong khi ()
i. Lấy ra ký tự ;
ii. Tìm trong các cung chuyển từ trạng thái cung trên đó ghi ký tự . Nếu có cung như thế:
1.
2.
iii. Nếu không có cung ( nào như thế thì thoát khỏi vòng lặp b.
c. Với từ i đến
i. Tạo mới trạng thái q, ghi nhận là trạng thái không kết;
ii. Thêm cung chuyển trên đó ghi ký tự ;
iii.
d. Ghi nhận q là trạng thái kết;
Ôtômát từ vựng được xây dựng tương tự, với điểm khác như sau: thay vì ghi trên mỗi cung chuyển một âm tiết, ta ghi số hiệu của trạng thái (kết) của ôtômát âm tiết tại đó đoán nhận mỗi âm tiết của từ nhằm giảm kích thước của ôtômát từ vựng. Ví dụ, với hai từ phương pháp và phương trình, giả sử khi đưa lần lượt các âm tiết phương, pháp, trình qua ôtômát âm tiết, ta đến được các trạng thái kết ghi các số n1, n2, n3 thì trên các cung chuyển tương ứng ta ghi các số n1, n2, n3 (Hình 2).
Hình 17: Xây dựng ôtômát từ vựng
Thuật toán xây dựng ôtômát từ vựng
Input: Từ điển từ vựng, ôtômát âm tiết
Output: Ôtômát từ vựng.
Thuật toán:
1. Lập trạng thái khởi đầu ;
2. Vòng lặp đọc cho tới khi hết tệp dữ liệu, lấy ra từng mục từ word. Gọi các âm tiết của word là ;
3. Sử dụng ôtômát âm tiết để đoán nhận các âm tiết trên, được các số hiệu của trạng thái (kết) tương ứng là
a.
b. Vòng lặp trong khi ( )
i. Lấy ra số ;
ii. Tìm trong các cung chuyển từ trạng thái cung trên đó ghi số . Nếu có cung như thế
1.
2.
iii. Nếu không có cung ( nào như thế thì thoát khỏi vòng lặp b.
c. Với từ i đến
i. Tạo mới trạng thái q, ghi nhận là trạng thái không kết;
ii. Thêm cung chuyển ( trên đó ghi số ;
iii.
d. Ghi nhận là trạng thái kết
Sau khi đã xây dựng xong hai ôtômát, ta ghi chúng vào hai tệp định kiểu để dùng trong bước phân tách từ vựng. Nếu mỗi ký tự (char) được ghi vào tệp với kích thước 2 byte (mã Unicode), mỗi số nguyên (int) có kích thước 4 byte thì tệp lưu ôtômát âm tiết có kích thước 146KB, tệp ôtômát từ vựng có kích thước 1MB.
Tư tưởng của thuật toán phân tách từ vựng là quy việc phân tách câu về việc tìm đường đi trên một đồ thị có hướng, không có trọng số.
Giả sử câu ban đầu là một dãy gồm n+1 âm tiết s0, s1, ..., sn. Ta xây dựng một đồ thị có n+2 đỉnh v0, v1, ..., vn, vn+1, sắp thứ tự trên một đường thẳng từ trái sang phải; trong đó, từ đỉnh vi đến đỉnh vj có cung (i < j) nếu các âm tiết si, si+1, ..., sj-1 theo thứ tự lập thành một từ. Khi đó mỗi cách phân tách câu khác nhau tương ứng với một đường đi trên đồ thị từ đỉnh đầu v0 đến đỉnh cuối vn+1. Trong thực tế, cách phân tích câu đúng đắn nhất thường ứng với đường đi qua ít cung nhất trên đồ thị.
Trong trường hợp câu có sự nhập nhằng thì đồ thị sẽ có nhiều hơn một đường đi ngắn nhất từ đỉnh đầu đến đỉnh cuối, ta liệt kê toàn bộ các đường đi ngắn nhất trên đồ thị, từ đó đưa ra tất cả các phương án tách câu có thể và để người dùng quyết định sẽ chọn phương án nào, tuỳ thuộc vào ngữ nghĩa hoặc văn cảnh. Ví dụ, xét một câu có cụm "thuộc địa bàn", ta có đồ thị như sau (Hình 3)
Hình 18: Một tình huống nhập nhằng
Cụm này có sự nhập nhằng giữa thuộc địa và địa bàn và ta sẽ có hai kết quả phân tách là "thuộc địa / bàn" và "thuộc / địa bàn". Ta có thể chỉ ra rất nhiều những cụm nhập nhằng trong tiếng Việt, chẳng hạn "tổ hợp âm tiết", "bằng chứng cớ",...
Trường hợp trong câu có âm tiết không nằm trong từ điển thì rõ ràng ôtômát âm tiết không đoán nhận được âm tiết này. Kết quả là đồ thị ta xây dựng từ câu đó là không liên thông. Dựa vào tính chất này, ta thấy rằng nếu đồ thị không liên thông thì dễ dàng phát hiện ra rằng đơn vị âm tiết không đoán nhận được không nằm trong từ điển âm tiết, tức nó bị viết sai chính tả hoặc là một đơn vị âm tiết (từ vựng) mới.
PHẦN III: GIẢI PHÁP KỸ THUẬT
GIẢI PHÁP ĐỌC ĐỊNH DẠNG TÀI LIỆU
Giao diện Ifilter
Giao diện Ifilter được thiết kế bởi Microsoft để sử dụng cho dịch vụ định chỉ số (Indexing Service). Mục đích chính của nó là trích rút phẩn text từ file để dịch vụ Định chỉ số có thể đánh chỉ số và tìm kiếm nó về sau. Một vài phiên bản của Windows có trình thực thi Ifilter cho các file office, cũng có những phiên bản miễn phí hoặc thương mại cho việc đọc các loại file khác (pdf có bộ lọc Adobe PDF là phổ biến nhất). Giao diện IFilter có thể được sử dụng trong các dạng không phải dạng text giống như các tài liệu office, tài liệu pdfhay cũng của dụng dạng file text như html, xml, để trích rút những phần quan trong của file. Mặc dù giao diện IFilter được sử dụng chủ yếu cho các mục đích trích rút text từ tài liệu, nó cũng được sử dụng trong các bộ máy tìm kiếm. Windows Desktop Search sử dụng các bộ lọc để đánh chỉ số cho file.
Chi tiết công nghệ của giao diện IFilter không được tiết lộ bởi Microsoft. Phần sau đây, tôi giới thiệu cách phần mềm được chọn sử dụng giao diện IFilter để đọc file như thế nào.
Chương trình EPocalipse.IFilter
Để thực hiện một việc tách từ, đơn giản sử dụng:
TextReader reader=new FilterReader(fileName);
using (reader)
{
textBox1.Text=reader.ReadToEnd();
}
Với fileName là đường dẫn tuyệt đối của file được định vị trên ổ cứng.
Quá trình thực thi nhận dạng extension của file được thực hiện như sau: Gọi phương thức LoadIFilter và truy tìm theo dấu vết của các keys đăng ký trong registry trong quá trình thực hiện đó. Chi tiết được thực hiện trong lớp FilterLoader. Khi một cặp lớp/DLL được tìm thấy cho mở rộng của file đó, các thông tin này được lưu lại trong cach để tránh việc phải đọc lại registry.
Khi có tên của DLL và ID của lớp thực hiện cho bộ lọc, lớp ComHelper thực hện các công việc sau:
Tải dll sử dụng phương thức LoadLibrary trong API của Win32.
Gọi phương thức GetProcAddress để lấy một con trở tới hàm DllGetClassObject.
Sử dụng Marshal.GetDelegateForFunctionPointer() để chuyển con trỏ hàm tới một delegate. Chú ý, chỉ available trong .NET 2.0
Gọi hàm DllGetClassObject để nhận một đối tượng IclassFactory
Khi có một đối tượng IClassFactory , ta sử dụng nó để tạo một các instance của lớp thực thi filter
private static IFilter LoadFilterFromDll(string dllName,
string filterPersistClass)
{
//Get a classFactory for our classID
IClassFactory classFactory=ComHelper.GetClassFactory(dllName,
filterPersistClass);
if (classFactory==null)
return null;
//And create an IFilter instance using that class factory
Guid IFilterGUID=new Guid("89BCB740-6119-101A-BCB7-00DD010655AF");
Object obj;
classFactory.CreateInstance(null, ref IFilterGUID, out obj);
return (obj as IFilter);
}
Cuối cùng, có một thực thể IFilter mà có thể thích hợp với lớp FilterReader
IPersistFile persistFile=(filter as IPersistFile);
if (persistFile!=null)
{
persistFile.Load(fileName, 0);
IFILTER_FLAGS flags;
IFILTER_INIT iflags =
IFILTER_INIT.CANON_HYPHENS |
IFILTER_INIT.CANON_PARAGRAPHS |
IFILTER_INIT.CANON_SPACES |
IFILTER_INIT.APPLY_INDEX_ATTRIBUTES |
IFILTER_INIT.HARD_LINE_BREAKS |
IFILTER_INIT.FILTER_OWNED_VALUE_OK;
if (filter.Init(iflags, 0, IntPtr.Zero, out flags)==IFilterReturnCode.S_OK)
return filter;
}
GIẢI PHÁP TÁCH TỪ
Giải pháp tách từ Tiếng Anh
Với các tài liệu tiếng Anh, từ của tiếng Anh được phân cách với nhau bằng dấu cách. Điều đó có nghĩa là chúng ta có thể tách từ tiếng Anh bằng dấu phân tách là dấu cách. Việc xử lý các stopword của tiếng anh thì chúng tôi cũng có một file gồm hơn 300 từ stopword của tiếng Anh để phục vụ cho việc loại bỏ stopword khỏi văn bản tách để tách ra những từ quan trọng, tránh những từ mang ý nghĩa chung, hay chỉ là cảm thán.
Giải pháp cho Tiếng Việt
Các giải pháp đã có
Hiện có rất nhiều chương trình hỗ trợ việc phân tích cú pháp, tách từ, gán nhãn từ tiếng Việt cùng với các giải thuật thuật toán khác nhau. Những đồ án được tham khảo là chương trình Code_correct (chính xác loại văn bản dựa vào tập huấn luyện), chương trình VNSegment của tác giả Phương Thái (chương trình khá hoàn chỉnh trong việc tách từ và phân loại từ tiếng Việt. Chỉ có điều viết trên nền Java và không được cung cấp sourcode và file thư viện), chương trình VNTokenizer (đề cập tới một số nghiên cứu hữu ích cho việc tác từ).
Giải pháp sử dụng và nhận xét
Câu bên trái
Câu cần tách
Giải pháp được sử dụng được mô tả bằng giải thuật phía dưới. Dựa trên một bộ từ điển tiếng Việt tương đối đầy đủ gồm hơn 99.000 từ và cụm từ.
In Dictionary?
Câu được cắt
Yes
Còn 1 từ
No
No
Cắt tiếng bên trái Giữ các từ đã cắt
Yes
Stack
Thêm từ mới vào mảng từ tách
Hình 19: Giải thuật tách từ từ câu
Tài liệu được tách thành các câu chuẩn (hoàn chỉnh). Giải thuật tách các từ khóa từ các câu đó. Các từ trong câu sẽ được kiểm tra xem có tồn tại trong từ điển không bằng các so sánh nó với các từ trong từ điển. Nếu nó “giống” từ trong từ điển, thì tách từ đó và kiểm tra tiếp. Giải thuật trên giảm thiểu tối đa tình huống nhập nhằng. Tuy nhiên trong trường hợp câu này thì giải thuật tách sai: Học sinh học sinh học àHọc|sinh học|sinh học. Nhưng như tình huống này (thuộc địa bàn) thì lại giải quyết tốt (thuộc|địa bàn).
Chi phí về thời gian cho giải thuật trên là rất lớn ở bước kiểm tra từ tách ra có trong từ điển hay không. Từ điển với hơn 99.000 từ được load vào bộ nhớ trong dưới với kiểu dữ liệu được tổ chức theo 2 kiểu như sau:
Một là mảng các string. Mỗi phần tử là từ hay cụm từ của từ điển. Mảng này được sắp xếp theo thứ tự tăng dần của mã ASCII (Trong C#, kiểu dữ liệu mảng nó.
Tổ chức thành một arraylist mà mỗi phần tử của nó là mảng các string. Mảng các string thuộc 1 phần tử nó giống nhau về âm tiết đầu tiên của từ. Ví dụ
ả
ả đào
ả đầu
ả hoàn
Nông nổi
ái
Ái
Ái ân
Ái chà
Ái quốc
Ái nam ái nữ
Ái thần
Ái tình
an
An cư lạc nghiệp
An dưỡng
An giấc
Anh
Anh chàng
Anh hùng
Anh hùng chủ nghĩa
Anh kiệt
Anh linh
Anh vũ
Ăn
Ăn
Ăn cắp
Ăn trộm
Table 4: Bảng một số ví dụ về cấu trúc lưu trữ từ điển
Khi đọc một từ, ta tách âm tiết đầu tiên của nó và kiểm tra trước với các phần tử đầu tiên của mảng, sau đó, kiểm tra tiếp với các phần tử trong mảng của nó. Khi đó, nó sẽ tăng tốc độ tìm kiếm lên đáng kể.
GIẢI PHÁP LSA
Giải pháp LSA là một trong các giải pháp xử lý tài liệu về mặt ngữ nghĩa. Sau khi các thu được bộ từ khóa cho từng văn bản, phương pháp LSA sẽ phân tích trên bộ từ khóa đó với các văn bản khác để tìm ra mức độ tương đồng. Bộ từ khóa của một tài liệu và các tài liệu còn lại sẽ hình thành ma trận độ tương đồng về nội dung. Phương pháp LSA sử dụng giải thuật SVD để giảm chiều cho ma trận trên.
Chi tiết về giải pháp này xin tham khảo ở đồ án của bạn Cường.
GIẢI PHÁP PHÂN TÍCH NGƯỜI DÙNG
Một phiên làm việc được bắt đầu từ khi người dùng search với một từ khóa và kết thúc bằng việc search bộ từ khóa mới. Phân tích lịch sử truy cập của người dùng là phân tích độ yêu thích của họ với các tài liệu khác khi đọc một tài liệu nào đó. Khi người dùng click vào những tài liệu gợi ý Cs (tài liệu được hệ thống đưa ra khi người dùng quyết định đọc một tài liệu nào đó - A), hệ thống sẽ cập nhật mức độ yêu thích với các tài liệu gợi ý C(một trong các Cs) của tài liệu A. Ngoài ra, hệ thống còn cung cấp chức năng khảo sát để thu thập ý kiến của người dùng về mức độ tương đồng của tài liệu C so với tài liệu A. Các dữ liệu này sẽ được hệ thống xử lý để quyết định các thứ tự ưu tiên cho các tài liệu gợi ý trong những lần làm việc sau.
Một phương pháp nữa để thu hẹp bộ lọc là thu thập các thông tin về sở thích của người dùng về các tiêu chí lĩnh vực nào đó. Khi đăng ký tài khoản với hệ thống, hệ thống sẽ ghi nhận các sở thích ứng với người dùng đó, dùng làm các thông tin phục vụ cho bộ lọc các kết quả trả về trong màn hình tìm kiếm cho người dùng.
GIẢI PHÁP CÔNG NGHỆ
Như tên đề tài đã phản ánh, hệ thống sẽ như một modul tích hợp trên trình duyệt web để hoạt động như bộ search engine. Nên giải pháp công nghệ được đề xuất là môi trường .NET 2.0, hệ quản trị cơ sở dữ liệu MS SQL server 2005 để lưu trữ các index của tài liệu thu thập được. Giao diện quản trị và người dùng được xây dựng dựa trên môi trường web với ngôn ngữ ASP.Net và mã nguồn C#.
Chương trình cũng sử dụng kiến trúc 3 tầng để trao đổi với CSDL. Modul DAL xử lý các trao đổi Database và Dataset, dataadapter. Modul BLL thực hiện việc chuyển các đổ dữ liệu từ các dataset vào các kiểu dữ liệu của lớp giao diện xử lý. Các phương thức chức năng được thiết kế trong modul Utilities
PHẦN IV: XÂY DỰNG CHƯƠNG TRÌNH, CÀI ĐẶT CHẠY DEMO
PHÂN TÍCH HỆ THỐNG
Mô hình use-case và đặc tả use-case
Hình 20: Biểu đồ use-case hệ thống
Đặc tả use-case
Use-case tìm kiếm
Hình 21: Use-case tìm kiếm Hình 22: Biểu đồ cộng tác chức năng tìm kiếm
Lớp biên:
W_Tìm kiếm
W_Tài liệu
Lớp điều khiển:
QL_Tài liệu
Lớp thực thể:
TT_Tài liệu
Dưới đây là biểu đồ tiến trình.
Hình 23: Biểu đồ tiến trình chức năng tìm kiếm
Use-case quản lý tài liệu
Hình 24: Use-case quản lý tài liệu
Lớp biên:
W_admin
W_Danh sách tài liệu
W_Tài liệu
Lớp điều khiển:
QL_Tài liệu
Lớp thực thể:
TT_Tài liệu
Biểu đồ cộng tác:
Hình 25: Biểu đồ cộng tác
Chức năng thêm mới tài liệu:
Hình 26: Biểu đồ tiến trình chức năng thêm mới tài liệu
Chức năng sửa tài liệu:
Hình 27: Biểu đồ tiến trình chức năng sửa tài liệu
Chức năng xoá tài liệu:
Hình 28:Biểu đồ tiến trình chức năng xóa tài liệu
Biểu đồ cộng tác:
Hình 29: Biểu đồ cộng tác quản lý tài liệu
Use-case quản lý tác giả
Hình 30: Use-Case quản lý tác giả
Lớp biên:
W_admin
W_Danh sách tác giả
W_Tác giả
Lớp điều khiển:
QL_Tác giả
Lớp thực thể:
TT_Tác giả
Biểu đổ trình tự:
Chức năng thêm mới tác giả:
Hình 31: Biểu đồ tiến trình thêm mới tác giả
Chức năng sửa thông tin tác giả:
Hình 32: Biểu đồ tiến trình sửa tác giả
Chức năng xoá tác giả:
Hình 33: Biểu đồ tiến trình xóa tác giả
Biểu đồ cộng tác:
Hình 34: Biểu đồ cộng tác quản lý tác giả
Use-case quản lý nhà xuất bản
Hình 35: User-Case quản lý NXBLớp biên:
W_Admin
W_Danh sách NXB
W_NXB
Lớp điều khiển:
QL_NXB
Lớp thực thể:
TT_NXB
Biểu đổ trình tự:
Chức năng thêm mới NXB:
Hình 36: Biểu đồ tiến trình thêm mới NXB
Chức năng chỉnh sửa thông tin NXB:
Hình 37: Biểu đồ tiến trình chỉnh sửa thông tin NXB
Chức năng xoá NXB:
Hình 38: Biểu đồ tiến trình xóa thông tin NXB
Biểu đồ cộng tác:
Hình 39: Biểu đồ công tác quản lý NXB
Use-case thành viên
Hình 40: Biểu đồ usercase quản lý thành viên
Lớp biên:
W_Admin
W_Danh sách User
W_User
W_Đăng ký/đăng nhập
Lớp điều khiển:
QL_User
Lớp thực thể:
TT_User
Biểu đổ trình tự:
Chức năng thêm mới User:
Hình 41: Biểu đồ tiến trình thêm mới user
Chức năng chỉnh sửa thông tin:
Hình 42: Biểu đồ tiến trình chỉnh sửa user
Chức năng xoá User:
Hình 43: Biểu đồ tiến trình xóa user
Biểu đồ cộng tác:
Hình 44: Biểu đồ cộng tác quản lý user
Về cơ sở dữ liệu
Biểu đồ quan hệ thực thể
Hình 45: Biểu đồ cộng tác quản lý user
Bảng các thực thể chính
#
Tên
Tên thực thể
Miêu tả
A0 – Bảng chính
1
A01
Tài liệu
Chứa các thông tin cơ bản của một tài liệu.
2
A02
Danh mục cấp 1
Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
3
A03
4
A04
Tác giả
Chứa các thông tin cơ bản về tác giả.
5
A05
Nhà xuất bản
Chứa các thông tin cơ bản về nhà xuất bản.
6
A06
Người dùng
Chứa các thông tin cơ bản của người dùng.
7
A07
Danh mục cấp 2
Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
8
A08
Danh mục cấp 3
Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
9
A09
10
A10
Cấu hình hệ thống
Chứa các thông tin liên quan tới cấu hình hoạt động của hệ thống
11
A11
Tài liệu liên quan
Chứa những tài liệu liên quan về mặt thống kế số lần được xem.
12
A12
Kết quả phân tích LSA
Chứa kết quả của phép phân tích LSA.
.Table 5: Bảng các thực thể chính
Bảng các quan hệ thực thể
#
Parent
Type
Child
Description
1
A01
N:N
A04
Một tài liệu có thể có một hoặc nhiều tác giả, một tác giả có thể có một hoặc nhiều tài liệu.
2
A05
1:N
A01
Một nhà xuất bản có thể xuất bản một hoặc nhiều cuốn sách. Một cuốn sách chỉ do một nhà xuất bản sản xuất.
3
A02
1:N
A07
Danh mục cấp 1 có thể có một hoặc nhiều danh mục con cấp 2.
4
A07
1:N
A08
Danh mục cấp 2 có thể có một hoặc nhiều danh mục con cấp 3
5
A01
1:N
A11
Tài liệu có thể có nhiều tài liệu liên quan về mặt nội dung.
6
A01
1:N
A12
Tài liệu có nhiều kết quả LSA với các tài liệu khác.
Table 6: Bảng quan hệ các thực thể
Danh sách bảng
#
Tên
Mô tả
Lệnh SQL
1
A01
Tài liệu: Chứa thông tin cơ bản của một tài liệu.
CREATE TABLE [dbo].[A01] (
[A01_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A01_Name] [nvarchar] (100) NULL ,
[A01_Code] [char] (8) NOT NULL ,
[A01_Description] [ntext] NULL ,
[A05_ID] [int] NOT NULL ,
[A01_DatePublished] [datetime] NULL ,
[IsActive] [bit] NULL ,
[A01_LinkDown] [Varchar] NULL ,
[A01_RelatedDocs] [text] NULL ,
[A01_LSA] [text] NULL ,
[A01_KeyWords] [text] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
2
A02
Danh mục cấp 1: Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
CREATE TABLE [dbo].[A02] (
[A02_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A02_Name] [nvarchar] (50) NULL ,
[A02_Code] [char] (3) NOT NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY]
GO
3
A04
Tác giả: Chứa các thông tin cơ bản về tác giả.
CREATE TABLE [dbo].[A04] (
[A04_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A04_Name] [nvarchar] (100) NULL ,
[A04_Birthday] [datetime] NULL ,
[A04_Address] [nvarchar] (100) NULL ,
[A04_NativePlace] [nvarchar] (100) NULL ,
[A04_Phone] [int] NULL ,
[A04_Email] [varchar] (100) NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY]
GO
4
A05
Nhà xuất bản: Chứa các thông tin cơ bản về nhà xuất bản.
CREATE TABLE [dbo].[A05] (
[A05_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A05_Name] [nvarchar] (100) NULL ,
[A05_Address] [nvarchar] (100) NULL ,
[A05_Phone] [int] NULL ,
[A05_Email] [varchar] (100) NULL ,
[A05_Remark] [ntext] NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
5
A06
Người dùng: Chứa các thông tin cơ bản của người dùng.
CREATE TABLE [dbo].[A06] (
[A06_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A06_Name] [nvarchar] (100) NULL ,
[A06_UseName] [nvarchar] (100) NOT NULL ,
[A06_PassWord] [nvarchar] (100) NOT NULL ,
[A06_Phone] [int] NULL ,
[A06_Email] [varchar] (100) NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY]
GO
6
A07
Danh mục cấp 2: Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
CREATE TABLE [dbo].[A07] (
[A07_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A07_Name] [nvarchar] (100) NULL ,
[A07_Code] [char] (5) NOT NULL ,
[A02_ID] [int] NOT NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY]
GO
7
A08
Danh mục cấp 3: Chứa các thông tin về loại của tài liệu. Danh mục phân cấp 1-2-3. Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2.
CREATE TABLE [dbo].[A08] (
[A08_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A08_Name] [nvarchar] (100) NULL ,
[A08_Code] [char] (8) NOT NULL ,
[A07_ID] [int] NOT NULL ,
[IsActive] [bit] NULL
) ON [PRIMARY]
GO
8
A09
Bảng quan hệ: Thành lập quan hệ nhiều nhiều giửa bảng A01 và A04.
CREATE TABLE [dbo].[A09] (
[A01_ID] [int] NOT NULL ,
[A04_ID] [int] NOT NULL
) ON [PRIMARY]
GO
9
A10
Bảng chứa thông tin hệ thống.
CREATE TABLE [dbo].[A10] (
[A10_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A10_NumberOfDimensionReduce] [int] NOT NULL ,
[A10_MaxOfWords] [int] NOT NULL ,
[A10_MaxOfResultOfLSA] [int] NOT NULL ,
[A10_MaxOfRelatedDocs] [int] NOT NULL ,
[A10_DegreeOfAccuracy] [float] NOT NULL
) ON [PRIMARY]
10
A11
Bảng chứa thông tin tài liệu liên quan tới tài liệu.
CREATE TABLE [dbo].[A11] (
[A11_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A01_ID] [int] NOT NULL ,
[A11_RelatedID] [int] NOT NULL ,
[A11_Index] [float] NOT NULL ,
[A11_StandIndex] [float] NOT NULL
) ON [PRIMARY]
11
A12
Bảng chứa kết quả của LSA.
CREATE TABLE [dbo].[A12] (
[A12_ID] [int] IDENTITY (1, 1) NOT NULL ,
[A01_ID] [int] NOT NULL ,
[A12_RelatedID] [int] NOT NULL ,
[A12_Index] [int] NOT NULL ,
[A12_StandIndex] [float] NOT NULL
) ON [PRIMARY]
Table 7: Danh sách các bảng chínhMô tả chi tiết bảng
Bảng A01
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A01_ID
INT
NOT NULL
Yes
No
2
A01_Name
NVARCHAR(100)
NULL
No
No
3
A01_Code
CHAR(8)
NOT NULL
No
No
4
A01_LinkDown
VARCHAR(100)
NULL
No
No
Chứa link liên kết cho phép download tài liệu.
5
A01_Decription
NTEXT
NULL
No
No
6
A05_ID
INT
NOT NULL
No
Yes
7
IsActive
BIT
NULL
1
No
No
8
A01_KeyWords
NTEXT
NULL
No
No
Chứa các từ khoá đại diện cho nôi dung vb.
9
A01_RelatedDocs
NTEXT
NULL
No
No
Chứa những tài liệu liên quan tới tài liệu này về mặt nội dung.
10
A01_LSA
NTEXT
NULL
No
No
Chứa kết quả của phân tích LSA.
Table 8: Mô tả bảng tài liệu A01
A02
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A02_ID
INT
NOT NULL
Yes
No
2
A02_Name
NVARCHAR(100)
NULL
No
No
3
A02_Code
CHAR(3)
NOT NULL
No
No
4
IsActive
BIT
NULL
1
No
No
Table 9: Mô tả bảng Catalogue A02
A04
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A04_ID
INT
NOT NULL
Yes
No
2
A04_Name
NVARCHAR(100)
NULL
No
No
3
A04_Birthday
DATETIME
NULL
No
No
4
A04_Address
NVARCHAR(100)
NULL
No
No
5
A04_NativePlace
NVARCHAR(100)
NULL
No
No
6
A04_Phone
INT
NULL
No
No
7
A04_Email
NVARCHAR(100)
NULL
No
No
8
IsActive
BIT
NULL
1
No
No
Table 10: Mô tả bảng tác giả A04
Bảng A05
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A05_ID
INT
NOT NULL
Yes
No
2
A05_Name
NVARCHAR(100)
NULL
No
No
3
A04_Address
NVARCHAR(100)
NULL
No
No
4
A04_Remark
NTEXT
NULL
No
No
5
A04_Phone
INT
NULL
No
No
6
A04_Email
NVARCHAR(100)
NULL
No
No
7
IsActive
BIT
NULL
1
No
No
Table 11: Mô tả bảng NXB A05
Bảng A06
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A06_ID
INT
NOT NULL
Yes
No
2
A06_Name
NVARCHAR(100)
NULL
No
No
3
A06_UseName
NVARCHAR(100)
NOT NULL
No
No
4
A06_PassWord
NVARCHAR(100)
NOT NULL
No
No
5
A04_Phone
INT
NULL
No
No
6
A04_Email
NVARCHAR(100)
NULL
No
No
7
IsActive
BIT
NULL
1
No
No
Table 12: Mô tả bảng User A06
Bảng A07
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A07_ID
INT
NOT NULL
Yes
No
2
A07_Name
NVARCHAR(100)
NULL
No
No
3
A07_Code
CHAR(5)
NOT NULL
No
No
4
IsActive
BIT
NULL
1
No
No
5
A02_ID
INT
NOT NULL
No
Yes
Table 13: Mô tả bảng subCatalogue A07
Bảng A08
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A08_ID
INT
NOT NULL
Yes
No
2
A08_Name
NVARCHAR(100)
NULL
No
No
3
A08_Code
CHAR(3)
NOT NULL
No
No
4
IsActive
BIT
NULL
1
No
No
5
A07_ID
INT
NOT NULL
No
Yes
Table 14: Mô tả bảng Child A08
Bảng A11
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A11_ID
INT
NOT NULL
Yes
No
2
A01_ID
INT
NOT NULL
No
Yes
3
A11_RelatedID
INT
NOT NULL
No
No
4
A11_Index
FLOAT
NULL
0.0
No
No
5
A11_StandIndex
FLOAT
NULL
0.0
No
No
Table 15: Mô tả bảng A11
Bảng A12
#
Tên trường
Kiểu dữ liệu
Cho phép null
Giá trị mặc định
Khoá chính
Khoá ngoài
Ghi chú
1
A12_ID
INT
NOT NULL
Yes
No
2
A01_ID
INT
NOT NULL
No
Yes
3
A12_RelatedID
INT
NOT NULL
No
No
4
A12_Index
INT
NULL
0
No
No
5
A12_StandIndex
FLOAT
NULL
0.0
No
No
Table 16: Mô tả bảng A12
CÁC MODUL
2.1 Modul đọc các định dạng tài liệu
Có thể xem lại phần trên để hiểu rõ về cách modul này đọc tài liệu thế nào. Modul này được thiết kế thành file dll để như hàm thư viện dùng trong chương trình.
Có một số điểm cần chú ý khi sử dụng modul này:
Cú pháp sử dụng: Add reference file EPocalipse.Ifilter.dll
Using EPocalipse.Ifilter
TextReader reader=new FilterReader(fileName);
using (reader)
{
textBox1.Text=reader.ReadToEnd();
}
fileName là đường dẫn tuyệt đối của file trên ổ đĩa bao gồm cả tên và phẩn mở rộng.
Với file pdf, chú ý version của bản acrobat reader mà ta cài. Chú ý nên dùng file pdf với version 7.0.1
Modul tách từ
Modul này gồm 4 lớp chính:
Lớp clsDictionary:
public static void Init(string path)
Lớp khởi tạo từ điển bằng phương thức Init với path là đường dẫn tuyệt đối file từ điển. Cũng chính trong phương thức này, ta định nghĩa cách lưu trữ từ điển (như đã trình bày ở trên) để tăng tốc độ cho các giải thuật tìm kiếm. Trong lớp này chú ý các phương thức sau:
Đọc file từ điển theo bảng mã Unicode:
StreamReader sr = new StreamReader(path, System.Text.Encoding.Unicode);
Sắp xếp tăng dần để phục vụ cho giải thuật tìm kiếm nhị phân:
arl.Sort();
Phương thức này là phương thức sẵn có trong C# cho một mảng. Nó sẽ sắp xếp theo thứ tự tăng dần của mã ASCII của phần tử. Do đó, nó có thể sắp xếp mảng các số hoặc mảng các string.
public static int Term2Id(string Term)
Phương thức tiến hành tìm kiếm một xâu Term có thuộc từ điển hay không. Nếu có, trả lại Id, nếu không trả về 0. Trong phương thức này, tôi cài đặt thuật giải tìm kiếm nhị phân (một trong các giải thuật để tăng tốc độ tìm kiếm).
Lớp clsPunctuator.cs
Lớp này thực hiện các bước chuẩn hóa văn bản. Nhận biết các ký tự dấu chấm câu, dấu chấm trong mail, hay trong số hàng nghìn. Tách nhiều khoảng trống thành 1 khoảng duy nhất. Chia văn bản thành các đoạn và các câu.
Lớp clsSentence.cs
Lớp thể hiện cho một câu với các thuộc tính nhất định.
Lớp clsTermSplitter.cs
Lớp sẽ thể hiện giải thuật tách câu thành các từ, cụm từ để kiểm tra nó có trong từ điển hay không.
Thuật toán đọc từ là thuật “từ trái sang”, đã được trình bày ở phần trên. Có thể tối ưu giải thuật từ các phương thức trong lớp này.
Lớp clsStopWordRemover.cs
Lớp cuối cùng thực hiện phương thức tách câu.
public clsStopWordRemover(string path)
Lớp được khởi tạo với phương thức này, với path là file+đường dẫn đầy đủ đến file stopword. Lớp sẽ lưu file này vào biến mảng trong lớp.
public string[] RemoveStopWord(string doc,string pathDic)
Lớp sẽ gọi tiếp các phương thức sau để thực hiện việc tách văn bản thành các từ khóa:
clsTermSplitter Splitter = new clsTermSplitter();
clsPunctuator Punctuator = new clsPunctuator();
clsDictionary.Init(pathDic);
Phương thức này trả về mảng các từ khóa của văn bản. Trong phương thức này cũng loại bỏ các từ stopword từ mảng các từ stopword được lưu trong phương thức khởi tạo stopword trên.
Modul tách từ sẽ được gọi bằng cách
using Utils.Spliter;
clsStopWordRemover swr = new clsStopWordRemover(this.lbStopFile.Text);
string[] result = swr.RemoveStopWord(detail, dicfile);
Với dicfile là file từ điển gồm cả đường dẫn. detail là string văn bản mà ta đọc vào từ bước trước. this.lbStopFile.Text là đường dẫn tuyệt đối đến file stopword.
Modul LSA
Modul này được thiết kế ở lớp Util. Đầu vào của modul là tập tài liệu và tập các từ khóa, đầu ra là cập nhật cơ sở dữ liệu các thông tin về độ tương đồng giữa các tài liệu.
Thông tin chi tiết xin tham khảo bên đồ án của Mr Cường.
CÀI ĐẶT
Chương trình được thiết kế với giao diện website. Ta có thể cài đặt CSDL, với file backup được cung cấp, mã nguồn đưa vào IIS. Thư mục website trỏ tới thư mục SS01.
PHẦN V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
KẾT LUẬN
Ngày nay, internet đã chở thành cuộc cách mạng lớn của nhân loại mà động lực của nó chính là sự phát triển kinh tế mang tính toàn cầu. Nhưng sự phát triển đó cũng đòi hỏi ngày càng nhiều cơ sở lưu trữ dữ liệu hơn dẫn đến việc khai thác hiệu quả dữ liệu trở nên khó khăn. Để nâng cao khả năng sử lý dữ liệu thì dữ liệu phải được chọn lọc trước. Một hướng chọn lọc dữ liệu hiểu quả đó là phân tích ngữ nghĩa của văn bản. Toàn bộ văn bản được cô đọng trong ngữ nghĩa của nó. Chính vì vậy nếu phân tích được ngữ nghĩa của văn bản chúng ta sẽ giảm được một khối lượng lớn câu chữ không hàm chứa thông tin.
Việc nghiên cứu ngữ nghĩa của văn bản mở ra một hướng phát triển mới trong khai thác thông tin trên dữ liệu. Ngữ nghĩa của văn bản mang lại nhiều thuận lợi như vậy nhưng để thật sự hiểu rõ được các phương pháp nghiên cứu phân tích ngữ nghĩa là không dễ dàng. Do vậy mục tiêu của đồ án đặt ra gồm hài vấn đề chính như sau:
Về lý thuyết: Mục tiêu tìm hiểu, nghiên cứu về ngữ nghĩa của văn bản bao gồm các phần như: Phân tích, tách văn bản thành tập từ khoá, lọc tách từ khoá của văn bản nhằm cô đọng những từ khoá đặc trưng cho ngữ nghĩa của văn bản, thống kê và trích lọc những văn bản có ngữ nghĩa tương đồng.
Về phần ứng dụng minh hoạ: Mục tiêu là xây dựng được một ứng dụng mang tính demo sự khả thi của các kỹ thuật phân tích ngữ nghĩa.
Nội dung của đề tài đưa ra khá rộng và chỉ được thực thiện trong vòng 4 tháng do vậy để hoàn tất đề tài này chúng em gặp rất nhiều khó khăn về mặt tìm kiếm tài liệu, đọc hiểu tài liệu và một số kỹ thuật để vận dụng kiến thức mình đã tìm hiểu được. Nhưng bù đắp lại những khó khăn vất vả đó là chúng em đã tiếp thu được rất nhiều kiến thức mới lạ và rất bổ ích về ứng dụng ngữ nghĩa của văn bản trong công nghệ thông tin – mở ra một hướng phát triển mới trong thế giớ công nghệ thông tin. Kết quả xứng đáng đó chính là chúng em đã hoàn thành được những mục tiêu, yêu cầu đề ra của đồ án.
Kết quả về mặt nghiên cứu
Qua quá trình nghiên cứu và tìm hiều về lĩnh vực ứng dụng ngữ nghĩa của văn bản, chúng em đã hiểu được và ghi nhận lại một số kết quả đạt được như sau:
Tìm kiếm được nhiều tài liệu hay và bổ ích về ngữ nghĩa của văn bản.
Nắm được các kỹ thuật phân tích ngữ nghĩa của văn bản, một hướng nghiên cứu mới nhất của công nghệ thông tin hiện tại và trong tương lai. Đông thời những ý tưởng mới xuất phát có thể mang lại nhiều lợi ích cho con người cũng như phát triển kinh tế. Kết quả đạt được khi nghiên cứu về ngữ nghĩa của văn bản như sau:
Nắm rõ các kỹ thuật tách văn bản với các định dạng bất kỳ.
Nắm vững các kỹ thuật lọc tách từ khoá đặc trưng cho nội dung văn bản.
Tìm hiểu và nắm được các kỹ thuật thống kê trích lọc những văn bản có ngữ nghĩa tương đồng.
Tìm hiểu các kỹ thuật phân tích logfile.
Kết quả về mặt phát triển ứng dụng
Đối với ứng dụng minh hoạ chúng em đã hoàn tất được mục tiêu của đồ án đề ra là nắm vững các kỹ thuật: Tổ chức, lưu trữ dữ liệu và truy vấn dữ liệu trên SQL. Cách sử dụng các kỹ thuật tách văn bản để tách văn bản ở định dạng bất kỳ thành các tập từ khoá đại diện cho ngữ nghĩa của nó. Cài đặt và phát triển kỹ thuật lọc từ khoá cho phép loại bỏ những từ khoá ít hàm chứa ngữ nghĩa của văn bản. Cài đặt và phát triển kỹ thuật LSA cho phép so sánh độ tương đồng ngữ nghĩa của các văn bản.
Về mặt chương trình kết quả thu được là hai phân hệ: Một phân hệ dành cho người sử dụng, một phân hệ dành cho người quản trị:
Đối với phân hệ người dùng: Hệ thống hỗ trợ việc tìm kiếm tài liệu và gợi ý tài liệu dựa trên ngữ nghĩa vủa văn bản. Cho phép người dùng đăng ký thành viên nhắm nâng cao khả năng hỗ trợ của hệ thông đối với người dùng.
Đối với phân hệ người quản trị: Hệ thống hỗ trợ việc cập nhập thông tin về các đối tượng trong hệ thống như thêm, sửa, xoá văn bản, thành viên, cấu hình hệ thống.
Sau khi hoàn tất ứng dụng chúng em còn nắm thêm được các kiến thức về công nghệ: .Net, JavaScript, SQLserver, quan trọng hơn cả là chúng em nắm được khả năng phân tích ngử nghĩa của văn bản, từ đó tự động trích rút được những văn bản đồng nghĩa.
Hướng phát triển
Vì thời gian phát triển đồ án không nhiều nên chúng em tập trung vào những vấn đề chính của đồ án đó là phân tích ngữ nghĩa của văn bản. Việc phát triển thuật toán so sánh độ tương đồng của văn bản và khai thác dữ liệu đã đạt được nhiều thành công. Dựa vào những thành quả đó chúng ta có thể mở ra những hướng mới nhằm tối ưu hoá thuật toán và nâng cao độ chính xác của kết quả. Đồng thời mở rộng nguồn dữ liệu nhờ trực tiếp tìm kiếm các dữ liệu trên mạng hay cải thiện tính năng tìm kiếm nhờ sử dụng các engine có sẵn. Dựa trên những khả năng phát triển đó, đồ án có thể hoàn thiện khi có thêm các tính năng sau:
Thu thập dữ liệu trực tuyến
Dữ liệu trực tuyến trên mạng là một tài nguyên gần như vô hạn. Nếu có một cơ chế cho phép khai thác dữ liệu trên mạng là đầu vào cho hệ thống thì các chức năng của hệ thống sẽ đạt hiệu quả cao và phong phú hơn. Hơn nữa, việc có một nguồn dữ liệu động như vậy thì công việc cập nhập dữ liệu sẽ không cần thiết, việc quả lý dữ liệu coi như tiến hành tự động. Tóm lại, hệ thống rất cần một module cho phép lấy dữ liệu trực tuyến. Đây chính là một hướng phát triển chủ chốt củ đồ án nhằm làm cho đồ án hoàn thiện hơn và có tính ứng dụng thực tế cao hơn.
Thông tin người dùng
Thông tin người dùng hiện tại ở các hệ thống website chỉ đơn thuần được tổ chức lưu trữ dưới dạng bảng dữ liệu. Thông tin người dùng chỉ đáp ứng vai trò xác thực trong hệ thống chưa góp phần thể hiện được nhu cầu của từng cá nhân. Việc nghiên cưa các thức tổ chức và lưu trữ thông tin người dùng hiệu quả sẽ đem lại một kết quả bất ngờ, giúp hệ thống có thể gợi ý tìm kiếm đối với từng các nhân người dùng. Đây cũng là một điển nhấn của thế hệ web mới, hướng tới cá nhân người dùng. Vậy cách thức tổ chức lưu trữ thông tin người dùng thế nào đó là một hướng mở ra của đồ án. Đồng thời việc thu thập thông tin người dùng thế nào cũng là một kỹ thuật cần phải nghiên cứu. Hiện tại chúng em chú ý tới hai cách thức thu thập thông tin người dùng. Một là thu thập tĩnh, dựa trên nhưng form đăng ký và feedback của người dùng. Hai là thu thập động, dựa trên các kỹ thuật trích lọc thông tin thông qua phân tích logfile.
Các kỹ thuật phân tích logfile đã được phát triển và ứng dụng ngay từ khi internet ra đời. Tuy nhiên tuỳ vào mục đích của hệ thống việc phân tích logfile có thể sử dụng những kỹ thuật khác nhau. Ở đây chúng em muốn nhấn mạnh tới một khả năng mà phân tích logfile có thể đáp ứng đó chính là thu thập thông tin người dùng. Phát triển một module cho phép quản lý thông tin người dùng rất có ích cho một hệ thông tìm kiếm, gợi ý. Hệ thông sẽ mang tính hướng người dùng hơn bởi những kết quả của hệ thống được lọc dựa trên thông tin quan tâm của người dùng.
Sử dụng search engine
Ngày nay, các kỹ thuật tìm kiếm không chỉ đạt độ chính xác cao mà còn đạt tốc độ cao. Tốc độ đó chính là tiêu chuẩn cạnh tranh cho các hệ thống tìm kiềm. Google đã nổi lên như là một site tìm kiếm toàn cầu với độ chính xác cao và nhanh. Không những thế Google còn cho phép các hệ thống khác sử dụng thành quả của nó đó chính là module search engine. Module này cho phép các hệ thống có thể lấy kết quả tìm kiếm một cách nhanh chóng dựa trên những tài nguyên mà máy chủ google cung cấp. Nếu hệ thống có thể sử dụng module này thì hiệu năng tìm kiếm sẽ được nâng cao hơn. Đây cũng chính là một hướng phát triển của hệ thống trong tương lai.
TÀI LIỆU THAM KHẢO
[1] Cải tiến giải thuật CYK cho bài toán phân tích cú pháp tiếng Việt -Đinh ThịPhương Thu, Huỳnh Quyết Thắng, Hoàng Vĩnh Sơn
[2] Gán nhãn từ loại cho tiếng Việt dựa trên văn phong - Nguyễn Quang Châu, Phan Thị Tươi, Cao Hoàng Trụ
[3] Kết hợp xử lý ngôn ngữ tự nhiên và mạng Kohonen để nâng cao khả năng gom cụm văn bản tiếng Việt -Đỗ Phúc, Mai Xuân Hùng, Nguyễn Thị Kim Phụng
[4] A case study of the probabilistic tagger QTAG for Tagging Vietnamese Texts Nguyen Thi Minh Huyen,Vu Xuan Luong, Le Hong Phuong
[5] Dinh Dien, Từ tiếng Việt, Vietnam National University, HCMC, Vietnam, 2000.
[6] Dinh Dien, Hoang Kiem, Nguyen Van Toan, Vietnamese Word Segmentation, The Sixth Natural Language Processing Pacific Rim Symposium, Tokyo, Japan 2001, pp749-756.
[7] Automata and Formal Language. An Introduction – Dean Kelley – Prentice Hall, Englewood Cliffs, New Jersey 07632.
[8] Compilers : Principles, Technique and Tools - Alfred V.Aho, Jeffrey D.Ullman - Addison - Wesley Publishing Company, 1986.
[9] Compiler Design – Reinhard Wilhelm, Dieter Maurer - Addison - Wesley Publishing Company, 1996.
[10] Design of Compilers : Techniques of Programming Language Translation - Karen A. Lemone - CRC Press, Inc, 1992.
[11] Modern Compiler Implementation in C - Andrew W. Appel - Cambridge University Press, 1997.
[12] Hoàng Văn Hành.1997. Ngữ nghĩa học – Các khuynh hướng và phương pháp phân tích ngữ nghĩa. Hà nội.
[13] PTS. Vương Tất Đạt . Logich hình thức. Trường Đại học Sư Phạm Hà Nội 1
[14] Đặng Thị Hưởng. Semantics, TP.Hồ Chí Minh 1997 (Tài liệu lưu hành nội bộ)
[15]. Trương Gia Vinh. Những bài giảng Cơ sở Ngôn ngữ học. BXB Đại Học mở Bán công TP.HCM.(Tài liệu lưu hành nội bộ)
[16]. Nguyễn Thiện Giáp (chủ biên) Dẫn luận Ngôn ngữ học. NXB Giáo dục. 2000
[17]. Trần Văn Cơ . Ngôn ngữ. Đại học sư phạm TP.Hồ Chí Minh.1986.
[18]. Roderick A. Jacobs. English syntax. A Grammar for English language professionals. Oxford American English.
[19]. A.S. Hornby. Guide to patterns and usage in English. Second edition.
Các file đính kèm theo tài liệu này:
- 6240.doc