SEARCH ENGINE MÃ MỞ LUCENE

Một phần của tài liệu xây dựng một công cụ tìm kiếm thực sự (Trang 59 - 106)

1. MỤC ĐÍC H

2.1. SEARCH ENGINE MÃ MỞ LUCENE

2.1.1. Giới thiệu Lucene

Với sự ra đời và phát triển không ngừng của Web, lượng tài liệu mà con người cần tổ chức, quản lý và khai thác gia tăng theo từng ngàỵ Để tìm kiếm những thông tin cần thiết trong kho các văn bản và trang Web này, các hệ thống tìm kiếm đã lần lượt được phát triển và thành công nhất là các hệ thống truy vấn theo từ khóạ

Tuy nhiên, phần lớn các công cụ tìm kiếm mạnh mẽ nhất hiện nay như Yahoo!,

Google, MSN và Socbay… là những sản phẩm thương mại và mã nguồn được giữ bí

mật. Điều này dẫn tới kết quả là nhiều nhà phát triển riêng biệt sẽ phải tự mình xây dựng từ ban đầu một công cụ tìm kiếm nếu hệ thống của họ cần cung cấp chức năng tìm kiếm. Đứng trước một sự lãng phí rất lớn về công sức lập trình, vào năm 1998 Doug Cutting đã bắt đầu tiến hành xây dựng thư viện truy vấn thông tin mã nguồn mở Lucene [6, 21] với mục tiêu phát triển nó thành một thư viện truy vấn tài liệu hoàn chỉnh cho phép các nhà phát triển ứng dụng dễ dàng tích hợp chức năng tìm kiếm vào hệ thống của mình.

Từ phiên bản đầu tiên 0.01 được công bố vào tháng 8 năm 2000, đến khi Lucene trở thành một dự án chính thức của tổ chức Apache Jakarta và bắt đầu được phát triển với sự đóng góp của rất nhiều lập trình viên trên thế giới, và cho đến thời điểm hiện nay, Lucene đã trở thành một thư viện truy vấn thông tin thật sự ổn định và hiệu quả. Lucene đã được sử dụng đế phát triển ứng dụng tìm kiếm ở hàng loạt các tổ chức và công ty như Hewlett-Packard, FedEx, Tạp chí New Scientist, MIT’s OpenCourseWare, từ điển bách khoa toàn thư Britannica, môi trường phát triển tích hợp Eclipse…

Sự thành công của Lucene có được là do nó đã cung cấp cho nhà phát triển những chức năng nổi bật sau đây:

- Là mã nguồn mở được thuần túy phát triển bằng Java, mà mọi người đều có quyền sử dụng và mở rộng.

- Cung cấp một giao diện lập trình đơn giản để phát triển ứng dụng tìm kiếm. - Loại bỏ các từ vô nghĩa (Stop-Word) và đưa về từ gốc (Stemming).

- Hỗ trợ cơ chế để xử lý các ngôn ngữ khác tiếng Anh.

- Cung cấp các chức năng truy vấn đặc biệt như theo nhóm từ, theo biểu thức Boolean, gần đúng, trên nhiều chỉ mục cùng lúc.

Một số ứng dụng tiêu biểu sử dụng Lucene là:

- Zeo: cho phép người dùng tìm kiếm trên toàn bộ nội dung email đã được lưu trữ.

- Web Nutch: động cơ tìm kiếm trên Web được phát triển bởi chính Doug Cutting và Apache Jakartạ

- KnowLEX EN: cung cấp chức năng tìm kiếm tài liệu trong bách khoa toàn thư Wikipediạ

- Aduna AutoFocus: cho phép người dùng tìm kiếm tài liệu trên cây thư mục của máy tính cá nhân.

- Kowari: cho phép quản lý và truy vấn cơ sở tri thức RDF. - KIM: hỗ trợ tìm kiếm tài liệu theo thực thể có tên.

2.1.2. Các phiên bản ngôn ngữ khác của Lucene

Ngôn ngữ phát triển chính của Lucene là Java, tuy nhiên Lucene đã được chuyển sang nhiều ngôn ngữ lập trình khác như:Net, C++, Perl, … Sau đâu là các ngôn ngữ đã được chuyển sang

Lucene4c - C CLucene - C++ MUTIS - Delphi NLucene - .NET LucenẹNet - .NET Plucene - Perl Pylucene - Python

Ferret and RubyLucene - Ruby

Zend Framework (Search) - PHP

Montezuma - Common Lisp

Apache LucenẹNet là một máy tìm kiếm C#. Apache LucenẹNet không phải là một ứng dụng hoàn chỉnh, mà giống là một thư viện và API hơn mà có thể sử dụng dễ dàng để thêm vào khả năng tìm kiếm của ứng dụng. Thông thường, để sử dụng LucenẹNet, người ta dùng những công cụ khác để làm công việc Crawler như chương trình download trang Web tự động như Teleport prọ. để download toàn bộ trang Web của một hoặc một số Site nào đấy về ổ cứng; sau đó, chương trình Lucene sẽ Index và

Search trên những trang Web được đưa về đó. Apache LucenẹNet biên dịch trên nền Microsoft .NET Framework 1.1

2.1.3. Vòng đời kiến trúc phần mềm Lucene

Phân tích Lucene dưới góc độ kiến trúc phần mềm, ta sẽ có mô hình phát triển vòng đời của Lucene là

Hình 19. Vòng đời của Lucene

Trong sơ đồ này, các thông tin về Lucene được đưa ra khá rõ ràng:

Người phát triển là các Developer và Operator, tổ chức phát triển là của Apachẹ Kiến trúc thiết kế ở đây là hướng đối tượng và thời gian thực. Yêu cầu chất lượng phần mềm là khả năng sẵn sàng cao, có thể được mở rộng, hiệu năng cao và đòi hỏi xử lý thời gian thực.

2.1.4. Sơ đồ phụ thuộc của LucenẹNet

Sơ đồ phụ thuộc của LucenẹNet so với nền tảng .Net FrameWork 1.1, Sử dụng công cụ REFLECTOR[13] plugin Graph

Hình 20. Sơ đồ phụ thuộc của Lucene với môi trường

Lucene

StakeHolders:

Developer & Operator

Developeing Organization: Apache Software Foundation Technical Environtments:

Java, .NET, C, C++ …

Architechtect’s Experience

Object – Oriented Design Real Time - Design

Requirements (Quanlities) High availability Openess - Free High Performance Real Time

2.1.5. Các lớp của LucenẹNet

Sử dụng công cụ phần tích AutoDiagrammer[13] là phần tích hợp vào REFLECTOR để phân tích mã nguồn của Lucene, ta được mô hình về số phần trăm lệnh code cho mỗi module

Hình 21. Biểu đồ phần trăm mã code cho module Lucene

Qua sơ đồ này, ta thấy phần lớn nỗ lực code là nằm ở phần thuật toán Search; tiếp theo là phần code cho Index. Phiên bản này của Lucene không bao gồm phần code cho Crawler nên phần ấy không có trong biểu đồ nàỵ

Phân tích các thành phần của mỗi Module và thành phần phụ thuộc của module ấy vào những thành phần khác hoặc phụ thuộc vào hệ thống, ta sẽ có bảng sau

Công cụ REFLECTOR Pulgin Analysis

STT Tên NameSpace Các hàm phụ thuộc STT

1 LucenẹNet - Support Class mscorlib 0

2 LucenẹNet.Analysis mscorlib 0

3 LucenẹNet.Analysis.Standard

LucenẹNet.Analysis.Analyzer 2

mscorlib 0

System 0

4 LucenẹNet.Documents LucenẹNet - Support Class 1

mscorlib 0

5 LucenẹNet.Index LucenẹNet.Analysis 2

LucenẹNet.Documents 4

LucenẹNet.Search 7

LucenẹNet.Util 10

LucenẹNet - Support Class 1

mscorlib 0

6 LucenẹNet.QueryParsers

LucenẹNet.Analysis 2

LucenẹNet.Index 5

LucenẹNet.Search 7

LucenẹNet - Support Class 1

mscorlib 0 7 LucenẹNet.Search LucenẹNet.Analysis 2 LucenẹNet.Documents 4 LucenẹNet.Index 5 LucenẹNet.Store 9 LucenẹNet.Util 10

LucenẹNet - Support Class 1

mscorlib 0 System.RuntimẹRemoting 0 8 LucenẹNet.Search.Spans LucenẹNet.Index 5 LucenẹNet.Search 7 LucenẹNet.Util 10 mscorlib 0

9 LucenẹNet.Store LucenẹNet - Support Class 1

mscorlib 0

10 LucenẹNet.Util LucenẹNet.Store 9

LucenẹNet - Support Class 1

Bảng 7. Danh sách phụ thuộc Module của Lucene

Từ bảng trên chúng tôi vẽ được sơ đồ phụ thuộc của các NameSpace trong Lucene

Hình 22. Sơ đồ phụ thuộc module của Lucene

Sơ đồ phục thuộc của Lucene so với mô hình cơ bản của Search Engine được nêu ở phần đầu thì nó chi tiết và đầy đủ hơn và vẫn thể hiện đúng so với mô hình chuẩn.

2.2. TIẾNG VIỆT TRONG XÂY DỰNG CÔNG CỤ TÌM KIẾM

Tiếng Việt thuộc ngôn ngữ đơn lập, phân tiết tính ngôn ngữ phân tích tính (các âm tiết được phát âm rời ra khỏi nhau, không có âm tiết nào chồng lên âm tiết nào)[1, 2, 28], mỗi một tiếng (âm tiết) được phát âm tách rời nhau và được thể hiện bằng một chữ viết. Đặc điểm này ảnh hưởng rõ rệt ở tất cả các mặt ngữ âm, từ vựng, ngữ pháp.

2.2.1. Đặc điểm của ngữ âm và âm vị

Mỗi âm tiết tiếng Việt gồm ba phần : phần đầu, phần sau và thanh điệu [1, 28]. Phần đầu của âm tiết được xác định là Âm đầu, vì ở vị trí này chỉ có một âm vị tham gia cấu tạọ Phần sau của âm tiết được gọi là phần Vần. Phần Vần gồm các loại âm vị được gọi là Âm đệm, Âm chính và Âm cuốị Thanh điệu có sáu loại ngang, hỏi, huyền, sắc, ngã, nặng. Thanh điệu được đặt ở trên nguyên âm trong âm tiết. Tuy nhiên phần Vần có thể có nhiều nguyên âm do vậy việc bỏ dấu ở nguyên âm nào là vấn đề đã được đặt ra từ lâu trong các hội thảo về chuẩn hóa ngôn ngữ và công nghệ thông tin- truyền thông. Ngoài ra, do sự có mặt của dấu phụ - các dấu không phải là thanh điệu, đi kèm với một số nguyên âm để tạo ra các nguyên âm mới ( Ví dụ: “^” với â, ê, ô hay “’” với ơ, ư…) - nên vị trí đặt thanh điệu cũng phải hòa hợp với các dấu phụ nàỵ

Như vậy tại sao cần phải chuẩn hóa ? Rõ ràng khi viết chữ, chỉ cần viết đúng các dấu thanh điệu, vị trí đâu cần quan tâm, ai cũng hiểu được kia mà ! Thật ra không phải vậy, khi nền Công nghệ thông tin phát triển, việc bỏ dấu chính xác chính là một phần trong quá trình lưu trữ các âm tiết, chữ viết trong các tài liệu điện tử và tất nhiên đòi hỏi một sự chính xác tuyệt đốị

Nói riêng trong các vấn đề của luận văn này, khi phân tách thuật ngữ, máy tính phải dựa vào từ điển. Nếu các thuật ngữ trong từ điển và thuật ngữ trong văn bản đầu vào không được lưu trữ theo cùng quy tắc thì việc đối sánh sẽ trả về kết quả không mong muốn. Ví dụ như khi máy tính tìm kiếm từ “hòa bình” trong từ điển tiếng Việt sẽ báo không có vì trong từ điển chỉ lưu trữ từ “hoà bình”. Vấn đề tương tự cũng xảy ra nếu không có sự chuẩn hóa i-ỵ Ví dụ như vật lý một từ dễ thấy trong các báo điện tử sẽ không có mặt trong từ điển tiếng Việt vì trong từ điển chỉ có từ “vật lí”. Các quy tắc chuẩn hóa về vị trí thanh điệu cũng như vấn đề i-y đã được một số nhà ngôn ngữ học đưa ra và nói chung đã được ngành ngôn ngữ học thống nhất. Nhưng trong các văn bản điện tử thì hiện tại chưa có được các chuẩn hóa nàỵ Bản thân các bộ gõ tiếng Việt

thường được dùng hiện nay như Vietkey hay Unikey cũng có các tùy chọn bỏ dấụ

Khi tìm hiểu các đặc trưng tiếng Việt ta cần chú ý tiếng Việt là một ngôn ngữ

đơn lập - đơn âm tiết (monosyllable). Xét về mặt từ pháp, trong tiếng Việt, hình vị là

từ. Bởi vì từ là đơn vị nhỏ nhất để đặt câu, từ có nghĩa hoàn chỉnh và cấu tạo ổn định [1, 3]. Từ được cấu thành bởi một đơn vị nhỏ hơn, chúng ta thường quen gọi là “tiếng” ( hay “chữ” - xét về mặt chữ viết, “âm tiết” - xét về mặt ngữ âm). Dựa trên “tiếng” - đơn vị rất dễ nhận biết thông qua các dấu cách - chúng ta phân biệt được đâu là từ ghép, đâu là từ đơn. Từ đơn là từ chỉ có một tiếng, từ ghép là từ có hai tiếng trở lên. Đây chính là vấn đề của các ngôn ngữ như tiếng Việt: đó là rất khó khăn để có thể phân tách đúng các từ trong câụ Cách tốt nhất là dựa trên từ điển để đối sánh và rút ra kết luận. Với con người, việc xác định xem đó có phải là một từ hay không đã có phương pháp như như khảo sát về hiện tượng tách, lặp, iếc hóa hay đối chiếu…[1], tuy nhiên các phương pháp này không thể áp dụng được đối với máy tính.

Xét về mặt hình thái, khác với phần lớn các ngôn ngữ hệ Ấn-Âu, tiếng Việt thường không có hiện tượng biến cách hay dẫn xuất khi câu thay đổi về thời, thể, cách. Thay vào đó là việc sử dụng kết hợp với hư từ (từ công cụ) để phản ánh sự thay đổi nàỵ

Hư từ là các từ cấu tạo bởi các tiếng được dùng độc lập, chỉ có ý nghĩa về mặt ngữ pháp. Ví dụ như : đã, sẽ, bị, chưa… Các hư từ này kết hợp với các thực từ - là các từ mang ý nghĩa thật sự về nghĩa - sẽ thực hiện nhiệm vụ phản ánh việc thay đổi về thời, thể, cách [1].

Ví dụ:

Tôi ăn cơm - Tôi đã ăn cơm - Tôi sẽ ăn cơm (hiện tại - quá khứ - tương lai). Ông ấy đánh - Ông ấy bị đánh (chủ động - bị động).

Lại xét về mặt từ pháp, trong các ngôn ngữ khác, việc thay đổi giống và số cũng được thực hiện thông qua việc biến cách, tuy nhiên trong tiếng Việt chúng ta sử dụng các danh từ chỉ số luợng để làm việc nàỵ

Ví dụ:

Một con vịt cái - các con vịt đực - loài vịt (Giống). Một con vịt - Những con vịt - Mười con vịt - lũ vịt (Số).

Điều này ảnh hưởng trực tiếp đến quá trình tiền xử lý văn bản cũng như đoán nhận ngữ nghĩạ Việc chuẩn hóa hình thái từ của các hệ tiếng Latin là cả một vấn đề trong khi đó tiếng Việt chúng ta không cần quan tâm đến. Ngược lại, khi xét đến ngữ nghĩa chúng ta phải thông qua các hư từ hay danh từ số lượng đi kèm để hiểu được nghĩa đầy đủ của một từ hay cụm từ.

Từ của tiếng Việt không biến đổi hình tháị Đặc điểm này sẽ chi phối các đặc

điểm ngữ pháp khác. Khi từ kết hợp từ thành các kết cấu như ngữ, câu, tiếng Việt rất

coi trọng phương thức trật tự từ và hư từ.

Việc sắp xếp các từ theo một trật tự nhất định là cách chủ yếu để biểu thị các quan hệ cú pháp. Trong tiếng Việt khi nói "Anh ta lại đến" là khác với "Lại đến anh

ta". Khi các từ cùng loại kết hợp với nhau theo quan hệ chính phụ thì từ đứng trước

giữ vai trò chính, từ đứng sau giữ vai trò phụ. Nhờ trật tự kết hợp của từ mà "củ cải" khác với "cải củ", "tình cảm" khác với "cảm tình". Trật tự chủ ngữ đứng trước, vị ngữ đứng sau là trật tự phổ biến của kết cấu câu tiếng Việt.

Phương thức hư từ cũng là phương thức ngữ pháp chủ yếu của tiếng Việt. Nhờ hư từ mà tổ hợp "anh của em" khác với ttổ hợp "anh và em", "anh vì em". Hư từ cùng với trật tự từ cho phép tiếng Việt tạo ra nhiều câu cùng có nội dung thông báo cơ bản như nhau nhưng khác nhau về sắc thái biểu cảm. Ví dụ, so sánh các câu sau đây:

- Ông ấy không hút thuốc. - Thuốc, ông ấy không hút. - Thuốc, ông ấy cũng không hút.

Ngoài trật tự từ và hư từ, tiếng Việt còn sử dụng phương thức ngữ điệụ Ngữ điệu giữ vai trò trong việc biểu hiện quan hệ cú pháp của các yếu tố trong câu, nhờ đó nhằm đưa ra nội dung muốn thông báọ Trên văn bản, ngữ điệu thường được biểu hiện bằng dấu câụ Chúng ta thử so sánh 2 câu sau để thấy sự khác nhau trong nội dung thông báo:

- Đêm hôm qua, cầu gãỵ - Đêm hôm, qua cầu gãỵ

2.2.4. Sự phức tạp trong mã hoá tiếng Việt

Do lịch sử áp dụng tiếng Việt vào công nghệ thông tin có từ rất lâu dài và có sự không thống nhất giữa các mã qua các thời kỳ mà hiện nay có rất nhiều mã khác nhaụ Tiếng Việt có tất cả 134 ký tự đặc thù Việt (kể cả chữ thường và chữ hoa). Ban đầu chúng ta dùng tiếng Việt với mã ASCII chỉ có 128 giá trị của phần mở rộng và không đủ để mã tất cả các chữ cái tiếng Việt. Do đó, có khác nhiều cách đề xuất nhằm mã hóa tiếng Việt trong khuôn khổ bảng mã 8-Bit. Không chỉ vậy, thói quen bỏ dấu cho từ của 2 miền Nam, Bắc cũng khác nhau nên đến tận bây giờ vẫn không thể thống nhất về bảng mã và bộ gõ và cách gõ được

TCVN3 (TCVN 5712-1993)[4] hay bộ gõ ABC, Việtkey khá nổi tiếng ở miền bắc với việc chỉ sử dụng chữ thường trong bảng mã, tức là chỉ cần 67 giá trị, còn chữ hoa được thể hiện bằng cách dùng phông chữ hoa thường được dùng ở miền Bắc.

VNI sử dụng giải pháp tổ hợp là dùng hai ký tự: ký tự nguyên âm và ký tự dấu ghép lồng vào nhaụ Ví dụ chữ ‘á’ được tạo thành bởi ký tự ‘a’ và ký tự dấu sắc (‘)

Một phần của tài liệu xây dựng một công cụ tìm kiếm thực sự (Trang 59 - 106)

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

(106 trang)
w