1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx

76 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung
Tác giả Nguyễn Hùng Anh
Người hướng dẫn Ths. Thạc Bình Cường, Ths. Lương Thanh Bình
Trường học Hà Nội
Thể loại đồ án tốt nghiệp
Năm xuất bản 2008
Thành phố Hà Nội
Định dạng
Số trang 76
Dung lượng 1,56 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1 Lọc và phân loại dữ liệu trên Web Ứng dụng xây dựng hệ quản trị nội dung PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP 1 Mục đích nội dung của ĐATN Xây dựng các luật và thuật toán để lọc và phân loại dữ liệu[.]

Trang 1

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

1 Mục đích nội dung của ĐATN

Xây dựng các luật và thuật toán để lọc và phân loại dữ liệu trên Web, từ đó xây dựng mộtứng dụng về hệ quản trị nội dung(CMS), cụ thể là hệ thống tìm kiếm việc làm trực tiếp

2 Các nhiệm vụ cụ thể của ĐATN

 Xây dựng các luật để lọc dữ liệu từ các trang web

 Sử dụng công cụ Lucene để phân loại dữ liệu đã được lọc dựa trên các từ khóa

 Thiết kế, thử nghiệm và triển khai ứng dụng

3 Lời cam đoan của sinh viên:

Tôi - NGUYỄN HÙNG ANH - cam kết ĐATN là công trình nghiên cứu của bản thân tôi

dưới sự hướng dẫn của thầy giáo Ths Thạc Bình Cường và đồng hướng dẫn Ths Lương Thanh Bình

Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn của bất kỳcông trình nào khác

Hà Nội, ngày 20 tháng 5 năm2008

Tác giả ĐATN

Nguyễn Hùng Anh

4 Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảovệ:

Hà Nội, ngày tháng 5 năm2008

Giáo viên hướng dẫn

Ths Thạc Bình Cường

Trang 2

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP

Hiện nay khi xã hội ngày càng phát triển, nhu cầu việc làm của con người trở nên bứcthiết Các nhà tuyển dụng thì mong muốn tìm được các ứng viên phù hợp với công việccủa mình, trong khi những người tim việc cũng muốn tìm những công việc phù hợp vớinăng lực của mình Nhưng để các nhà tuyển dụng và người tìm việc đến với nhau quả thậtkhông dễ dàng, nhất là trong thời buổi thông tin có quá nhiều như hiện nay

Muốn giải quyết vấn đề trên, ta cần có một hệ thống trung gian phục vụ cho việc lấycác thông tin công việc của các nhà tuyển dụng và truyền đạt các nội dung đó đến nhữngngười tìm việc

Đồ án này đã xây dựng và cài đặt được hệ thống quản trị nội dung(CMS) mà cụ thể là

hệ thống tìm kiếm việc làm trực tiếp bao gồm hai chức năng chính đó là thu thập thông tin

về công việc từ các nhà tuyển dụng và phân loại các công việc đó để phục vụ nhu cầu tìmkiếm việc làm của các ứng viên Để thực hiện điều này thì đồ án đã tập trung xây dựng cáctập luật để lọc thông tin mà cụ thể là thông tin về nội dung công việc từ các trang web đăngtin tuyển dụng, đồng thời tìm hiểu và vận dụng công cụ đánh chỉ mục và tìm kiếm Lucene

để phân loại thông tin đã lọc được dựa trên các từ khóa

Trang 3

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

ABSTRACT OF THESIS

In the developing world of today, there is a huge need for job hunting amongs peopleand people While recruiters want to employ suitable candidates for their vacancies, jobseekers also hope to find good jobs that they have ability to do

However, there is a lot of difficulties in matching these job seekers with recruitersseeking such suitabe employees, especially in the world of so much information thatavailable

A job search system to connect recruiters to job seekers is needed to solve theproblem This tool gets information from recruiters then supply them to job seekers

This thesis has built and set up Content Management System(CMS), namedsupplydirect system search with two main following functions The first is gatheringinformation from recruiters about jobs and requirements The second is sorting these jobs

by what candidates want In order to do so, the essay focuses on build the rules that scrapesinformation about jobs from job search sites It search and apply the tool called Lucene tosorted information based on key words

Trang 4

MỤC LỤC

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP 1

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP 2

MỤC LỤC 4

DANH MỤC CÁC HÌNH VẼ 7

DANH MỤC CÁC BẢNG 8

DANH MỤC CÁC TỪ VIẾT TẮT 9

MỞ ĐẦU 11

Chương 1: Tổng quan 12

1.1 Giới thiệu chung 12

1.1.1 Hệ quản lí nội dung là gì? 12

1.1.2 Lợi ích của việc sử dụng hệ quản lí nội dung 12

1.1.3 Các sản phẩm quản lí nội dung- so sánh tính năng 14

1.1.4 Kết luận 14

1.2 Mô tả bài toàn 14

1.2.1 Vai trò của công nghệ thông tin trong việc tìm kiếm thông tin có chọn lọc 14

1.2.2 Bài toán cần xây dựng 15

1.3 Phương pháp giải quyết bài toán 15

1.3.1 Bài toán dựa trên Internet, www 15

1.3.2 Công cụ tìm kiếm Lucene 16

1.3.3 Công cụ crawler chuyên thu thập các trang web 17

Chương 2: Lọc và phân loại dữ liệu 18

2.1 Giới thiệu về các hệ thống khai thác thông tin 18

2.2 Lucene- Công cụ đánh chỉ mục và tìm kiếm 19

2.2.1 Giới thiệu về Lucene 19

2.2.1.1 Lucene làm được gì? 19

2.2.1.2 Đánh chỉ mục và tìm kiếm 20

2.2.1.2.1 Thế nào là đánh chỉ mục, tại sao nó lại quan trọng 20

2.2.1.2.2 Thế nào là tìm kiếm 20

2.2.1.3 Lucene in Action: tạo một ứng dụng mẫu 20

2.2.1.3.1 Tạo một chỉ mục 20

2.2.1.3.2 Tìm kiếm một chỉ mục 21

2.2.1.4 Tìm hiểu các lớp cơ bản trong Indexer 23

2.2.1.4.1 IndexWriter 23

2.2.1.4.2 Thư mục (directory) 23

2.2.1.4.3 Bộ phân tích (analyzer) 23

2.2.1.4.4 Bản ghi (document) 23

2.2.1.4.5 Trường(Field) 24

2.2.1.5 Tìm hiểu các lớp cơ bản trong bộ tìm kiếm 25

2.2.1.5.1 IndexSearcher 25

2.2.1.5.2 Thuật ngữ 25

2.2.1.5.3 Truy vấn 25

2.2.1.5.4 Hits 25

2.2.2 Đánh chỉ mục(Indexing) 25

2.2.2.1 Tìm hiểu quá trình đánh chỉ mục 25

2.2.2.1.1 Chuyển thành văn bản 25

2.2.2.1.2 Phân tích(analysis) 26

2.2.2.1.3 Viết chỉ mục 27

2.2.2.2 Các thao tác đánh chỉ mục cơ bản 27

2.2.2.2.1 Thêm các bản ghi vào một chỉ mục 27

2.2.2.2.2 Xóa các bản ghi ra khỏi chỉ mục 28

Trang 5

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

2.2.2.2.3 Cập nhập một bản ghi vào chỉ mục 29

2.2.2.3 Độ tin cậy Các bản ghi và các Trường 31

2.2.2.4 Kiểm soát quá trình đánh chỉ mục 31

2.2.2.4.1 Điểu chỉnh hiệu năng đánh chỉ mục 31

2.2.2.4.2 Đánh chỉ mục trong bộ nhớ: RAMDirectory 31

2.2.3 Tìm kiếm trong ứng dụng 34

2.2.3.1 Thực thi một chức năng tìm kiếm đơn giản 34

2.2.3.1.1 Tìm kiếm với thuật ngữ cụ thể 35

2.2.3.1.2 Phân tích(parse) một truy vấn được nhập vào bởi người dùng:

QueryParser 35

2.2.3.2 Sử dụng IndexSearcher 37

2.2.3.2.1 Làm việc với Hits 38

2.2.3.3 Tạo các đối tượng truy vấn 38

2.2.3.3.1 Tìm kiếm bằng thuật ngữ: TermQuery 38

2.2.3.3.2 Nối các truy vấn: BooleanQuery 39

2.2.3.3.3 Tìm kiếm theo cụm từ: PhraseQuery 39

2.2.3.3.4 Tìm kiếm theo Widcard: WildcardQuery 40

2.2.3.3.5 Tìm kiếm dựa vào các thuật ngữ tương đồng: FuzzyQuery 41

2.2.4 Phân tích 41

2.2.4.1 Sử dụng các bộ phân tích 42

2.2.4.1.1 Phân tích trong quá trình đánh chỉ mục 42

2.2.4.1.2 Phân tích QueryParser 43

2.2.4.2 Tìm hiểu bộ phân tích 43

2.2.4.2.1 Thế nào là từ tố (token) 43

2.2.4.2.2 Các bộ phân tích 44

2.2.4.3 Sử dụng các bộ phân tích có sẵn 45

2.1.4.3.1 StopAnalyzer 46

2.2.4.3.2 StandardAnalyzer 46

Chương 3: Phân tích hệ thống 47

3.1 Giới thiệu về hệ thống cần xây dựng 47

3.1.1 Giới thiệu chung về hệ thống 47

3.1.2 Mô hình hệ thống 47

3.2 Phương thức thực hiện chương trình 50

3.2.1 Giới thiệu cách xử lý đa luồng 50

3.2.2 Thiết kế 50

3.2.3 Phần tử công việc (Work Item) 51

3.2.4 Hàng làm việc (WorkQueue) 51

3.2.5 Luồng tài nguyên công việc (WorkThreadPool) 52

3.2.6 Quản lý ngoại lệ 53

3.2.7 Ứng dụng của xử lý đa luồng vào bài toán tìm việc trực tiếp 54

3.2.7.1 Lấy chi tiết link từ các trang web 54

3.2.7.2 Lấy nội dung của công việc từ một trang HTML 55

3.2.7.3 Phân loại dữ liệu 56

Chương 4: Thiết kế hệ thống 57

4.1 Thiết kế giao diện cho hệ thống 57

4.1.1 Cấu trúc của trang(sitemap) 57

4.1.2 Giao diện cho người tìm việc 58

4.1.2.1 Giao diện chính 58

4.1.2.2 Trang chủ 58

4.1.2.3 Đăng ký, đăng nhập, thay đổi mật khẩu 60

4.1.3 Giao diện cho các nhà tuyển dụng 61

Trang 6

4.1.3.1 Quản lý thông tin về công ty 61

4.1.3.2 Quản lý các chi nhánh của công ty 61

4.1.3.3 Tạo một chi nhánh mới 62

4.2 Thiết kế cơ sở dữ liệu 62

4.2.1 Thiết kế các quan hệ trong hệ thống 62

4.2.1.1 Quản lý người dùng 62

4.2.1.2 Thông tin về vị trí 63

4.2.1.3 Các luật lọc 64

4.2.1.4 Phân loại công việc 64

4.2.2 Thiết kế các lớp, các bảng 65

4.2.2.1 Bảng lưu thông tin người tìm việc 65

4.2.2.2 Bảng lưu thông tin danh sách công việc 66

4.2.2.3 Bảng lưu các công việc và thông tin liên quan sau khi phân loại (Web_JobPosting) 67

4.2.2.4 Bảng lưu các tập luật(Scrape_FieldScrapeRule) 68

4.2.2.5 Bảng lưu các từ khóa 69

Chương 5: Cài đặt hệ thống- kết quả thu được 70

5.1 Cài đặt và triển khai thử nghiệm ứng dụng 70

5.1.1 Cài đặt và triển khai phần mềm tìm kiếm việc làm trực tiếp 70

5.1.2 Cài đặt ứng dụng web cho hệ thống tìm kiếm việc làm 70

5.2 Một số kết quả chương trình 71

5.2.1 Kết quả của phần xử lý 71

5.2.2 Các dịch vụ cho người quản trị(admin) 72

5.2.3 Các dịch vụ cho người tìm việc 73

Chương 6: Đánh giá và hướng phát triển 75

6.1 Tổng hợp đánh giá các kết quả 75

6.2 Hướng phát triển 75

Chương 7: Tài liệu tham khảo 76

Trang 7

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

DANH MỤC CÁC HÌNH VẼ

Hình 1: Các ứng dụng tiêu biểu tích hợp Lucene 19

Hình 2: Đánh chỉ mục với Lucene chia thành 3 thao tác: chuyển dữ liệu thành văn bản, phân tích dữ liệu đó và lưu chúng vào chỉ mục(index) 26

Hình 3 : Quá trình khởi tạo bộ đệm 31

Hình 4: Một ứng dụng đa luồng sử dụng nhiều RAMDirectory cho việc đánh chỉ mục song song 34

Hình 5: Luồng từ tố với thông tin vị trí và độ dài từ tố(offset) 44

Hình 6: Mô hình hệ thống cần xây dựng 48

Hình 7: Xử lý kiểu đường ống 51

Hình 8: Cấu trúc của trang 57

Hình 9: MainNavigation 58

Hình 10: Trang chủ 59

Hình 11: Đăng ký đăng nhập, thay đổi mật khẩu 60

Hình 12: Quản lý thông tin về công ty 61

Hình 13: Quản lý các chi nhánh công ty 61

Hình 14: Tạo chi nhánh mới 62

Hình 15: Thông tin về vị trí 63

Hình 16: Các luật lọc 64

Hình 17: Phân loại công việc 64

Hình 18: Các dịch vụ cho người quản trị hệ thống 73

Hình 19: Các dịch vụ mà người tìm việc được cung cấp 74

Trang 8

DANH MỤC CÁC BẢNG

Bảng 1 So sánh các tính năng của các hệ CMS phổ biến 14

Bảng 2 Các đặc trưng của trường 24

Bảng 3 Các lớp API của Lucene 35

Bảng 4 Ví dụ về các biểu thức mà QueryParser xử lý 37

Bảng 5 Các phương thức tìm kiếm chính của IndexSearcher 38

Bảng 6 Phương thức Hits cho hiệu quả truy xuất kết quả tìm kiếm 38

Bảng 7 Các bộ phân tích chính trong Lucene 46

Bảng 8 Bảng lưu thông tin người tìm việc 65

Bảng 9 Bảng lưu thông tin danh sách công việc 66

Bảng 10 Bảng lưu công việc sau khi phân loại 67

Bảng 11 Bảng lưu các tập luật 68

Bảng 12 Bảng các từ khóa 69

Trang 9

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

DANH MỤC CÁC TỪ VIẾT TẮT

VIẾT TẮT TỪ GỐC Ý NGHĨA

CSDL Cơ Sở Dữ Liệu Cơ sở dữ liệu

XML Extensible Markup Language Ngôn ngữ định dạng mở rộng URL Uniform Resource Locator

UDDI Universal Description

Discovery and Integration Mô tả, tích hợp và tìm kiếm toàn cầu WSDL Web Service Description

Language

Ngôn ngữ đặc tả Web service

HTML Hyper Text Markup

Languege Ngôn ngữ đánh dấu văn bản CMS Content Management

System

Hệ quản trị nội dung

Trang 10

LỜI CẢM ƠN

Để có thể hoàn thành tốt đồ án này, trước hết cho em gửi lời cảm ơn chân

thành nhất đến thầy giáo, Ths.Thạc Bình Cường –bộ môn Công nghệ phần mềm,

khoa Công nghệ thông tin, Trường đại học Bách khoa Hà nội – người đã giànhnhiều tâm huyết, thời gian hướng dẫn, chỉ bảo em trong suốt thời gian làm đồ án

Em cũng xin gửi lời cảm ơn chân thành đến cô giáo đồng hướng dẫn

Ths.Lương Thanh Bình người đã rất nhiệt tình hướng dẫn em trong thời gian thực

tập tốt nghiệp và làm đồ án, những ý kiến của cô đã góp phần không nhỏ để em xâydựng nên đồ án này

Em xin cảm ơn các thầy cô trong khoa Công nghệ thông tin và các thầy côtrong trường Đại học Bách Khoa Hà Nội, những người đã dìu dắt em trong suốtnăm năm qua Cảm ơn các bạn trong lớp CNPM đã đóng góp ý kiến cho đồ án này,

đặc biệt là bạn Phạm Minh Tuấn

Tác giả: Nguyễn Hùng Anh

Trang 11

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

MỞ ĐẦU

Trong thời đại ngày nay- thời đại của kỷ nguyên của công nghệ thông tin thìcông nghệ thông tin đóng vai trò là trung tâm của cả xã hội trên tất cả mọi mặt củađời sống xã hội Đối tượng chính của công nghệ thông tin chính là thông tin vì vậyphải vấn đề là phải làm sao để quản lý và sử dụng chúng một cách hợp lý và hiệuquả nhất Hiện nay các thông tin đã và đang được thu thập thật khổng lồ vượt quatầm quản lý và kiểm soát không chỉ đối với từng xí nghiệp, doanh nghiệp mà cònvượt quá tầm quản lý của các ứng dụng mang tính chia sẻ cho toàn xã hội, khôngnhững khổi lượng thông tin vô cùng to lớn mà còn vô cùng phong phú đa dạng Dovậy bài toán quản lý nội dung thông tin là cấp thiết và mang ý nghĩa thực tiễn lớn.Một trong những ứng dụng cụ thể của bài toán quản lý thông tin là ứng dụng tìmkiếm việc làm trực tiếp

Việc làm là mối quan tâm hàng đầu của mọi người trong thời điểm hiện nay,các nhà tuyển dụng muốn tuyển cho công ty mình những người có năng lực để phục

vụ tốt cho sự phát triển của công ty, trong khi những người tìm việc lại muốn tìmđược những công việc tốt, phù hợp với chuyên môn của mình Vì thế cần phải có cơchế thích hợp để lấy thông tin từ nhà tuyển dụng cung cấp cho cho những người tìmviệc, đó là cơ chế lọc và phân loại thông tin Chính vì vậy tác giả đã phát triển đề tài

“Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung” nhằmlàm cầu nối cho các nhà tuyển dụng với những người tìm việc

Trang 12

Chương 1: Tổng quan

1.1 Giới thiệu chung

Sự bùng nổ của kỉ nguyên Internet đã dẫn tới một nhu cầu rất lớn, đó là nhucầu tìm kiếm , khai thác và trao đổi thông tin trên mạng internet Các website xuấthiện ngày càng nhiều, do đó cũng gia tăng một nhu cầu mới: nhu cầu quản lý, khaithác và trao đổi thông tin trên mạng Internet Những giải pháp quản trị nôi dungInternet được phát triển và ngày càng được chuẩn hóa, giúp cho các tổ chức, doanhnghiệp thuận tiện hơn trong việc xuất bản cũng như khai thác thông tin

Trong môi trường liên kết và tương tác cao như môi trường internet, việc nhậnthức và phát triển một ứng dụng theo tiêu chẩn chung của quốc tế, có khả năngtương tác cao với các hệ thống khác là một yếu tố hết sức quan trọng và cần thiết

1.1.1 Hệ quản lí nội dung là gì?

Hệ quản trị nội dung, cũng được gọi là hệ thống quản lý nội dung hay CMS

(từ Content Management System của tiếng Anh) là phần mềm để tổ chức và tạo môi

trường cộng tác thuận lợi nhằm mục đích xây dựng một hệ thống tài liệu và các loạinội dung khác một cách thống nhất Mới đây thuật ngữ này liên kết với chương

trình quản lý nội dung của website Quản lý nội dung web (web content

management) cũng đồng nghĩa như vậy.

Có rất nhiều sản phẩm khác nhau được cho là cung cấp khả năng quản lý nộidung, song khái niệm còn chưa được rõ ràng Phần lớn các giải pháp quản lý nộidung tập trung vào việc đề xuất, khảo sát/chấp nhận và triển khai, song các tínhnăng thường thay đổi theo sản phẩm Một số giải pháp tập trung vào việc phân phốitrang (page delivery), cũng như là tính năng cá nhân hoá Nhiều sản phẩm trong số

đó được tuyên bố là theo "các chuẩn mở" và tích hợp với tất cả mọi thứ "trên thếgiới này"

Nội dung ở một Website là tài sản có giá trị Nội dung phải được cập nhậtthường xuyên để cho khách thăm quan quay trở lại Một hệ thống quản lý nội dung

sẽ cho phép bạn tập trung vào việc tạo ra nội dung có chất lượng trong khi tự độnghoá một số công việc vận hành Bạn có thể giảm chi phí vận hành, tăng mức độthường xuyên của việc cập nhật nội dung, và tăng cường chất lượng và số lượng củanội dung được giới thiệu trên Website của bạn

1.1.2 Lợi ích của việc sử dụng hệ quản lí nội dung

Nhiều công ty quan tâm đến việc tìm một công cụ mà nó có thể tự động hoácác quá trình quản lý nội dung và tăng hiệu suất của những người cộng tác không cóchuyên môn về kỹ thuật Lợi ích lớn nhất của việc quản lý nội dung là ở chỗ nhữngngười sử dụng không có chuyên môn về kỹ thuật có thể gửi nội dung mà không cầnphải vượt qua những đoạn đường hẹp dễ bị tắc nghẽn vì lý do kỹ thuật Điều này rấtquan trọng đối với những môi trường chịu áp lực về thời gian và các Website màkhách hàng tự điều khiển Những lợi ích cơ bản khác bao gồm tự động hoá việcchấp nhận và triển khai nội dung Nhìn chung, những nội dung này có thể đượcphân nhóm theo các loại:

Quản lý tài sản Web

 Nội dung có thể có xuất xứ từ nhiều nguồn khác nhau bao gồm cả tài sản tệp

và tài sản cơ sở dữ liệu Bạn thậm chí có thể tích hợp với những tài sản từ hệ

Trang 13

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

thống truyền thống hay các dịch vụ cung cấp các bài báo, tin tức qua một tổ chứcchung

 Một số sản phẩm cho phép chúng ta lưu trữ nội dung ở cả Ngôn ngữ Đánhdấu Mở rộng (XML) và các cơ sở dữ liệu có liên quan XML cung cấp nhiềutính linh hoạt Các cơ sở dữ liệu quan hệ cung cấp tính bảo mật, tính đồng thời,bình thường hoá, và những lợi ích khác Cả hai đều cho phép sự phân tách nộidung từ nội dung được trình bầy

 Các tác giả nội dung có thể thường xuyên sử dụng công cụ lựa chọn của họkhi xây dựng nội dung

 Phần mềm quản lý nội dung có thể tự động hoá việc thiết lập và lưu giữ siêu

dữ liệu (metadata), tính năng cho phép các công ty tổ chức nội dung và cải tiếnviệc tìm kiếm của khách hàng

 Nhiều giải pháp quản lý nội dung cung cấp một giao diện người sử dụng chocác nhiệm vụ quản lý Bạn có thể tự động hoá việc thiết lập và ấn định danh sáchcông việc, khai báo e-mail, và chấp thuận Các nhiệm vụ có thể được chỉ địnhcho các cá nhân hay các nhóm Các nhiệm vụ có thể được bắt đầu bằng tay (ví

dụ, Joe, hãy viết thông cáo báo chí này để tuyên bố việc phá sản không mong đợicủa chúng ta) hay được tự động hoá (ví dụ, hãy triển khai nội dung cho 5 máychủ Web sản xuất của chúng ta vào 3h sáng tất cả các ngày) Dòng công việc cóthể được tuỳ biến thường xuyên, song tốt nhất là để cho nó được đơn giản

 Một cách thức kiểm tra (audit trail) và lịch sử thay đổi nội dung có thể đượcduy trì, điều cho phép các nhà cung cấp nội dung theo dõi và kiểm tra tốt hơnnhững thay đổi về nội dung

Các biểu mẫu (Templates)

Các biểu mẫu được thiết kế cho cả việc nhập nội dung lẫn trình bầy nội dung.Các biểu mẫu mà chúng được tạo ra để nhập nội dung được thiết kế cho nhữngngười sử dụng cuối không có chuyên môn về kỹ thuật để xây dựng nội dung.Một số sản phẩm được tuyên bố là tự động tạo ra các biểu mẫu nhập nội dungcho bạn, song nên đánh giá thật kỹ lưỡng tính năng này để đảm bảo rằng nó đápứng yêu cầu của bạn Các biểu mẫu giới thiệu được sử dụng để kết hợp nội dungvới trình bầy, và hiển thị kết quả cuối cùng cho khách thăm quan Website Cáctrang trình bầy thường bao gồm các thành phần mà chúng là những biểu mẫuđược gộp trong một biểu mẫu Các thành phần hữu ích đối với các tài sản như lànhư là các banner quảng cáo và chú thích cuối trang (footers) mà chúng đượchiển thị ở nhiều trang trong cả một Web site

Kiểm soát nguồn/tạo các phiên bản (Source control/versioning)

Nhiều giải pháp quản lý nội dung cũng cung cấp các khả năng quản lý mã nguồnnhư là tạo phiên bản, kết hợp các thay đổi và chỉ rõ cách giải quyết xung đột.Một giải pháp quản lý nội dung tốt sẽ cho phép bạn giữ các phiên bản của toàn

bộ Web site, hay các ảnh chụp nhanh (snapshots) đúng lúc - đồng thời cho phépbạn xoá các thay đổi ở cơ sở dữ liệu tại bất cứ điểm nào

Triển khai/Phân phối (Deployment/Delivery)

Trang 14

 Nhiều giải pháp quản lý nội dung tự động hoá quá trình triển khai nội dung.Một số giải pháp cũng cung cấp khả năng lưu trữ/gia hạn hiệu lực của nội dungmột cách tự động.

 Một số giải pháp quản lý nội dung cũng có một thành phần thời gian chạy(run time component) để thực hiện việc phân phối trang

1.1.3 Các sản phẩm quản lí nội dung- so sánh tính năng

Hiện nay với hàng ngàn hệ quản trị nội dung CMS khiến đôi khi ta khó lựa

chọn được một sản phẩm phù hợp vì các tính năng rất phong phú cũng như các chitiết kỹ thuật cần lưu ý Một khi bạn đã chọn rồi rất vất vả khi chuyển đổi sang một

hệ CMS khác Sau đây là đánh giá các tính năng của bốn hệ CMS hiện dùng phổbiến trên Thế giới cũng như tại Việt Nam

Bảng 1 So sánh các tính năng của các hệ CMS phổ biến

1.1.4 Kết luận

Hiện nay, có rất nhiều loại sản phẩm quản lý nội dung trên thị trường Các sảnphẩm này thực hiện những công việc thích hợp khác nhau và có những tính năngkhác nhau Trong đề tài này, em xin đưa ra một ứng dụng nhỏ của bài toán quản lýnội dung, đó là bài toán: Tìm kiếm việc làm trực tiếp

1.2 Mô tả bài toàn

1.2.1 Vai trò của công nghệ thông tin trong việc tìm kiếm thông tin có chọn lọc

Hiện nay việc ứng dụng công nghệ thông tin vào các lĩnh vực của đời sống xãhội ngày càng phổ biến và đem lại nhiều lợi ích Một trong các ứng dụng đó là vàolĩnh vực tìm kiếm việc làm

Trang 15

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

Với việc các công cụ tìm kiếm ngày càng được phát triển, việc tìm ra một côngviệc phù hợp với các ứng viên trở nên dễ dàng hơn, họ có thể ngồi ở nhà, lên mạng

và bắt đầu tìm kiếm thông tin về việc làm thay vì việc phải đến gõ cửa từng trungtâm môi giới việc làm hay từng công ty tuyển việc Bên cạnh đó các nhà tuyển dụngcũng có thể dễ dàng tìm được các ứng viên phù hợp bằng cách đăng tin tuyển dụngtrên website của công ty hay trên trang web trung gian thay vì phải đi phát các tờ rơinhư trước đây

Qua đó ta thấy vai trò quan trọng của hệ thống trung gian, nơi đăng tin tuyểndụng của các doanh nghiệp và cũng là nơi để các ứng viên vào để tìm kiếm các việclàm phù hợp với mình Mô hình đã được áp dụng trong thực tế, với các trang thôngtin tìm việc có uy tín trong nước cũng như quốc tế, phải kể đến :

http://www.vietnamworks.com/ và các trang tìm việc của các báo điện tử

1.2.2 Bài toán cần xây dựng

Mục tiêu của bài toán là xây dựng được hệ thống dịch vụ tìm việc đáp ứngđược các yêu cầu về thu thập thông tin công việc và phân loại công việc thành cácnhóm công việc đã được định nghĩa trước

Thu thập thông tin công việc: Trước hết phải có cơ chế thu thập thông tin

hiệu quả, có cơ chế tự động chui vào các trang web của các doanh nghiệp đãđăng ký sử dụng dịch vụ để lấy các thông tin tuyển dụng,chuẩn hóa các địnhdạng của thông tin và loại bỏ biết loại bỏ các thông tin không cần thiết Để làmđiều này nó phải xây dựng các luật lọc trên server để thực hiện các công việctrên, việc xây dựng các luật lọc sao cho hiệu quả là một điều quan trọng của quátrình xử lý, điều này giúp cho công đoạn phân loại công việc sau này được thuậnlợi hơn

Phân loại công việc: Đây là chức năng này rất quan trọng trong hệ thống, nó

cho phép sắp xếp công việc theo nội dung công việc và vị trí địa lý của nhàtuyển dụng, điều này làm cho quá trình tìm kiếm của các ứng viên trở nên dễdàng và thuận tiện hơn Việc phân loại công việc dựa trên các từ khóa( dùngcông cụ tìm kiếm của Lucene để phân loại), các từ khóa đã được định nghĩatrước, công việc sau khi phân loại thành các nhóm đã được định nghĩa trướctrong cơ sở dữ liệu(CSDL)

1.3 Phương pháp giải quyết bài toán

1.3.1 Bài toán dựa trên Internet, www

Để giải quyết bài toán, sự lựa chọn đầu tiên là Internet Lý do thật đơn giản vìInternet là mạng thông tin chung Để phổ biến thông tin cho nhiều người thì Internet

là sự lựa chọn hợp lý

Internet giúp cho việc thu thập thông tin dễ dàng và nhanh chóng hơn, nó còngiúp cho người tìm việc có thể dễ dàng tra cứu, tìm kiếm các thông tin Tóm lạiInternet giúp khả năng trao đổi thông tin rộng rãi, thông tin và dịch vụ của hệ thống

có thể được phổ cập nhanh chóng và rộng rãi, điều này giúp ứng dụng có thể trở nênphổ biến

Trang 16

1.3.2 Công cụ tìm kiếm 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ườicần tổ chức, quản lý và khai thác gia tăng theo từng ngày Để tìm kiếm những thôngtin 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ầnlượ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óa Tuynhiê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,

và MSN… là những sản phẩm thương mại và mã nguồn được giữ bí mật Điều nàydẫ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 DougCutting đã 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 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ỉnhcho 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 3 năm 2000, đến khiLucene trở thành một dự án chính thức của tổ chức Apache Jakarta và bắt đầu đượcphá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ạtcác tổ chức và công ty như Hewlett-Packard, FedEx, Tạp chí New Scientist, MIT’sOpenCourseWare, từ điển bách khoa toàn thư Britannica, môi trường phát triển tíchhợp Eclipse

Sự thành công của Lucene có được là do nó đã cung cấp cho nhà phát triểnnhữ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

- Hỗ trợ khả năng cập nhập và tìm kiếm trên chỉ mục một cách đồng thời

- 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 Lucence là:

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

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

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

- Aduna AutoFocus: cho phép người dùng tìm kiếm tài liệu trên cây thư mụccủ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

Trang 17

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

- KIM: hỗ trợ tìm kiếm tài liệu theo thực thể có tên

1.3.3 Công cụ crawler chuyên thu thập các trang web

Web crawler là chương trình tự động tìm kiếm trên Internet Nó được thiết kết

để thu thập tài nguyên Internet (trang Web, hình ảnh, video, tài liệu Word, PDF hayPostScrips) , cho phép máy tìm kiếm đánh chỉ số sau đó

Cùng phương thức, nhưng một số robots lại bị sử dụng để lượm các tài nguyênhoặc để lọc địa chỉ email

Để đánh chỉ số các tài nguyên web, mỗi robot sẽ đi theo các liên kết mà nó tìmthấy tại một trang trung tâm Sau đó, mỗi trang đã duyệt sẽ được ghi nhớ lại và gáncho tần số đánh lại chỉ số dựa vào mức độ cập nhật thường xuyên hay không củatrang

Trang 18

Chương 2: Lọc và phân loại dữ liệu

2.1 Giới thiệu về các hệ thống khai thác thông tin

Kỷ nguyên XXI là kỷ nguyên của thông tin điện tử, có hàng tỉ website trên thếgiới cung cấp hàng triệu tin tức mỗi ngày Nguồn thông tin trở lên vô cùng phongphú trong khi độc giả thường ít phụ thuộc vào một hệ thống phát hành Thôngthường , người ta luôn muốn tìm đến nhiều nguồn khác nhau, tìm đọc nhiều bài viết

về cùng một chủ đề Bên cạnh đó, chia sẻ tin tức là một yêu cầu thiết yếu cho cácwebsite thông tin Có nhiều hính thức chia sẻ nội dung như đăng lại toàn bộ, chỉđăng tiêu đề, mô tả, hay trích dẫn…do đó , hàng loạt các giải pháp chia sẻ , khaithác nội dung đã ra đời như Web-crawler, Web cliping, Agent, RSS, RDF, Atom,Spider , Robot, Downloader…Điểm chung của các sản phẩm này là giúp độc giảtăng tốc độ duyệt thông tin, quản lí nội dung,…

Dưới đây xin giới thiệu sơ lược về các công nghệ thông dụng :

Web-Crawler: Là công nghệ tải và xử lí nội dung HTML( tách lọc, chuẩn hóa,

…) từ Internet.Web-crawler được ứng dụng thành công nhất trong các hệ thống tìmkiếm như Google, Yahoo, MSN,…Và hiện nay, người ta còn ứng dụng Web-crawler cho các hệ thống CMS và Portal Tác dụng của nó trong các hệ này làdownload, tách lọc nội dung để các quản trị có thể phát hành lại trên website của họ.Chức năng cở bản cần có của Web-Crawler là download , tách lọc, xử lí; quản lí nộidung trong cở sở dữ liệu; cho phép đọc offline; cung cấp các giải pháp liên kết vớicác hệ thống khác

Web-clipping: xuất hiện trong thời gian gần đây dưới dạng portlet trong các hệ

Portal thương mại như của IBM, Oracle,…Là giải pháp trích xuất một phần nộidung từ một trang trên Internet, Web-clipping mới chỉ là một công nghệ tương đối

xa lạ hiện nay Chức năng cơ bản của hệ thống này là khả năng trích xuất, catche vàupdate, sửa đổi các style của nội dung nguồn và phát hành lại tự động trên website

Downloader: Đây là công nghệ thông dụng và loại bậc nhất trong các hệ khai

thác thông tin Downloader tồn tại chủ yếu dưới 2 dạng là download toàn bộwebsite và download tài nguyên trên Internet Hệ downloader trợ giúp người dùngdownload với tốc độ nhanh hơn, quản lí các url tốt hơn và bảo toàn dữ liệu khi córủi ro ( đứt mạng, tắt máy,…) Với các hệ download website, ứng dụng còn đảmbảo cấu trúc của toàn bộ site đó như giữ vững các liên kết, tổ chức lưu trữ,…

RSS Reader : Công nghệ RSS ra đời trợ giúp việc chia sẻ nội dung giữa các hệ

thống thông tin Tuy nhiên, có một loạt các sản phẩm Reader cho phép người dùngkiếm soát nội dung thông qua giải pháp này Những năm gần đây, hệ các sản phẩmnày phát triển tới mức bùng nổ , chúng tồn tại không chỉ là các sản phẩm phần mềmthuần chủng mà còn được tích hợp vào các sản phẩm mail client, browser,… Ônglớn Microsoft cũng không thể làm ngơ khi quyết định tích hợp khả năng đọc RSS

và sản phẩm Windows Longhorn, IE 7 Hàng trăm các sản phẩm phần mềm liênquan tới khai thác tài nguyên Internet đều tích hợp chức năng đọc RSS, Googledesktop search là một ví dụ Các yêu cầu tối thiểu của một hệ RSS Reader là khảnăng đọc các phiên bản khác nhau của RSS, Atom, RDF,…; phát hành các thông tin

cơ bản của nội dung tới người dùng; khả năng catche và update

Trang 19

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

2.2 Lucene- Công cụ đánh chỉ mục và tìm kiếm

2.2.1 Giới thiệu về Lucene

Lucene là phần mềm mã nguồn mở được phát triển đầu tiên bởi Doug Cutting

được giới thiệu đầu tiên vào tháng 8 năm 2000 Tháng 9 năm 2001 Lucene gia nhậpvào tổ chức Apache và hiện tại được Apache phát triển và quản lý Đó là công cụđược thiết kế và phát triển dùng để phân tích, đánh chỉ mục và tìm kiếm thông tinvới hiệu suất cao bằng java Cần lưu ý rằng Lucene không phải là một ứng dụng màchỉ là một công cụ đặc tả API cần thiết cho việc một search engine Được xây dựng

và thiết kế theo hướng hướng đối tượng nên các API cũng được cung cấp theo dạnghướng đối tượng Mặc dù thiết kế và xây dựng ban đầu từ java nhưng hiện nay cũng

đã có một số phiên bản cho các ngôn ngữ khác : Net, C++, Perl, …

2.2.1.1 Lucene làm được gì?

Lucene cho phép đánh chỉ mục và tìm kiếm thông tin trong ứng dụng củachúng ta Lucene có thể đánh chỉ mục và tìm kiếm với bất cứ dữ liệu nào và chuyểncác dữ liệu đó về dạng văn bản(textual)

Hình 1: Các ứng dụng tiêu biểu tích hợp Lucene

Lucene không quan tâm đến nguồn của dữ liệu, định dạng thậm chí là ngônngữ khi chúng ta chuyển đổi sang dạng văn bản Điều này có nghĩa là chúng ta cóthể dùng Lucene để đánh chỉ mục và tìm kiếm dữ liệu trong các file: trang web trêncác máy chủ web từ xa, các tài liệu được lưu trong các hệ thống file cục bộ như filetext, các tài liệu Microsoft Word, HTML hay PDF

Lucene cũng có thể đánh chỉ mục cho dữ liệu trong cơ sở dữ liệu(CSDL), đưa

ra cho người dùng cách tìm kiếm full-text mà nhiều CSDL không cung cấp

Trang 20

2.2.1.2 Đánh chỉ mục và tìm kiếm

Trái tim của tất cả bộ máy tìm kiếm là khái niệm: đánh chỉ mục(indexing)- xử

lý dữ liệu gốc thành dạng tham chiếu để dễ dàng cho việc tìm kiếm

2.2.1.2.1 Thế nào là đánh chỉ mục, tại sao nó lại quan trọng

Giả thiết rằng chúng ta cần tìm kiếm một lượng lớn các file và chúng ta muốntìm file mà chứa một từ hay câu xác định Cách chúng ta viết chương trình để thựchiện điều này? Cách tiếp cận “ngây thơ” là dò lần lượt từng file để tìm ra các từ haycác câu Cách tiếp cận này sẽ gặp khó khăn khi số lượng các file lớn Do đó việcđánh chỉ mục đã xuất hiện: để tìm một số lượng lớn các file văn bản nhanh chóng,chúng ta trước hết phải đánh chỉ mục cho văn bản đó và chuyển chúng về định dạng

mà cho phép chúng ta tìm kiếm một cách nhanh chóng, loại trừ quá trình quét tuần

tự Quá trình đó gọi là đánh chỉ mục, và đầu ra là một chỉ mục

Ta có thể xem một chỉ mục như là cấu trúc dữ liệu mà cho phép truy cập ngẫunhiên đến các từ được lưu trữ trong nó nhanh hơn Với Lucene, một chỉ mục là mộtcấu trúc dữ liệu được thiết kế đặc biệt, được lưu trong hệ thống file như là một tậpcác file chỉ mục

2.2.1.3 Lucene in Action: tạo một ứng dụng mẫu

2.2.1.3.1 Tạo một chỉ mục

Chúng ta sẽ xem cách một lớp đơn gọi Indexer(lớp đánh chỉ mục) và bốnphương thức của nó, chúng sẽ đệ qui các thư mục file hệ thống và đánh chỉ mục tấtcác các file có đuôi txt Khi bộ tạo chỉ mục thực hiện xong nó sẽ nhường chỗ chongười anh em của nó là bộ tìm kiếm (Searcher)

Sử dụng lớp đánh chỉ mục để đánh chỉ mục cho file text: cần 2 đối số

 Đường dẫn tới thu mục mà chứa chỉ mục Lucene

 Đường dẫn tới thư mục mà chứa các file chúng ta muốn đánh chỉ mụcSau đây là cách sử dụng lớp đánh chỉ mục Indexer

public class Indexer {

public static void main(String[] args) throws Exception {

if (args.length != 2) {

throw new Exception("Usage: java " + Indexer.class.getName()

+ " <index dir> <data dir>");

}

File indexDir = new File(args[0]); // tạo thư mục chỉ mục Lucene File dataDir = new File(args[1]); // Đánh chỉ mục cho thư mục này long start = new Date().getTime();

int numIndexed = index(indexDir, dataDir);

long end = new Date().getTime();

Trang 21

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

System.out.println("Indexing " + numIndexed + " files took "

+ (end - start) + " milliseconds");

}

// Mở chỉ mục và bắt đầu tìm kiếm thư mục

public static int index(File indexDir, File dataDir)

throws IOException {

if (!dataDir.exists() || !dataDir.isDirectory()) {

throw new IOException(dataDir

+ " does not exist or is not a directory");

}

IndexWriter writer = new IndexWriter(indexDir,

new StandardAnalyzer(), true); // 1 tạo chỉ mục Lucene

// Phương thức đệ quy gọi chính nó khi tìm kiếm thư mục

private static void indexDirectory(IndexWriter writer, File dir)

throws IOException {

File[] files = dir.listFiles();

for (int i = 0; i < files.length; i++) {

// method to actually index a file using Lucene

private static void indexFile(IndexWriter writer, File f)

Document doc = new Document();

doc.add(Field.Text("contents", new FileReader(f))); // 3 đánh chỉ mục cho nội

dung file doc.add(Field.Keyword("filename", f.getCanonicalPath()));//4 đánh chỉ mục cho

// tên file writer.addDocument(doc);// thêm tài liêu vào chỉ mục Lucene

}

}

2.2.1.3.2 Tìm kiếm một chỉ mục

Trang 22

Tìm kiếm trong Lucene là nhanh và đơn giản như đối với việc đánh chỉ mục,khả năng của các hàm là đáng kinh ngạc Chúng ta sẽ dùng bộ tìm kiếm(searcher)

để tìm các chỉ mục đã được tạo ra bởi bộ tạo chỉ mục

Trong phần trên, chúng ta đã đánh chỉ mục cho thư mục của các file text, bâygiờ chúng ta sẽ sử dụng Lucene để tìm kiếm chỉ mục để tìm các file chứa các từ, cáccâu cần tim Ví dụ, ta muốn tìm tất cả các file có chưa từ khóa java hay lucene, hoặc

ta muốn tìm các file chứa câu “system requirements”

Sử dụng bộ tìm kiếm để thực hiện việc tìm kiếm: cần 2 đối số

 Đường dẫn chứa chỉ mục được tạo ra bởi bộ tạo chỉ mục

 Một truy vấn dùng để tìm chỉ mục

Sau đây là cách sử dụng bộ tìm kiếm để tìm kiếm

public class Searcher {

public static void main(String[] args) throws Exception {

if (args.length != 2) {

throw new Exception("Usage: java " + Searcher.class.getName()

+ " <index dir> <query>");

}

File indexDir = new File(args[0]);

String q = args[1];

if (!indexDir.exists() || !indexDir.isDirectory()) {

throw new Exception(indexDir +

" does not exist or is not a directory.");

Directory fsDir = FSDirectory.getDirectory(indexDir, false);

IndexSearcher is = new IndexSearcher(fsDir); // 1 Mở chỉ mục

Query query = QueryParser.parse(q, "contents", // 2 phân tích truy vấn

new StandardAnalyzer());

long start = new Date().getTime();

Hits hits = is.search(query); // 3 tìm chỉ mục

long end = new Date().getTime();

System.err.println("Found " + hits.length() + /

" document(s) (in " + (end - start) +

" milliseconds) that matched query '" +

q + "':");

for (int i = 0; i < hits.length(); i++) {

Document doc = hits.doc(i); // 4 thu tập tài liệu đối sánh

System.out.println(doc.get("filename"));

}

}

}

Trang 23

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

2.2.1.4 Tìm hiểu các lớp cơ bản trong Indexer

Các lớp cơ bản trong bộ tạo chỉ mục:

2.2.1.4.2 Thư mục (directory)

Lớp thư mục hiện thị vùng chứa của chỉ mục Lucene, đây là lớp trừu tượngcho phép các lớp con của lớp này lưu trữ chỉ mục Bộ tạo chỉ mục là một ví dụ,chúng ta dùng đường dẫn đến thư mục file hệ thống để lấy được thể hiện(instance)của Thư mục IndexWriter sau đó dùng Thư mục cụ thể - FSDirectory và tạo chỉmục trong thư mục file hệ thống Trong ứng dụng của chúng ta thường lưu chỉ mụcIndex trên đĩa, vì thế dùng FSDirectory

Một sự thực thi(implementation) của Thư mục là lớp có tên RAMDirectory, nóchứa tất cả dữ liệu trong bộ nhớ Sự thực thi này do đó hữu ích cho các chỉ mục nhỏhơn mà có thể tải vào bộ nhớ và sẽ bị hủy khỉ ứng dụng kết thúc Vì các dữ liệutrong bộ nhớ thì truy cập nhanh hơn trong đĩa cứng nên RAMDirectory thích hợpvới các tình huống mà cần truy cập nhanh đến chỉ mục trong quá trình đánh chỉ mục

và tìm kiếm

2.2.1.4.3 Bộ phân tích (analyzer)

Trước khi văn bản được đánh chỉ mục, thì văn bản đó phải qua bộ phân tích,

bộ phân tích là một khởi tạo của IndexWriter, có nhiệm vụ trích lọc văn bản trướckhi đánh chỉ mục Nó làm việc với các từ dừng(stop word)( các từ thường dùngnhưng không giúp phân biệt các bản ghi với nhau như a, an, the, in)

2.2.1.4.4 Bản ghi (document)

Một bản ghi biểu thị một tập các trường, có thể xem nó như một bản ghi ảo,một đoạn của dữ liệu như một trang web, một thư điện tử hay một file văn bản Cáctrường của bản ghi miêu tả tài liệu hay dữ liệu tương ứng với bản ghi Các dữ liệunhư tác giả, tiêu đề, ngày thay đổi đều được đánh chỉ mục và lưu trữ riêng biệt trongcác trường của bản ghi

Trang 24

Trong bộ tạo chỉ mục, chúng ta tập trung đánh chỉ mục cho file văn bản, vì thếvới mỗi file văn bản tìm được ta tạo một thể hiện của lớp Thư mục, đưa nó vàotrong các trường và thêm các Bản ghi này vào chỉ mục.

2.2.1.4.5 Trường(Field)

Mỗi Bản ghi trong một chỉ mục chứa một hay nhiều tên trường, trong lớp cótên là Trường(Field) Mỗi trường tương ứng với mẩu của dữ liệu mà được truy vẫnhay được thu thập từ chỉ mục trong khi tìm kiếm Lucene đưa ra 4 loại trường:

 Từ khóa(keyword): không được phân tích, nhưng được đánh chỉ mục

và lưu trong chỉ mục đúng với nguyên bản Loại này thích hợp với cáctrường mà giá trị gốc cần được giữ trọn vẹn như URL, các đường dẫn file,các số bảo mật xã hội, số điện thoại

 Không đánh chỉ mục(UnIndexed): không được phân tích cũng nhưđánh chỉ mục, nhưng giá trị của trường được lưu trong chỉ mục Loại nàythích hợp với các trường cần hiện thị kết quả tìm kiếm( như URL hay khóachính của CSDL)

 Không lưu trữ( UnStored): ngược lại với không đánh chỉ mục, trườngnày được phân tích và đánh chỉ mục nhưng không được lưu trong chỉ mục.Các trường loại này thích hợp cho việc đánh chỉ mục số lượng lớn các vănbản mà không cần thu thập dạng gốc của chúng, như thân của trang webhay các loại khác của tài liệu văn bản

 Văn bản(text): được phân tích và đánh chỉ mục, các trường loại này cóthể được tìm kiếm lại nhưng phải chú ý đến kích thước của trường Nếu dữliệu được đánh chỉ mục là một chuỗi nó sẽ được lưu, nhưng nếu dữ liệuđược lấy từ bộ đọc(reader) thì nó sẽ không được lưu

Tất cả các trường đều có tên và giá trị Bảng sau tóm tắt đặc trưng của cáctrường khác nhau:

Phương thức/kiểu của trường Phân

cá nhân, Ngày

liệu: PDF, HTML

Field.UnStored(String, String) có có Tiêu đề tài liệu

và nội dung Field.Text(String, String) có có có Tiêu đề tài liệu

Trang 25

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

2.2.1.5 Tìm hiểu các lớp cơ bản trong bộ tìm kiếm

Các lớp cơ bản cần để thực hiện thao tác tìm kiếm:

IndexSearcher is = new IndexSearcher(

FSDirectory.getDirectory("/tmp/index", false));

Query q = new TermQuery(new Term("contents", "lucene"));

Hits hits = is.search(q);

2.2.1.5.2 Thuật ngữ

Thuật ngữ là đơn vị cơ bản của việc tìm kiếm, tương tự như đối tượng Trường,thuật ngữ bao gồm một cặp chuỗi: tên của trường và giá trị của trường Chú ý rằngđối tượng thuật ngữ cũng bao gồm trong quá trình đánh chỉ mục, tuy nhiên chúngđược tạo ra bởi Lucene nên ta không cần quan tâm đến chúng trong khi đánh chỉmục Trong quá trình tìm kiếm ta phải xây dựng các đối tượng Thuật ngữ và dùngchúng với Truy vấn thuật ngữ (termQuery):

Query q = new TermQuery(new Term(" contents" , " lucene" ));

Hits hits = is.search(q);

Đoạn mã trên chỉ thị cho Lucene tìm tất cả các bản ghi mà chứa từ lucenetrong trường có tên contents

Trang 26

ta đã giới hạn ví dụ để đánh chỉ mục và tìm kiếm là các file txt Để ta có thể hiểunội dung và cách dùng các Trường thì thật không hề đơn giản.

Giả sử ta cần đánh chỉ mục cho định dạng PDF Để chuẩn bị cho việc đánh chỉmục, ta phải tìm cách lấy thông tin văn bản tù các tài liệu PDF và dùng dữ liệu thuđược để tạo các Tài liệu và các Trường Lucene Ta có thể thấy các phương thứcField luôn mang giá trị String, trong một số trường hợp còn có cả giá trị Date vàReader, không có phương thức nào chấp nhận kiểu Java PDF ngay cả khi kiểu đótồn tại Ta cũng gặp tình huống tương tụ khi muốn đánh chỉ mục các tài liệuMicrosoft Word Ngay cả khi chúng ta giải quyết vấn đề này với các tài liệu dạngXML hay HTML là các tài liệu cùng các ký tự thuần văn bản, thì chúng ta vẫn cầnkhôn khéo cho việc chuẩn bị dữ liệu để đánh chỉ mục tránh việc đánh chỉ mục vớicác phần tử(element) của XML hay các thẻ(tag) của HTML

Hình 2: Đánh chỉ mục với Lucene chia thành 3 thao tác: chuyển dữ liệu thành văn bản, phân tích dữ liệu đó và lưu chúng vào chỉ mục(index)

2.2.2.1.2 Phân tích(analysis)

Khi chuẩn bị dữ liệu cho việc đánh chỉ mục và tạo các Bản ghi Lucene gắn với

các Trường(Field) ta có thể gọi phương thức addDocument(Document) của

IndexWriter Khi đó, trước tiên Lucene phân tích dữ liệu để làm cho dữ liệu đó

tương thích với việc đánh chỉ mục, sau đó nó sẽ chia dữ liệu văn bản thành các

Trang 27

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

đoạn(chunk) hoặc các từ tố(token) và thực hiện một số thao tác trên đó Ví dụ, các

từ tố có thể được chuyển thành chữ thường trước khi đánh chỉ mục làm cho việc tìmkiếm thuận lợi hơn, việc làm này cũng có thể loại bỏ những từ tố không có nghĩa từđầu vào như các từ các từ: a, an, the, in, on trong văn bản tiếng Anh

2.2.2.1.3 Viết chỉ mục

Sau khi đầu vào được phân tích, chúng đã sẵn sàng để thêm(add) vào chỉ mục.Lucene lưu đầu vào trong một cấu trúc dữ liệu có tên chỉ mục đảo(inverted index).Cấu trúc dữ liệu này làm hiệu quả sử dụng không gian đĩa trong khi cho phép tìmkiếm nhanh từ khóa Cách làm của cấu trúc đảo ngược này là nó dùng các từ tố lấyđược từ các tài liệu đầu vào như là các khóa tìm kiếm thay vì coi văn các tài liệunhư các thực thể trung tâm Hay nói cách khác, thay vì cố gắng trả lời câu hỏi “ từnào được chứa trong bản này” thì cấu trúc này lại đưa ra câu trả lời “ những bản ghichứa từ X?”

2.2.2.2 Các thao tác đánh chỉ mục cơ bản

2.2.2.2.1 Thêm các bản ghi vào một chỉ mục

Đoạn code dưới đây sẽ tạo ra một chỉ mục có tên index-dir lưu trong thư mục

file tạm của hệ thống: /tmp trên Unix hay C:\TEMP trên Windowns Ta dùng

SimpleAnalyzer để phân tích văn bản đầu vào và sau đó đánh chỉ mục hai Bản ghi

đơn giản, mỗi tài liệu chứa cả 4 loại Trường: Từ khóa(keyword), Không chỉmục(UnIndexed), Không lưu(Unstored) và văn bản(text)

public abstract class BaseIndexingTestCase extends TestCase {

protected String[] keywords = {"1", "2"};

protected String[] unindexed = {"Netherlands", "Italy"};

protected String[] unstored = {"Amsterdam has lots of bridges", "Venice has lots

of canals"}; protected String[] text = {"Amsterdam", "Venice"};

protected Directory dir;

protected void setUp() throws IOException {

for (int i = 0; i < keywords.length; i++) {

Document doc = new Document();

doc.add(Field.Keyword("id", keywords[i]));

doc.add(Field.UnIndexed("country", unindexed[i]));

doc.add(Field.UnStored("contents", unstored[i]));

doc.add(Field.Text("city", text[i]));

Trang 28

protected Analyzer getAnalyzer() {

return new SimpleAnalyzer();

Ví dụ 2.2: Chuẩn bị chỉ mục mới trước khi kiểm tra

Từ lớp BaseIndexingTestCase này ta sẽ mở rộng cho các lớp thử khác trong

phần này, ta sẽ làm rõ một vài chi tiết quan trọng BaseIndexingTestCase sẽ tạo chỉmục ngay khi phương thức setUp() được gọi Setup() được gọi trước khi kiểm trađược thực hiện

Các bản ghi hỗn tạp(Heterogeneous)

Một tính năng thuận tiện của Lucene là cho phép các Tài liệu với tập cácTrường khác nhau có thể cùng tồn tại trong cùng chỉ mục Điều này có nghĩ là ta cóthể dùng chỉ mục đơn để tổ chức các Tài liệu mà thể thiện các thực thể khác nhau

Ví dụ, ta có thể dùng các Tài liệu để thể hiện các san phẩm bán lẻ với các Trườngnhư và , và các tài liệu biểu thị con người với các Trường như tên, tuổi và giớitính

Nối vào các Trường(Appendable Fields)

Giả sử ta có mọt ứng dụng mà sinh ra một mảng các từ đồng nghĩa, và ta muốndùng Lucene để đánh đánh chỉ mục các từ cơ sở của tất cả các từ đồng nghĩa đó.Một cách làm là ta lặp tất cả các từ đồng nghĩa và nối chúng vào một Chuỗi, sau đó

ta có thể sử dụng để tạo ra Trường Lucene Cách khác đơn giản hơn là đánh chỉ mụctất cả các từ đồng nghĩa cùng với các từ cơ sở để thêm vào cùng Trường với các giátrị khác nhau, như:

String baseWord = "fast";

String synonyms[] = String {"quick", "rapid", "speedy"};

Document doc = new Document();

doc.add(Field.Text("word", baseWord));

for (int i = 0; i < synonyms.length; i++) {

doc.add(Field.Text("word", synonyms[i]));

}

Lúc đó, Lucene sẽ nối tất cả các từ với nhau và đánh chỉ mục chúng theo

trường word, điều này cho phép ta có thể dùng bất cứ từ nào khi tìm kiếm.

2.2.2.2.2 Xóa các bản ghi ra khỏi chỉ mục

Dù hầu hết các ứng dụng có liên quan đến lấy các Tài liệu từ chỉ mục Lucenenhưng trong một số trường hợp ta cũng cần xóa chúng đi Ví dụ, một tờ báo xuấtbản có thể muốn giữ các tin tức cuối tuần có giá trị trong chỉ mục có thể tìm kiếm.Các ứng dụng khác có thể muốn xóa tất cả các Tài liệu(bản ghi) mà chứa thuật ngữ

Trang 29

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

Xóa bản ghi là việc sử dụng một lớp không thích hợp gọi là IndexReader Lớpnày không xóa các Bản ghi khỏi chỉ mục ngay lập tức Thay vào đó,lớp này đánhdấu các bản ghi như là đã xóa, Bản ghi thực sự bị xóa cho đến khi phương thứcclose() của IndexReader được gọi Xét ví dụ sau: Phương thức xóa bản ghi thừa kếlớp BaseIndexingTestCase, nghĩa là trước khi phương thức test chạy, lớpBaseIndexingTestCase sẽ tạo lại hai chỉ mục Bản ghi:

public class DocumentDeleteTest extends BaseIndexingTestCase {

public void testDeleteBeforeIndexMerge() throws IOException {

IndexReader reader = IndexReader.open(dir);

assertEquals(2, reader.maxDoc()); // Số bản gi tiếp là 2

assertEquals(2, reader.numDocs());// 2 bản ghi trong chỉ mục

reader.delete(1); // Xóa Bản ghi có ID là 1

assertTrue(reader.isDeleted(1));// Bản ghi đã bị xóa

public void testDeleteAfterIndexMerge() throws IOException {

IndexReader reader = IndexReader.open(dir);

public class DocumentUpdateTest extends BaseIndexingTestCase {

public void testUpdate() throws IOException {

assertEquals(1, getHitCount("city", "Amsterdam"));

IndexReader reader = IndexReader.open(dir);

reader.delete(new Term("city", "Amsterdam"));// Xóa từ “Amsterdam” trong

// Trường city của bản ghi reader.close();

Trang 30

assertEquals(0, getHitCount("city", "Amsterdam")); //Xác nhận bản ghi đã

// xóa IndexWriter writer = new IndexWriter(dir, getAnalyzer(),false);

Document doc = new Document();

protected Analyzer getAnalyzer() {

return new WhitespaceAnalyzer();

}

private int getHitCount(String fieldName, String searchString)

throws IOException {

IndexSearcher searcher = new IndexSearcher(dir);

Term t = new Term(fieldName, searchString);

Query query = new TermQuery(t);

Hits hits = searcher.search(query);

int hitCount = hits.length();

Cập nhật bằng cách xóa theo lô

Ví dụ trên, ta đã xóa và thêm một bản ghi Nếu cần xóa và thêm nhiều Bản ghithì cách tốt nhât là làm theo lô theo các bước:

Trang 31

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

2.2.2.3 Độ tin cậy Các bản ghi và các Trường

Hình dung rằng ta phải viết một ứng dụng để đánh chỉ mục và tìm kiếm thưđiện tử của một tổ chức Cách ta thực hiện việc này như thế nào?

Độ tin cậy bản ghi(Document boosting) là tính năng mà làm một yêu cầu nhưvậy đơn giản đối với sự thi hành Mặc định tất cả các Bản ghi không có độ tin cậyhoặc chúng có hệ số tin cậy như nhau và bằng 1 Bằng cách thay dổi hệ số tin cậy,

ta có thể chỉ ra là Bản ghi này quan trọng hay kém quan trọng so với Bản ghi kháctrong chỉ mục

2.2.2.4 Kiểm soát quá trình đánh chỉ mục

Khi đánh chỉ mục với các bộ bản ghi nhỏ và vừa thì có thể thực hiện tốt bằngcách cài đặt Lucene mặc định Tuy nhiên, nếu ứng dụng làm việc với các chỉ mụclớn, ta sẽ phải kiểm soát quá trình đánh chỉ mục để đảm bảo hiệu năng tối ưu choviệc đánh chỉ mục Vi vụ, khi ta đánh chỉ mục cho nhiều triệu bản ghi và muốn tốc

độ của quá trình mất vài phút thay vì hàng giờ Máy tính của ta có thể dư thừa bộnhớ(RAM), nhưng ta phải biết cách sử dụng nó Lucene có nhiều tham số cho phép

ta kiểm soát hiệu năng và tài nguyên trong quá trình đánh chỉ mục

2.2.2.4.1 Điểu chỉnh hiệu năng đánh chỉ mục

Trong một ứng dụng đánh chỉ mục tiêu biểu, thắt cổ chai là quá trình ghi tệpchỉ mục lên đĩa

Hình 2.2 cho thấy, khi các Bản ghi mới được thêm vào chỉ mục Lucene, chúngđược khởi tạo bộ đệm trong bộ nhớ thay vì ghi ngay lập tức lên đĩa

Bộ đệm này được thực hiện vì lý do hiệu năng, lớp IndexWriter đưa ra nhiềubiến cho phép ta chỉnh sửa kích thước bộ đệm

Hình 3 : Quá trình khởi tạo bộ đệm

2.2.2.4.2 Đánh chỉ mục trong bộ nhớ: RAMDirectory

Trong phần trước, ta đã nói tới Lucene thực hiện bộ đệm trong bằng cách giữcác bản ghi mới thêm vào trong bộ nhớ trước khi ghi chúng lên đĩa Điều này được

Trang 32

thực hiện một cách tự đồng và trong suốt khi sử dụng FSDirectory, thực thi tệp cơbản Directory Nhưng ta muốn kiểm soát việc đánh chỉ mục, sử dụng bộ nhớ và đẩy

bộ nhớ đệm lên đĩa(disk), ta có thể dùng RAMDirectory để thực hiện việc này

RAMDirectory và FSDirectory

Mọi thao tác thì FSDirectory làm trên đĩa cứng còn RAMDirectory thực hiệntrong bộ nhớ, do đó nhanh hơn Mã(code) trong ví dụ 2.5 tạo ra hai chỉ mục: mộtđược thực hiện bởi FSDirectory và một được thực hiện bởi RAMDirectory

public class FSversusRAMDirectoryTest extends TestCase {

private Directory fsDir;

private Directory ramDir;

private Collection docs = loadDocuments(3000, 5);

protected void setUp() throws Exception {

String fsIndexDir = System.getProperty("java.io.tmpdir", "tmp") + System.getProperty("file.separator") + "fs-index";

ramDir = new RAMDirectory(); //Tạo Bản ghi có nội dung chứa trong RAM

fsDir = FSDirectory.getDirectory(fsIndexDir, true); // Tạo bản ghi mà nội dung

//được lưu trong ổ cứng }

public void testTiming() throws IOException {

long ramTiming = timeIndexWriter(ramDir);

long fsTiming = timeIndexWriter(fsDir);

assertTrue(fsTiming > ramTiming); // RAMDirectory nhanh hơn FSDirectory System.out.println("RAMDirectory Time: " + (ramTiming) + " ms");

System.out.println("FSDirectory Time : " + (fsTiming) + " ms");

}

private long timeIndexWriter(Directory dir) throws IOException {

long start = System.currentTimeMillis();

addDocuments(dir);

long stop = System.currentTimeMillis();

return (stop - start);

}

private void addDocuments(Directory dir) throws IOException {

IndexWriter writer = new IndexWriter(dir, new SimpleAnalyzer(),true);

for (Iterator iter = docs.iterator(); iter.hasNext();) {

Document doc = new Document();

String word = (String) iter.next();

private Collection loadDocuments(int numDocs, int wordsPerDoc) {

Collection docs = new ArrayList(numDocs);

Trang 33

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

for (int i = 0; i < numDocs; i++) {

StringBuffer doc = new StringBuffer(wordsPerDoc);

for (int j = 0; j < wordsPerDoc; j++) {

Dù có cách tốt hơn để xây dựng tiêu chuẩn, tiêu chuẩn này cũng đủ minh họa

ưu điểm về hiệu năng của RAMDirectory so với FSDirectory Nếu ta thực hiện ví

dụ 2.5 trên và thêm các giá trị của mergeFactor và minMergeDocs, thì ta thấy tốc

độ đánh chỉ mục của FSDirectory gần bằng với tốc độ của RAMDirectory Tuynhiên cũng cần lưu lý rằng nếu không có các tham số thêm vào thì FSDirectorykhông bao giờ nhanh được như RAMDirectory

Đánh chỉ mục theo lô bằng cách sử dụng RAMDirectory như bộ đệm

Nếu ta muốn cải thiện hiệu năng của việc đánh chỉ mục với Lucene và thựchiện các phương thức: mergeFactor, maxMergeDocs, maxMergeDocs của lớpIndexWriter một cách hiệu quả, ta phải sử dụng RAMDirectory để ghi bộ đệm tớiFSDirectory Cách làm đơn giản như sau:

1 Tạo một chỉ mục FSDirectory

2 Tạo một chỉ mục RAMDirectory

3 Thêm các Bản ghi vào chỉ mục RAMDirectory

4 Mỗi lần như thế đẩy tất các các bản ghi trong bộ đệm củaRAMDirectory vào FSDirectory

5 Quay lại bước 3

Ta có thể chuyển các quy tắc đó vào đoạn giã mã của Lucene như sau:

FSDirectory fsDir = FSDirectory.getDirectory("/tmp/index",true);

RAMDirectory ramDir = new RAMDirectory();

IndexWriter fsWriter = IndexWriter(fsDir,

new SimpleAnalyzer(), true);

IndexWriter ramWriter = new IndexWriter(ramDir,

new SimpleAnalyzer(), true);

while (there are documents to index) {

Trang 34

ramWriter = new IndexWriter(ramDir, new SimpleAnalyzer(),

true);

}

}

Đánh chỉ mục song song bằng cách sử dụng đa chỉ mục

Ý tưởng sử dụng RAMDirectory như một bộ đệm có thể thực hiện được, nhưhình 2.3 Ta có thể tạo ra ứng dụng đánh chỉ mục đa luồng bằng cách sử dụng nhiềuchỉ mục RAMDirectory song song với nhau, trong mỗi luồng ta trộn chỉ mục đơn

trên đĩa bằng cách sử dụng phương thức addIndexes(Directory[]) của IndexWriter

Hình 4: Một ứng dụng đa luồng sử dụng nhiều RAMDirectory cho việc đánh chỉ mục song song

2.2.3 Tìm kiếm trong ứng dụng

2.2.3.1 Thực thi một chức năng tìm kiếm đơn giản

Nếu ta muốn thêm chức năng tìm kiếm vào trong ứng dụng, ta phải lấy dữ liệu

đã được đánh chỉ mục, hiện tại đã xuất hiện cách tìm kiếm full-text cung cấp đếncho người dùng Lucene đã cung cấp nhiều cách thức tìm kiếm hiệu quả cho phép tatích hợp vào ứng dụng

Trong phần này ta sẽ tìm hiểu các lớp API của Lucene được dùng để tích hợpvào chức năng tìm kiếm

IndexSearcher Đầu vào cho việc tìm kiếm chỉ mục Tất cả việc tìm

kiếm đều qua IndexSearcher bằng việc sử dụng nhiều

Trang 35

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

phương thức search

Query( và các lớp

con) Tập trung vào các truy vấn đặc biệt

QueryParser Xử lý biểu thức nhập vào

Hits Truy xuất đến kết quả tìm kiếm, Hits được trả từ

phương thức search của IndexSearch

Bảng 3 Các lớp API của Lucene

Khi ta truy vấn đến chỉ mục Lucene, tập các kết quả(hit) được trả về, các kếtquả này sẽ có các điểm số mặc định Lucene tính toán điểm(một giá trị số tươngứng) cho mỗi bản ghi được truy vấn Trong đa số ứng dụng hiện thị kết quả tìmkiếm, người dùng thường chỉ truy xuất vào vài bản ghi đầu, vì thế sẽ không cầnthiết thu thập tất cả các kết quả mà chỉ cần lấy các bản ghi mà được hiển thị tớingười dùng

2.2.3.1.1 Tìm kiếm với thuật ngữ cụ thể

IndexSearcher là lớp trung tâm được dùng để tìm kiếm các bản ghi trong chỉmục, lớp này có nhiều phương thức tìm kiếm Ta có thể tìm kiếm với thuật ngữ cụ

thể bằng cách sử dụng phương thức search cơ bản Thuật ngữ là một giá trị được

ghép với tên trường của thuật ngữ, trong trường hợp này là chủ đề (subject)

Ta sẽ truy vấn các từ ant và junit, các từ này đã được đánh chỉ mục Ví dụ 3.1thực hiện truy vấn thuật ngữ và nhận về bản ghi mà nó tìm thấy Lucene cung cấpnhiều loại Truy vấn, TermQuery là loại cơ bản nhất

public class SearchingTest extends LiaTestCase {

public void testTerm() throws Exception {

IndexSearcher searcher = new IndexSearcher(directory);

Term t = new Term("subject", "ant");

Query query = new TermQuery(t);

Hits hits = searcher.search(query);

assertEquals("JDwA", 1, hits.length());

t = new Term("subject", "junit");

hits = searcher.search(new TermQuery(t));

assertEquals(2, hits.length());

searcher.close();

}

}

Ví dụ 3.1 Giải thích việc tìm kiếm đơn giản sử dụng TermQuery

Đối tượng Hits được trả về từ kết quả tìm kiếm, Hits truy xuất bên trong cácBản ghi Các bản ghi hoàn chỉnh không được trả về ngay lập tức, chúng được gọikhi có yêu cầu

2.2.3.1.2 Phân tích(parse) một truy vấn được nhập vào bởi người dùng:

QueryParser

Hai chức năng mà hầu hết ứng dụng tìm kiếm đều yêu cầu là: phân tích cácbiểu thức truy vấn phức tạp và truy xuất đến dữ liệu được trả về Phương thức tìm

Trang 36

kiếm của Lucene đưa ra đối tượng Query Việc phân tích một biểu thức truy vấn làhành động điều chỉnh các truy vấn được người dùng nhập vào thành các đối tượngTruy vấn thích hợp Đoạn mã sau phân tích hai biểu thức truy vấn và xác nhận cáchành động Sau khi nhận về các kết quá, ta thu thập các tiêu đề(title) từ bản ghi đầutiên tìm được:

public void testQueryParser() throws Exception {

IndexSearcher searcher = new IndexSearcher(directory);

Query query = QueryParser.parse("+JUNIT +ANT -MOCK",

"contents",new SimpleAnalyzer());

Hits hits = searcher.search(query);

assertEquals(1, hits.length());

Document d = hits.doc(0);

assertEquals("Java Development with Ant", d.get("title"));

query = QueryParser.parse("mock OR junit",

QueryParser.

QueryParser cần bộ phân tích(analyzer) để chia các đoạn truy vấn thành các

thuật ngữ Xét ví dụ trên, trong biểu thức thứ nhât, truy vấn gồm toàn chữ hoa Cácthuật ngữ của trường nội dung, tuy nhiên, chúng sẽ được đưa về dạng chữ thường

khi đánh chỉ mục QueryParser trong ví dụ này sử dụng SimpleAnalyzer, sẽ chuyển

thành chữ thường trước khi xây dựng đối tượng Query QueryParser chỉ tìm kiếmđọan mà sử dụng bộ phân tích

Sử dụng QueryParser

QueryParser có phương thức parse(), là phương thức dùng đơn giản nhất:

static public Query

parse(String query, String field, Analyzer analyzer)

throws ParseException

Chuỗi(String) truy vấn(query) là biểu thức đã được phân tích, ví dụ như :

“+cat+dog” Tham số thứ 2, trường(field) là tên của trường mặc định gắn với cácthuật ngửtong biểu thức Tham số cuối cùng là một bộ phân tích(analyzer) Phương

thức testQueryParser() của ví dụ trên đã giải thích cách dùng của phương thứuc

parse().

Xử lý các biểu thức truy vấn cơ bản với QueryParser

QueryParser sẽ chuyển các biểu thức truy vấn thành các kiểu truy vấn đượcxây dựng sẵn trong Lucene

Biểu thức truy

vấn

Các bản ghi tương ứng java Chứa thuật ngữ java trong trường mặc định

java junit chứa thuật ngữ java hoặc junit hoặc cả hai trong

Trang 37

Lọc và phân loại dữ liệu trên Web-Ứng dụng xây dựng hệ quản trị nội dung

java or junit trường mặc định

+java + junit

java AND junit

Chứa cả java và junit trong trường mặc định

Title : ant Chứa thuật ngữ ant trong trường title

java* Chứa các thuật ngữ bắt đầu với java như

javaserver, java.net java~ Chứa các thuật ngữ mà kết thức với từ java, như

 Bởi đường dẫn file hệ thống

Ta nên sử dụng hàm khởi tạo Thư mục, hàm này tách bạch việc tìm kiếm với

việc đánh chỉ mục Trong ví dụ test ở trên- LiaTestCase, cung cấp thư

mục(directory), thực thi một Thư mục Hàm này thực sự thực thi FSDirectory được

tải từ file chỉ mục hệ thống Phương thức setUp() mở một chỉ mục sử dụng phương

thức FSDirectory.getDirectory, với đường dẫn chỉ mục được định nghĩa trong JVM

public abstract class LiaTestCase extends TestCase {

private String indexDir = System.getProperty("index.dir");

protected Directory directory;

protected void setUp() throws Exception {

IndexSearcher searcher = new IndexSearcher(directory);

Sau khi khởi tao IndexSearcher, ta gọi phương thức của nó là search để thựchiện việc tìm kiếm

Trang 38

Bảng 5 Các phương thức tìm kiếm chính của IndexSearcher

IndexSearcher chỉ tìm kiếm các chỉ mục đã tồn tại tại thời điểm khiIndexSearcher được khởi tạo Nếu việc đánh chỉ mục xảy ra cùng thời điểm với việctìm kiếm thì các bản ghi mới được đánh chỉ mục sẽ không xuất hiện trong kết quảtìm kiếm

2.2.3.2.1 Làm việc với Hits

Khi gọi phương thức search(Query) ta có ngay đối tượng Hits sẵn sàng để sửdụng Kết quả của tìm kiếm được truy xuất thông qua Hits Đối tượng Hits cungcấp truy xuất hiệu quả tới kết quả tìm kiếm Các kết quả được sắp xếp tương ứngvới các từ

Có 4 phương thức trong thể hiện của Hits, chúng được liệt kê trong bảng 6

Phương thức Hits Giá trị trả về

length() Số các bản ghi có trong tập Hits

score(n) chuẩn hóa điểm của n bản ghi đầu tiên( điểm từ 0 đến

1 )

Bảng 6 Phương thức Hits cho hiệu quả truy xuất kết quả tìm kiếm

Đối tượng Hits sẽ lưu một số các bản ghi

2.2.3.3 Tạo các đối tượng truy vấn

2.2.3.3.1 Tìm kiếm bằng thuật ngữ: TermQuery

Cách cơ bản nhất để tìm kiếm một chỉ mục là dùng một thuật ngữ cụ thể.Thuật ngữ là phần nhỏ nhất đã được đánh chỉ mục, bao gồm tên trường và cặp giátrị văn bản Ví dụ 3.1 cung cấp một cách tìm kiếm cho thuật ngữ cụ thể Mã này xâydựng một đối tượng Thuật ngữ:

Term t = new Term("contents", "java");

Một TermQuery truy xuất một Thuật ngữ đơn:

Query query = new TermQuery(t);

Tất cả bản ghi có chứa từ java trong trường contents được trả về bởi quá trìnhtìm kiếm bằng cách sử dụng TermQuery

TermQuery rất hữu ích cho việc thu thập các bản ghỉ bằng khóa Nếy bản ghi

đã được đánh chỉ mục sử dụng Field.Keyword(), các giá trị giống nhau có thể được

Ngày đăng: 19/06/2023, 11:00

HÌNH ẢNH LIÊN QUAN

Bảng 1 So sánh các tính năng của các hệ CMS phổ biến - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Bảng 1 So sánh các tính năng của các hệ CMS phổ biến (Trang 14)
Hình 1: Các ứng dụng tiêu biểu tích hợp Lucene - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 1 Các ứng dụng tiêu biểu tích hợp Lucene (Trang 19)
Hình 2: Đánh chỉ mục với Lucene chia thành 3 thao tác: chuyển dữ liệu    thành văn bản, phân tích dữ liệu đó và lưu chúng vào chỉ mục(index) - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 2 Đánh chỉ mục với Lucene chia thành 3 thao tác: chuyển dữ liệu thành văn bản, phân tích dữ liệu đó và lưu chúng vào chỉ mục(index) (Trang 26)
Hình dung rằng ta phải viết một ứng dụng để đánh chỉ mục và tìm kiếm thư điện tử của một tổ chức - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình dung rằng ta phải viết một ứng dụng để đánh chỉ mục và tìm kiếm thư điện tử của một tổ chức (Trang 31)
Hình 4: Một ứng dụng đa luồng sử dụng nhiều RAMDirectory cho việc  đánh chỉ mục song song - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 4 Một ứng dụng đa luồng sử dụng nhiều RAMDirectory cho việc đánh chỉ mục song song (Trang 34)
Hình 5: Luồng từ tố với thông tin vị trí và độ dài từ tố(offset) - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 5 Luồng từ tố với thông tin vị trí và độ dài từ tố(offset) (Trang 44)
Hình 6: Mô hình hệ thống cần xây dựng - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 6 Mô hình hệ thống cần xây dựng (Trang 48)
Hình 8: Cấu trúc của trang - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 8 Cấu trúc của trang (Trang 57)
Hình 9: MainNavigation - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 9 MainNavigation (Trang 58)
Hình 11: Đăng ký đăng nhập, thay đổi mật khẩu - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 11 Đăng ký đăng nhập, thay đổi mật khẩu (Trang 60)
Hình 12: Quản lý thông tin về công ty - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 12 Quản lý thông tin về công ty (Trang 61)
Bảng   người   dùng   gồm   có   các   trường:   UserID(khóa),   Username(tên), Password(mật khẩu), email(thư điện tử),.. - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
ng người dùng gồm có các trường: UserID(khóa), Username(tên), Password(mật khẩu), email(thư điện tử), (Trang 62)
Hình 14: Tạo chi nhánh mới - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 14 Tạo chi nhánh mới (Trang 62)
Hình 15: Thông tin về vị trí - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 15 Thông tin về vị trí (Trang 63)
Hình 16: Các luật lọc - Lọc Và Phân Loại Dữ Liệu Trên Web-Ứng Dụng Xây Dựng Hệ Quản Trị Nội Dung.docx
Hình 16 Các luật lọc (Trang 64)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w