.6 Danh sách từ điển

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về dữ liệu đặc tả dùng cho quản lý văn bản điện tử trong các cơ quan nhà nước 04 (Trang 63)

Từ chủ chốt Tần suất banana 1 cranb 2 Hanna 2 hunger 1 manna 1 meat 1 potato 1 query 1 rye 2 sourdough 1 spiritual 1 wheat 2

Danh sách đảo ngƣợc (Inversion List)

Bƣớc cuối cùng trong việc xây dựng một IFS là kết hợp danh sách từ điển

với danh sách tài liệu để hình thành cái gọi là danh sách đảo ngược(inversion

list). Danh sách đảo ngƣợc sẽ trỏ đến một hoặc nhiều tài liệu tƣơng ứng khi một

truy vấn, danh sách đảo ngƣợc đƣợc xây dựng để có thể trỏ tới khu vực hoặc

phần trong tài liệu nơi mà từ chủ chốt (term) đƣợc sử dụng. Bảng 3.7 mô tả một

danh sách đảo ngƣợc bao gồm cả tài liệu và vị trí của từ chủ chốt (term) trong tài

liệu đó. Ví dụ, từ “wheat” sẽ xuất hiện đầu tiên trong tài liệu thứ 3 tại ví trí thứ 5 (từ thứ 5 ở trong dòng thứ 3).

Bảng 3.7 Danh sách đảo ngược

Từ chủ chốt Tài liệu/Vị trí banana (5,7) cranb (5,5);(6,4) Hanna (1,7);(8,2) hunger (9,4) manna (2,6) meat (7,6) potato (4,3) query (3,8) rye (3,3);(6,3) sourdough (5,5) spiritual (7,5) wheat (3,5);(6,6)

Danh sách đảo ngƣợc có thể trở nên phức tạp hơn khi máy tìm kiếm cần phải hỗ trợ việc tìm kiếm các cụm từ liên tục. Một cụm từ liên tục đƣợc dùng khi một nhóm từ kết hợp với nhau đƣợc yêu cầu bởi ngƣời dùng. Ví dụ, khi ta cần tìm kiếm một cụm từ “banana bread” có nghĩa là ta chỉ muốn tìm những tài liệu nào mà có từ “banana” đi liền ngay sau từ “bread”. Nếu một danh sách đảo ngƣợc lƣu trữ vị trí của mỗi từ, thì những chúng có thể đƣa ra đƣợc những quyết

định nhƣ vậy. Tất nhiên, đây là những tính năng hữu dụng và nhiều hệ thống có thể làm đƣợc, tuy nhiên để làm đƣợc điều đó thì các hệ thống phải đánh đổi bằng dung lƣợng lƣu trữ lớn hơn và sự tính toán phức tạp hơn.

Với một tập hợp các tài liệu, không chỉ có một hệ thống file đảo ngƣợc đƣợc tạo ra. Các IFS riêng biệt có thể đƣợc phát triển cho các vùng hay có phần khác nhau của tài liệu chẳng hạn nhƣ phần tiêu đề hay tóm tắt nội dung. Một hệ thống file đảo ngƣợc có thể đƣợc xây dựng chỉ cho phần các tác giả với một số

luật lệ đặc biệt nào đó chẳng hạn nhƣ không có danh sách phần cách (stop list).

Điều này cho phép ngƣời dùng có thể tìm kiếm nhanh hơn trên những trƣờng riêng biệt trong CSDL.

3.3.1.3. Các cấu trúc file khác

Bên cạnh phƣơng pháp IFS đƣợc dùng phổ biến trong việc xây dựng các chỉ mục, còn có các phƣơng pháp khác. Một trong số đó là phƣơng pháp

signature file trong đó các từ/khái niệm đƣợc chuyển đổi sang dạng các chuỗi

nhị phân (gọi là các chữ ký (signature)). Các từ từ chuỗi tìm kiếm cũng sẽ đƣợc

chuyển thành các signature và việc tìm kiếm sẽ là khớp các vị trí bit trong

signature với các signature (đã đƣợc tính trƣớc) của tài liệu. Theo một khía cạnh

nào đó, phƣơng pháp signature file sử dụng cách thức tiếp cận ngƣợc với

phƣơng pháp IFS. Trong khi IFS so sánh chuối tìm kiếm với các từ chủ chốt

(term) để tìm ra đƣợc tài liệu chính xác nhất thì signature file loại bỏ các những

tài liệu không khớp. Signature của chuỗi tìm kiếm sẽ đƣợc so sánh và những tài

liệu không khớp sẽ đƣợc loại bỏ. Những tài liệu còn lại sẽ đƣợc tìm kiếm để xem các từ trong chuỗi tìm kiếm có thực sự tồn tại trong những tài liệu này không.

Bảng 3.8 Minh họa chuyển đổi sang giá trị hệ cơ số 8 của các ký tự

Từ chủ chốt Giá trị của các ký tự trong hệ cơ số 8

Nor 116 157 162

her 150 145 162

hunger 150 165 156

Bảng 3.9 Cấu trúc của Block signature Từ chủ chốt f(c) = 2(c mod 8) Từ chủ chốt f(c) = 2(c mod 8) Nor 01 000 000 10 000 000 00 000 100 her 00 000 001 00 100 000 00 000 100 hunger 00 000 001 00 100 000 00 100 000 eased 00 100 000 00 000 010 00 001 000 Block Signature 01 100 001 10 100 010 00 101 100

Bảng 3.9 minh họa việc mã hóa một tài liệu (một câu) các từ theo kiểu block signature. Trong ví dụ này, 3 ký tự đầu tiên của mỗi từ đƣợc chuyển sang

một chuỗi 8 bit bằng một hàm băm f(c) = 2(c mod 8) với c là mã ASCII của các ký

tự tƣơng ứng trong hệ có số 8. Sau đó thực hiện phép toán logic OR giữa bốn signature để tạo ra một block signature cho toàn bộ câu (tài liệu).

Để thực hiện việc tìm kiếm, đầu tiên signature của từ cần tìm kiếm sẽ đƣợc tính toán. Sau đó để xem từ đó xuất hiện trong tài liệu nào, signature của từ cần tìm sẽ đƣợc so sánh với block signature của tất cả các tài liệu. Việc so sánh sẽ thực hiện bằng cách kiểm tra xem các bit 1 xuất hiện ở vị trí nào trong signature của từ cần tìm thì cũng phải xuất hiện tại vị trí tƣơng ứng trong block signature. Ví dụ, từ “her” trong bảng 3.9 có các bit 1 tại các vị trí 8, 11 và 22, nếu tài liệu có chứa từ “her” thì tại vị trí 8,11 và 22 trong block signature của tài liệu các bit phải có giá trị là 1.

Một biến thể khác của cấu trúc signature file là cấu trúc bitmap. Đây là một cấu trúc chỉ mục rất đơn giản. Trong phƣơng pháp này, mỗi từ chủ chốt (term) đƣợc lƣu trữ cùng một bitvector (Bảng 3.10). Trong bitvector này, vị trí các bit 1 chính là số định danh của tài liệu có chứa khái niệm (term) này. Ví dụ, từ “wheat” xuất hiện trong tài liệu 3 và 6 thì bitvector của từ này sẽ có bit ở vị trí 3 và 6 đƣợc thiết lập bằng 1.

Bảng 3.10 Các từ chủ chốt được lưu trữ cùng các bitvector

Từ chủ chốt Tài liệu/Vị trí bitvector

banana (5,7) 000 010 000 cranb (5,5);(6,4) 000 011 000 Hanna (1,7);(8,2) 100 000 010 hunger (9,4) 000 000 001 manna (2,6) 010 000 000 meat (7,6) 000 000 100 potato (4,3) 000 100 000 query (3,8) 001 000 000 rye (3,3);(6,3) 001 001 000 sourdough (5,5) 000 010 000 spiritual (7,5) 000 000 100 wheat (3,5);(6,6) 001 001 000

Với các tài liệu dài thì độ dài của các bitvector sẽ rất lớn, vì thế với phƣơng pháp bitmap sẽ cần một không gian lƣu trữ rất lớn để có thể thực hiện đánh chỉ mục cho một kho tài liệu lớn.

3.3.2. Máy tìm kiếm Lucene Search Engine 3.3.2.1. Tổng quan về Lucene Search Engine

Jakarta Lucene là một máy tìm kiếm văn bản có hiệu suất cao, đầy đủ các tính năng đƣợc viết hoàn toàn bằng ngôn ngữ Java. Đây là công nghệ thích hợp cho hầu hết mọi ứng dụng đòi hỏi việc tìm kiếm toàn văn (full-text), đặc biệt là tính không phụ thuộc vào nền tảng hệ điều hành (cross-platform).

cần 1MB heap. Kích thƣớc của dữ liệu đã index chỉ bằng 30% so với kích thƣớc của dữ liệu gốc.

 Lucene có khả năng tiềm kiếm trên nhiều cơ sở dữ liệu indexing khác

nhau

 Lucene có khả năng tìm kiếm dữ liệu phân tán trên mạng.

 Lucene đƣợc thiết kế để tạo thuận tiện cho việc thêm chức năng tạo chỉ

mục và tìm kiếm cho nhiều loại ứng dụng khác nhau, bao gồm:

 Email có khả năng tìm kiếm: Một ứng dụng email có thể cho phép

ngƣời sử dụng tìm kiếm các mẩu tin đã đƣợc lƣu trữ và thêm các mẩu tin mới vào chỉ mục khi chúng đến.

 Tìm kiếm tài liệu trực tuyến: Một chƣơng trình đọc tài liệu - dựa

trên CD, dựa trên Web hoặc đƣợc nhúng vào một ứng dụng – có thể cho phép ngƣời sử dụng tìm kiếm tài liệu trực tuyến hoặc các ấn bản đƣợc lƣu trữ.

 Các trang web có khả năng tìm kiếm: Một trình duyệt web có thể

xây dựng một công cụ tìm kiếm cá nhân để tạo chỉ mục cho mỗi trang web mà một ngƣời đã đến, cho phép ngƣời sử dụng dễ dàng mở lại các trang đó.

 Tìm kiếm website: Một chƣơng trình CGI có thể cho phép ngƣời sử

dụng tìm kiếm website của bạn.

 Tìm kiếm nội dung: Một ứng dụng có thể cho phép ngƣời sử dụng

tìm kiếm các tài liệu đã đƣợc lƣu trữ theo một nội dung cụ thể; chức năng này có thể đƣợc tích hợp vào hộp thoại Open Document.

Việc tạo ra và duy trì một chỉ mục đảo ngƣợc (inverted index) là công việc trọng tâm khi xây dựng một công cụ tìm kiếm từ khóa có hiệu quả. Để tạo chỉ mục cho một tài liệu, trƣớc tiên ta phải quét qua toàn bộ tài liệu đó để tạo ra một danh sách các postings. Các postings mô tả những lần xuất hiện của một từ ở trong một tài liệu; thông thƣờng một posting là một bộ giá trị bao gồm: <từ, khóa của tài liệu chứa từ, [(các) vị trí/tần số của từ ở trong tài liệu]> (<word,document-id>)

Nếu các postings là các bộ giá trị có dạng nhƣ trên thì một tập các tài liệu sẽ sinh ra một danh sách các postings đƣợc sắp xếp theo khóa của tài liệu. Nhƣng để tìm ra các tài liệu có chứa những từ cụ thể nào đó một cách hiệu quả, thay vào đó ta nên sắp xếp các postings theo từ ( hoặc vừa theo từ vừa theo khóa

của tài liệu sẽ khiến cho các hành động tìm kiếm đa từ nhanh hơn). Tóm lại, việc xây dựng một chỉ mục tìm kiếm về cơ bản là vấn đề sắp xếp và chỉ mục tìm kiếm là một danh sách các postings đƣợc sắp xếp theo từ.

3.3.2.2. Phƣơng pháp cài đặt cải tiến của Lucene

Hầu hết các công cụ tìm kiếm đều sử dụng các B-cây để duy trì chỉ mục; các B-cây này tƣơng đối ổn định xét theo phƣơng diện chèn và các đặc điểm I/O tốt ( các thao tác tìm kiếm và chèn đều có độ phức tạp thuật toán là O(log(n)). Trong khi đó, Lucene sử dụng một phƣơng pháp hợi khác: thay vì duy trì một chỉ mục đơn, nó tạo ra nhiều phân đoạn chỉ mục và trộn chúng lại theo chu kỳ. Đối với mỗi tài liệu đƣợc tạo chỉ mục, Lucene tạo ra một phân đoạn chỉ mục mới, nhƣng sau đó nó sẽ nhanh chóng trộn các phân đoạn nhỏ với các phân đoạn lớn hơn - điều này giữ cho tổng số các phân đoạn là nhỏ nhất có thể đƣợc do đó các thao tác tìm kiếm luôn nhanh chóng. Để tối ƣu hóa chỉ mục cho việc tìm kiếm nhanh, Lucene có thể trộn tất cả các phân đoạn lại thành một phân đoạn duy nhất, điều này có ích cho các chỉ mục đƣợc thƣờng xuyên cập nhật. Để ngăn ngừa các xung đột giữa các đối tƣợng đọc và ghi chỉ mục, Lucene không bao giờ thay đổi các phân đoạn ở cùng một chỗ, nó chỉ tạo ra những phân đoạn mới. Khi trộn các phân đoạn, Lucene ghi thông tin trên các phân đoạn cũ vào một phân đoạn mới và xóa đi các phân đoạn cũ – sau khi mọi đối tƣợng đọc chỉ mục đang hoạt động đã đóng nó lại. Phƣơng pháp này cung cấp cho các lập trình viên một khả năng linh hoạt cao trong việc đánh đổi giữa tốc độ tạo chỉ mục với tốc độ tìm kiếm, và đạt đƣợc các đặc điểm I/O mong muốn cho cả hai thao tác trộn và tìm kiếm.

Một phân đoạn của Lucene bao gồm một số tập tin:

1. Một chỉ mục từ điển chứa một từ đại diện cho mỗi 100 từ ở trong từ điển.

2. Một từ điển chứa một từ đại diện cho mỗi từ duy nhất. 3. Một tập tin chứa một đại diện cho mỗi posting.

Bởi vì Lucene không bao giờ cập nhật các phân đoạn trong cùng một chỗ, nên các phân đoạn đó có thể đƣợc lƣu trữ trong các tập tin bình thƣờng (không có cấu trúc) thay cho các B-cây phức tạp. Để việc truy xuất đƣợc nhanh, chỉ mục từ điển chứa các offset đến tập tin từ điển, và từ điển lƣu giữ các offset đến các tập tin chứa các posting. Lucene cũng cung cấp một số phƣơng pháp để nén các tập tin từ điển và posting – do đó giúp làm giảm thao tác I/O trên đĩa cứng.

3.3.2.3. So sánh - đánh giá khả năng của Lucene với các công cụ tìm kiếm khác

Cách tạo chỉ mục: tăng dần với cách tạo chỉ mục theo lô: Một vài công cụ tìm kiếm chỉ hỗ trợ cách tạo chỉ mục theo lô; một khi chúng đã tạo ra một chỉ mục cho một tập các tài liệu, việc thêm vào các tài liệu mới sẽ trở nên khó khăn nếu nhƣ không tạo lại chỉ mục cho toàn bộ các tài liệu. Cách tạo chỉ mục tăng dần cho phép việc thêm các tài liệu vào một chỉ mục có sẵn đƣợc dễ dàng. Đối với một số ứng dụng, cách tạo chỉ mục tăng dần có ý nghĩa quan trọng. Lucene hỗ trợ cả hai cách tạo chỉ mục này.

Các nguồn dữ liệu: Nhiều công cụ tìm kiếm chỉ có thể tạo chỉ mục cho các tập tin hoặc các trang Web. Điều này cản trở các ứng dụng mà dữ liệu đƣợc tạo chỉ mục đƣợc lƣu trong một cơ sở dữ liệu, hoặc nhiều tài liệu ảo tồn tại trong một tập tin, chẳng hạn nhƣ tập tin dạng ZIP. Lucene cho phép các lập trình viên cung cấp tài liệu cho đối tƣợng tạo chỉ mục thông qua một đối tƣợng String hoặc một đối tƣợng InputStream, điều này cho phép nguồn dữ liệu đƣợc tách ra khỏi dữ liệu. Tuy nhiên, với phƣơng pháp này, lập trình viên phải cung cấp các đối tƣợng đọc thích hợp với dữ liệu.

Kiểm soát việc tạo chỉ mục:

Các định dạng tập tin: Một số công cụ tìm kiếm chỉ có thể tạo chỉ mục cho các tài liệu dạng văn bản TXT hoặc HTML; một số công cụ khác hỗ trợ một cơ chế lọc giúp cung cấp một cách đơn giản để tạo chỉ mục cho các tài liệu xử lý từ, các tài liệu SGML, và các định dạng tập tin khác. Lucene hỗ trợ một cơ chế nhƣ vậy.

Tạo thẻ cho nội dung: Một số công cụ tìm kiếm xem tài liệu nhƣ là một luồng liên tục các từ; một số công cụ khác xem tài liệu gồm nhiều trƣờng dữ liệu, chẳng hạn nhƣ “tiêu đề”, “tóm tắt”, “tác giả” và “nội dung”. Điều này cho phép tạo ra các câu truy vấn giàu nội dung ngữ nghĩa hơn chẳng hạn nhƣ “tác giả có chứa Hamilton và nội dung có chứa Constitution”. Lucene hỗ trợ việc tạo thẻ cho nội dung bằng cách xem tài liệu nhƣ là một tập hợp bao gồm nhiều trƣờng, và hỗ trợ các câu truy vấn có chỉ ra những trƣờng nào dùng để tìm kiếm.

Xử lý các stop words: Các từ phổ biến, chắng hạn nhƣ “a”, “and”, và “the” là những từ có tần số xuất hiện cao trong một tài liệu và có giá trị rất ít trong một chỉ mục tìm kiếm. Nhƣng bởi vì các từ này quá phổ biến nên nếu nhƣ ta thêm chúng vào chỉ mục sẽ làm tăng đáng kể thời gian tạo chỉ

mục và kích thƣớc của chỉ mục. Hầu hết các công cụ tìm kiếm sẽ không tạo chỉ mục cho một số từ nào đó, đƣợc gọi là stop words. Một số công cụ sử dụng một danh sách các stop words, trong khi một số công cụ khác chọn các stop word một cách có thống kê. Lucene xử lý các stop words thông qua đối tƣợng tổng quát Analyzer và cung cấp lớp StopAnalyzer, lớp này sẽ loại bỏ các stop words từ dòng dữ liệu đầu vào.

Stemming: Thông thƣờng, một ngƣời sử dụng muốn trong một câu truy vấn cho một từ nào đó cũng so khớp với những từ gần giống với từ đó. Thí dụ, một câu truy vấn cho từ “jump” đồng thời cũng sẽ so khớp với các từ “jumped”, “jumper”, hoặc “jumps”. Việc rút gọn một từ trở về dạng gốc của nó đƣợc gọi là stemming. Lucene chƣa cài đặt cơ chế stemming, nhƣng ta có thể dễ dàng thêm vào một đối tƣợng thực hiện việc này thông qua một lớp Analyzer phức tạp hơn.

Các loại câu truy vấn: Một số công cụ tìm kiếm hỗ trợ nhiều loại câu truy vấn khác nhau. Một số hỗ trợ các câu truy vấn Boolean đầy đủ; một số khác chỉ hỗ trợ các câu truy vấn AND. Một số công cụ trả về một tỉ lệ “thích ứng” với mỗi kết quả trả về. Một số công cụ có thể xử lý các câu truy vấn về độ liền kề, ví dụ “search theo sau bởi engine” hoăc “Knicks

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu về dữ liệu đặc tả dùng cho quản lý văn bản điện tử trong các cơ quan nhà nước 04 (Trang 63)

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

(78 trang)