Bài tập lớn xử lý ngôn ngữ tự nhiênTRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG──────── * ─────...
Bài tập lớn xử lý ngôn ngữ tự nhiênMỤC LỤCMỤC LỤC............................................................................
Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN I: NGUYÊN LÝ VÀ MÔ HÌNH CHUNG CỦA SEARCH ENGINE1. Giới thiệu chungMáy tìm kiếm Sea...
Bài tập lớn xử lý ngôn ngữ tự nhiên2. Phân loạiXét theo phương pháp tìm kiếm thì các Search Engine được chia làm hai loại ...
Bài tập lớn xử lý ngôn ngữ tự nhiên3. Nguyên lý hoạt động của search engineSearch engine điều khiển robot đi thu thập thôn...
Bài tập lớn xử lý ngôn ngữ tự nhiên4. Mô hình của seach engine4.1. Bộ tìm duyệt CrawlerBộ tìm duyệt Crawler thu thập các t...
Bài tập lớn xử lý ngôn ngữ tự nhiên4.1.2 Mô hình CrawlerCrawler được thiết kế để có khả năng ghé thăm các trang theo thứ t...
Bài tập lớn xử lý ngôn ngữ tự nhiênDựa trên khái niệm trực giác này chúng ta đưa ra định nghĩa freshness và age như sau:- ...
Bài tập lớn xử lý ngôn ngữ tự nhiênhiệu quả để bộ Indexer và bộ CollectionAnalysis có thể sử dụng để lấy các trang từ khod...
Bài tập lớn xử lý ngôn ngữ tự nhiên4.3. Bộ lập chỉ mục IndexerCác tài liệu tải về cần phải được xử lý thích hợp trước khi ...
Bài tập lớn xử lý ngôn ngữ tự nhiênTa xác định mục từ của một văn bản dựa vào chính nội dung của văn bản đó, hoặctiêu đề h...
Bài tập lớn xử lý ngôn ngữ tự nhiêntục từ lúc khởi động hệ thống, chúng phụ thuộc lẫn nhau về mặt dữ liệu nhưng độc lậpvới...
Bài tập lớn xử lý ngôn ngữ tự nhiên4.5. Phân hạng trang (Page Rank)Sergey Brin và Lawrence Page đã đưa ra một phương pháp ...
Bài tập lớn xử lý ngôn ngữ tự nhiênVí dụ nhé Page A của bạn có 3 trang page B (PR=6) page C (PR=3) và page D (PR = 4).Link...
Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN II: FRAMEWORK LUCENE1. Giới thiệuLucene là một thư viện mã nguồn mở viết bằng java...
Bài tập lớn xử lý ngôn ngữ tự nhiênCác ứng dụng tìm kiếm có nhiều biến thể khác nhau. Một số chạy như một thànhphần nhỏ đư...
Bài tập lớn xử lý ngôn ngữ tự nhiênTa sẽ lần lượt xem xét các thành phần của hệ thống search engine2.1. Các thành phần ind...
Bài tập lớn xử lý ngôn ngữ tự nhiênLucene như là một thư viện core và nó không cung cấp bất cứ chức năng nàođể hỗ trợ thu ...
Bài tập lớn xử lý ngôn ngữ tự nhiênTrong bước này cũng có thể cần áp dụng các logic nghiệp vụ để tạo ra cáctrường. Ví dụ, ...
Bài tập lớn xử lý ngôn ngữ tự nhiêna. Search user interfaceUser interface là phần mà người sử dụng tương tác trực tiếp trê...
Bài tập lớn xử lý ngôn ngữ tự nhiên• Mô hình logic thuần túy (Pure Boolean model): Các tài liệu chỉ có 2trạng thái hoặc kh...
Bài tập lớn xử lý ngôn ngữ tự nhiên• Document• FieldHình bên dưới chỉ ra vai trò của các lớp trên tham gia vào quá trình đ...
Bài tập lớn xử lý ngôn ngữ tự nhiênthì ta phải tách plain text ra trước khi đánh chỉ mục. Để thực hiện nhiệm vụtách plain ...
Bài tập lớn xử lý ngôn ngữ tự nhiên3.2. Các lớp chính tìm kiếmCác lớp được cung cấp để thực hiện chức năng tìm kiếm cũng k...
Bài tập lớn xử lý ngôn ngữ tự nhiênĐoạn code trên hướng dẫn Lucene tìm top 10 tài liệu chứa từ “lucene” trongtrường conten...
Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN III: ỨNG DỤNG NUTCH1. Giới thiệu về Nutch1.1. Định nghĩaNutch là một search engine...
Bài tập lớn xử lý ngôn ngữ tự nhiên• JavaScript: không chỉ phân tách các link từ mã js như các searchengine khác mà còn ph...
Bài tập lớn xử lý ngôn ngữ tự nhiên2. Các nền tảng phát triển của Nutch2.1. LuceneLucene là một bộ thư viện nguồn mở có ch...
Bài tập lớn xử lý ngôn ngữ tự nhiênCác thành phần được mô tả chi tiết sau đây3.1. Crawler• Hệ thống thu thập thông tin đượ...
Bài tập lớn xử lý ngôn ngữ tự nhiêncác webdb. Đầu ra Fetcherlà các dữ liệu lấy từ các trang trongfetchlist. Đầu ra Fetcher...
Bài tập lớn xử lý ngôn ngữ tự nhiênhoạt động liên tiếp nhau tạo thành một vòng lặp. Tại mỗi lần lặp, crawler sẽ tạo ramột ...
Bài tập lớn xử lý ngôn ngữ tự nhiênLink Invertor sẽ lấy dữ liệu từ tất cả các segment để xây dựng linkdb. Linkdbchứa tất c...
Bài tập lớn xử lý ngôn ngữ tự nhiênTÀI LIỆU THAM KHẢO1. Bài giảng xử lý ngôn ngữ tự nhiên – Ths Hoàng Anh Việt2. Lucene in...
Upcoming SlideShare
Loading in...5
×

Bai tap lon xlnntn

1,214

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,214
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
67
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bai tap lon xlnntn

  1. 1. Bài tập lớn xử lý ngôn ngữ tự nhiênTRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘIVIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG──────── * ───────BÀI TẬP LỚNMÔN: XỬ LÝ NGÔN NGỮ TỰ NHIÊNĐỀ TÀI: TÌM HIỂU KIẾN TRÚC CỦA SEARCH ENGINEFRAMEWORK LUCENE & ỨNG DỤNG NUTCHGVHD: Th.s Hoàng Anh ViệtNhóm sinh viên:Nguyễn Thế Anh 20080070Trần Anh Thơ 20082569Nguyễn Vương Quyền 20082142Nguyễn Văn Hưng 20081293Lớp: Công nghệ phần mềm K53Hà Nội - 11/20121
  2. 2. Bài tập lớn xử lý ngôn ngữ tự nhiênMỤC LỤCMỤC LỤC.......................................................................................................................................2PHẦN I: NGUYÊN LÝ VÀ MÔ HÌNH CHUNG CỦA SEARCH ENGINE................................31. Giới thiệu chung.......................................................................................................................32. Phân loại...................................................................................................................................42.1. Máy tìm kiếm thông thường.............................................................................................42.2. Máy siêu tìm kiếm - Meta Search Engine.........................................................................43. Nguyên lý hoạt động của search engine..................................................................................54. Mô hình của seach engine........................................................................................................64.1. Bộ tìm duyệt Crawler........................................................................................................64.2. Kho dữ liệu Repository.....................................................................................................84.3. Bộ lập chỉ mục Indexer...................................................................................................104.4. Bộ tìm kiếm thông tin – Search Engine..........................................................................114.5. Phân hạng trang (Page Rank)..........................................................................................13PHẦN II: FRAMEWORK LUCENE............................................................................................152.1. Các thành phần indexing.................................................................................................17PHẦN III: ỨNG DỤNG NUTCH.................................................................................................262
  3. 3. Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN I: NGUYÊN LÝ VÀ MÔ HÌNH CHUNG CỦA SEARCH ENGINE1. Giới thiệu chungMáy tìm kiếm Search Engine nguyên thuỷ là một phần mềm nhằm tìm ra các trangtrên mạng Internet có nội dung theo yêu cầu người dùng dựa vào các thông tin mà ngườisử dụng cung cấp qua từ khoá tìm kiếm. Máy tìm kiếm sẽ truy tìm trong cơ sở dữ liệu củanó và trả về danh mục các trang web có chứa từ khoá mà người sử dụng đưa vào ban đầu.Thuật ngữ “Search Engine” được dùng chung để chỉ 2 hệ thống tìm kiếm: Một docác chương trình máy tính tự động tạo ra (Crawler-Based Search Engines) và dạng thưmục Internet do con người quản lý (Human-Powered Directories). Hai hệ thống tìm kiếmnày tìm và lập danh mục website theo 2 cách khác nhau.Crawler-Based Search Engines: Các máy tìm kiếm loại này chúng sử dụng cácchương trình máy tính, được gọi là Robots, Spiders, hay Crawlers để lần tìm các trangtrên mạng, rồi tự động phân tích các trang lấy về và đưa vào cơ sở dữ liệu của nó. Khi cómột yêu cầu tìm kiếm, các Search Engine đối chiếu từ khóa cần tìm vào trong bảng chỉmục và trả về các thông tin lưu trữ tương ứng. Các cỗ máy tìm kiếm loại này có cơ chếcập nhật nội dung của web định kỳ để phát hiện sự thay đối (nếu có) của các trang web.Human-Powered Directories: các thư mục Internet hoàn toàn phụ thuộc vào sựquản lý của con người. Nếu người sử dụng muốn các Search Engine tìm thấy trang webcủa mình thì họ phải đăng ký vào thư mục bằng cách gửi bản đăng ký đến ban biên tậpcủa Search Engine.Ngày nay hầu hết các hệ thống tìm kiếm đều là sự tổng hợpcủa hệ thống tìm kiếmtự động và hệ thống tìm theo thư mục do người dùng quản lý.3
  4. 4. Bài tập lớn xử lý ngôn ngữ tự nhiên2. Phân loạiXét theo phương pháp tìm kiếm thì các Search Engine được chia làm hai loại chính: Tìmkiếm thông thường và siêu tìm kiếm.2.1. Máy tìm kiếm thông thườngCác máy tìm kiếm thông thường thực hiện công việc tìm kiếm theoqui trình thuthập tài liệu, phân loại và tạo chỉ mục. Chúng gồm hai loại,Search Engine sử dụng thưmục chủ đề và Search Engine tạo chỉ mục tự động.Các Search Engine sử dụng thư mục chủ đề phân lớp sẵn các trangtrên Internetvào các thư mục chủ đề và theo các cấp chi tiết hơn của chủ đề.2.2. Máy siêu tìm kiếm - Meta Search EngineMeta Search Engine là loại máy truy tìm ảo, nó hoạt động dựa trên sự tồn tại củacác Search Engine sẵn có. Các Meta Search Engine không có cơ sở dữ liệu của riêngmình. Khi có yêu cầu tìm kiếm máy siêu tìm kiếm sẽ gửi từ khóa đến các Search Enginekhác một cách đồng loạt và nhận về các kết quả tìm được. Nhiệm vụ còn lại của máy siêutìm kiếm là phân tích và phân hạng lại các kết quả tìm được.4
  5. 5. Bài tập lớn xử lý ngôn ngữ tự nhiên3. Nguyên lý hoạt động của search engineSearch engine điều khiển robot đi thu thập thông tin trên mạng thông qua các siêuliên kết ( hyperlink ). Khi robot phát hiện ra một site mới, nó gởi tài liệu (web page) vềcho server chính để tạo cơ sở dữ liệu chỉ mục phục vụ cho nhu cầu tìm kiếm thông tin.Bởi vì thông tin trên mạng luôn thay đổi nên robots phải liên tục cập nhật các sitecũ. Mật độ cập nhật phụ thuộc vào từng hệ thống search engine. Khi search engine nhậncâu truy vấn từ user, nó sẽ tiến hành phân tích, tìm trong cơ sở dữ liệu chỉ mục & trả vềnhững tài liệu thoả yêu cầu.5
  6. 6. Bài tập lớn xử lý ngôn ngữ tự nhiên4. Mô hình của seach engine4.1. Bộ tìm duyệt CrawlerBộ tìm duyệt Crawler thu thập các trang trên Internet rồi chuyển chobộ đánh chỉmục Indexer. Crawler xuất phát từ tập các URL ban đầu S0. Đầutiên nó sắp xếp các phầntử trong tập S0 vào một hàng đợi, sau đó lấy dầncác URL theo thứ tự và tải về các trangtương ứng, Crawler trích tất cả cácURL có trong các trang vừa tải về rồi lại đưa vào hàngđợi. Quá trình trêntiếp tục cho đến khi Crawler quyết định dừng lại. Do số lượng cáctrang tảivề rất lớn và tốc độ thay đổi nhanh chóng của Web nên xuất hiện những vấnđềcần giải quyết:• Lựa chọn các trang để tải về.• Cách cập nhật các trang: Crawler phải xem xét trang nào nên ghé thăm lạitrang nào không.• Song song hoá quá trình dò tìm trang web: Các Crawlers song songphải đượcbố trí một cách hợp lý sao cho một Crawler không ghé thăm cáctrang mà mộtCrawler khác đã thăm.4.1.1. Page selection (lựa chọn các trang)Bộ tìm duyệt Crawler tải về các trang theo thứ tự trang nào “quantrọng” sẽ tải vềtrước. Như vậy ta phải tìm hiểu cách mà Crawler xác địnhmức độ quan trọng của cáctrang.Cho một trang web P, ta định nghĩa mức độ “quan trọng” của trang P theo cáccách sau:- Interest Driven: là phương pháp xác định mức độ quan trọng của các trang dựavào mức độ quan tâm của người sử dụng với các trang đó.- Popularity Driven: xác định mức độ quan trọng của một trang dựa vào mức độphổ biến của trang. Một trong các cách để định nghĩa độ phổ biến của trang làsử đếm số liên kết đến trang đó (số back link).- Location Driven: xác định mức độ quan trong của trang P dựa vào địa chỉ củanó.6
  7. 7. Bài tập lớn xử lý ngôn ngữ tự nhiên4.1.2 Mô hình CrawlerCrawler được thiết kế để có khả năng ghé thăm các trang theo thứ tựcác trang cómức độ quan trọng cao hơn thăm trước các trang có hạng thấphơn thăm sau. Bộ Crawlerđánh giá các trang dựa vào giá trị phân hạng.Từsự đánh giá này Crawler biết được cáctrang có mức độ quan trọng cao hơnđể lấy về trong lần kế tiếp. Để đánh giá chất lượngcủa Crawler người ta cóthể định nghĩa độ đo chất lượng quality metric của nó bằng mộttrong haicách sau:- Crawl & stop: Bộ Crawler C xuất phát từ trang khởi đầu P0 và dừng lại sau khighé thăm k trang, k là số lượng trang mà Crawler có thể tải về trong một lầnduyệt. Một Crawler tốt sẽ ghé thăm các trang theo thứ tự R1,….Rk trongđó R1là trang có thứ hạng cao nhất, lần lượt đến R2,… . Gọi R1, …,RK là cáctranghot. Trong số k trang được Crawler ghé thăm chỉ có m trang (m<=k) sẽđượcsắp thứ hạng cao hơn hoặc bằng trang Rk- Crawl & Stop with Threshold: vẫn giả sử rằng bộ Crawler ghé thăm ktrang.Tuy nhiên lúc này đích quan trọng G đã được cho sẵn, và bất cứ trang nào cóđộ quan trọng lớn hơn G thì đều được coi là trang hot.- Độ đo thứ hạng (Ordering Metrics): Một Crawler lưu giữ những URLs mà nóđã ghé thăm trong quá trình dò tìm vào một hàng đợi. Sau đó nó lựa chọnmộtURL trong hàng đợi cho lần ghé thăm tiếp theo. Ở mỗi lần lựa chọn thìCrawler chọn URL u có giá trị Orderingcao nhất để ghé thăm. Độ đo thứ hạng(Ordering Metric) được thiết lập dựa vào một trong các độ đo khác. Ví dụ nếuta đang thực hiện tìm những trang có giá trị IB(P) cao, thì ta sẽ lấygiá trị IB’(P)làm độ đo thứ hạng, trong đó P là trang mà được trang u trỏ tới.4.1.3 Page RefreshKhi Crawler lựa chọn và tải về các trang “quan trọng”, sau một khoảng thời giannhất định nó phải thực hiện cập nhật các trang đó. Có rất nhiều cách để cập nhật các trangweb, và các cách khác nhau sẽ cho các kếtquả khác nhau. Sau đây là hai cách:- Uniform refresh policy: Chiến lược cập nhật đồng loạt. Crawler ghé thăm lạitất cả các trang theo cùng một tần suất f.- Proportional refresh policy: Cập nhật theo tỷ lệ, một trang thường xuyên thayđổi thì Crawler ghé thăm thường xuyên hơn. Để chính xác hơn ta giả sử μi làtần suất thay đổi của trang ei, và fi là tần suất mà Crawler ghé thăm lại trang ei.Crawler phải ước lượng μi của mỗi trang để thiết lập chiến lược ghé thăm lại mỗitrang thích hợp.Việc ước lượng này dựa vào quá trình thay đổi của trang trước đó màCrawler đã ghi lại được.Độ đo cập nhật (freshness metric):Giả sử có hai tập các trang web A, B mỗi tập gồm 20 trang, trong đó tập A cótrung bình 10 trang được cập nhật, tập B có 15 trang được cập nhật. Người ta nói rằng tậpB “cập nhật” hơn (“fresher”) tập A. Thêm nữa nếu tập A được cập nhật một ngày trướcđây, tập B được cập nhật một năm trước đây thì ta nói tập A hiện hành hơn (“morecurrent”) tập B, dẫn đến khái niệm tuổi “age”:7
  8. 8. Bài tập lớn xử lý ngôn ngữ tự nhiênDựa trên khái niệm trực giác này chúng ta đưa ra định nghĩa freshness và age như sau:- Freshness: Đặt S={e1,…,en} là tập hợp N trang đã được Crawler tải về.reshness được định nghĩa như sau: Freshness của trang ei tại thời điểm t là- Age: Để biết được “tuổi” của một tập chúng ta định nghĩa khái niệm “age” nhưsau: “age” của trang ei tại thời điểm t làA(ei, t)Freshness và age của tập các trang cục bộ có thể thay đổi theo thời gian. Do vậychúng ta cần tính độ freshness trung bình trong một khoảng thời gian dài và sử dụng giátrị này làm độ freshness của cả tập hợp.Chiến lược cập nhật Trong một khoảng thời gian nhất định các Crawler chỉ có thểtải về hoặc cập nhật số lượng giới hạn các trang. Tuỳ thuộc vào chiến lược cập nhật trang,nguồn download trang sẽ được phân phối cho các trang khác nhau theo các cách khácnhau.4.2. Kho dữ liệu RepositoryBộ phận page Repository là một hệ thống lưu trữ có khả năng mở rộng. Hệ thốngnày quản lý một tập lớn các trang web. Nó thực hiện hai chức năngchính: chức năng thứnhất, cho phép Crawler lưu trữ các trang web. Thứ hai,nó phải cung cấp API truy cập8
  9. 9. Bài tập lớn xử lý ngôn ngữ tự nhiênhiệu quả để bộ Indexer và bộ CollectionAnalysis có thể sử dụng để lấy các trang từ khodữ liệu.4.2.1 Các yêu cầu đối với repository- Một Repository quản lý một tập các đối tượng dữ liệu “data object” lớn.- Có khả năng mở rộng- Có cách truy cập kép (dual access mode): Truy nhập ngẫu nhiên được sử dụngđể nhanh chóng nhận về trang web và gán cho mỗi trang một định danh duynhất. Truy cập tuần tự được sử dụng để nhận về tập hợp hoàn chỉnh, hay vàitập hợp con lớn.- Có thể cập nhật khối lượng lớn.- Loại bỏ những trang không còn tồn tại.- Kho dữ liệu được thiết kế phân tán (Distributed Repository).4.2.2 Nguyên tắc phân tán trangCác trang có thể được gán cho các nút dựa trên một số nguyên tắc khác nhau. Nhưnguyên tắc phân tán đồng bộ (Uniform distribution), tất cả các nút được xử lý đồng nhất.Một trang có thể được gán cho một nút bất kỳ trong hệ thống. Các nút sẽ chứa các phầncủa tập hợp các trang tuỳ theo khả năng lưu trữ của nút. Ngược lại, với cách phân tánbăm (hash distribution) việc định vị các trang vào các nút dựa trên định danh của trang.4.2.3 Phương pháp tổ chức trang vật lýTrong một nút đơn, có 3 thao tác có thể thực hiện: thêm trang/chèntrang (pageaddition/insertion), truy cập tuần tự tốc độ cao, và truy cập ngẫu nhiên. Cách tổ chức cáctrang theo kiểu vật lý tại mỗi nút chính là việc xem xét xem mức độ hỗ trợ mỗi thao táctrên của nút đó.4.2.4 Chiến lược cập nhậtViệc thiết kế chiến lược cập nhật phụ thuộc vào tính chất của Crawler. Có hai cáchcấu trúc Crawler: Batch-mode hoặc Steady Crawler: một Crawler kiểu batch-mode đượcxử lý định kỳ mỗi tháng một lần, và cho phép duyệt một số lần nhất định (hoặc đến khitoàn bộ các trang trong tập đích đã được duyệt) sauđó Crawler dừng lại. Với bộ Crawlernhư trên thì kho dữ liệu web được cập nhật trong một số ngày nhất định trong tháng.Ngược lại, một bộ Crawler ổn định (steady Crawler) chạy liên tục, nó liên tục cập nhật vàbổ sung các trang mới cho Repository.9
  10. 10. Bài tập lớn xử lý ngôn ngữ tự nhiên4.3. Bộ lập chỉ mục IndexerCác tài liệu tải về cần phải được xử lý thích hợp trước khi thực hiện việc tìm kiếm.Việc sử dụng các từ khoá hay thuật ngữ để mô tả nội dung của tài liệu theo một khuôndạng ngắn gọn hơn được gọi là tạo chỉ mục cho tài liệu.Modul Indexer và Collection Analysis có chức năng tạo ra nhiều loại chỉ mục khácnhau. Modul Indexer tạo ra hai loại chỉ mục chính đó là chỉ mục Text Index (chỉ mục nộidung) và chỉ mục Structure Index (chỉ mục liên kết). Dựa vào hai loại chỉ mục này bộCollection Analysis tạo ra nhiều loại chỉ mục hữu ích khác:Link Index: tạo chỉ mục liên kết, các đoạn web đã duyệt được biểu diễn dưới dạngđồ thị với các đỉnh và các cạnh.Text Index: Phương pháp đánh chỉ mục dựa theo nội dung (text-based) là mộtphương pháp quan trọng để định danh các trang có liên quan đến yêu cầu tìm kiếm.Chỉ mục kết hợp: Số lượng và kiểu của các chỉ mục Utility được quy định bởi bộCollection Analysis tuỳ thuộc vào chức năng của bộ máy truy vấn và kiểu thông tin màmodul Ranking sử dụng.4.3.1 Các bước lập chỉ mụcBước 1: Xác định các mục từ, khái niệm có khả năng đại diện cho vănbản sẽ đượclưu trữ.Bước 2: Xác định trọng số cho từng mục từ, trọng số này là giá trịphản ánh tầmquan trọng của mục từ đó trong văn bản.4.3.1.1 Xác định mục từ quan trọng10
  11. 11. Bài tập lớn xử lý ngôn ngữ tự nhiênTa xác định mục từ của một văn bản dựa vào chính nội dung của văn bản đó, hoặctiêu đề hay tóm tắt nội dung của văn bản đó.Thông thường việc lập chỉ mục tự động bắt đầu bằng việc khảo sát tần số xuấthiện của từng loại từ riêng rẽ trong văn bản.Đặc trưng xuất hiện của từ vựng có thể được định bởi “thứ hạng-tần số”(Rank_Frequency) Các bước để xác định một mục từ quan trọng- Cho một tập hợp n tài liệu, thực hiện tính toán tần số xuất hiện củacác mục từtrong tài liệu đó.- Ký hiệu Fik (Frequency): là tần số xuất hiện của mục từ k trong tài liệu I- Xác định tổng tần số xuất hiện TFk (Total Frequency) cho mỗi từbằng cáchcộng những tần số của mỗi mục từ duy nhất trên tất cả n tài liệu.TFk =- Sắp xếp các mục từ theothứ tự giảm dần của tần số xuất hiện.Chọn một giá trịlàm ngưỡng và loại bỏ tất cả những từ có tổng tầnsố xuất hiện cao hơn ngưỡngnày (stop-word).4.3.1.2 Tính trọng số của mục từTrọng số của mục từ: là tần số xuất hiện của mục từ trong toàn bộ tàiliệu, những từthường xuyên xuất hiện trong tất cả các tài liệu thì “ít có ýnghĩa hơn” là những từ chỉ tậptrung trong một số tài liệu.Ngược lại khi tần số xuất hiện của mục từ k trong tập tài liệu càngcao thì mục từđó càng có ý nghĩa.Lập chỉ mục tự động cho tài liệu là xác định tự động mục từ chỉ mụccho các tàiliệu.Loại bỏ các từ stop-word vì những từ này có độ phân biệtkém và không thể sử dụngđể xác định nội dung của tài liệu.Bước tiếp theo là chuẩn hoá mục từ, tức là đưa mục từ về dạngnguyên gốc bằngcách loại bỏ tiền tố, hậu tố, và các biến thể khác của từ nhưtừ ở dạng số nhiều, quá khứ,...4.3.2 Cấu trúc của chỉ mục đảoSau khi phân tích các trang web, và thực hiện tách các từ, chuẩn hoá các từ vềdạng nguyên gốc, loại bỏ các từ stop word. Ta thu được một danh mục các từ mỗi từđược gắn kèm danh sách các trang chứa từ đó. Danh mục này gọi là chỉ mục đảo(inverted index)4.4. Bộ tìm kiếm thông tin – Search EngineSearch engine là cụm từ dùng chỉ toàn bộ hệ thống bao gồm các thành phần chính nhưbộ thu thập thông tin, bộ lập chỉ mục & bộ tìm kiếm thông tin. Các bộ này hoạt động liên11
  12. 12. Bài tập lớn xử lý ngôn ngữ tự nhiêntục từ lúc khởi động hệ thống, chúng phụ thuộc lẫn nhau về mặt dữ liệu nhưng độc lậpvới nhau về mặt hoạt động.Search engine tương tác với user thông qua giao diện web, có nhiệm vụ tiếp nhận &trả về những tài liệu thoả yêu cầu của user.Tìm kiếm theo từ khóa là tìm kiếm các trang mà những từ trong câu truy vấn (query)xuất hiện, ngoại trừ stopword (các từ quá thông dụng như mạo từ a, an, the,…). Về mặthiển thị và sắp xếp kết quả trả về, một từ càng xuất hiện nhiều trong một trang thì trangđó càng được chọn để trả về cho người dùng.Và một trang chứa tất cả các từ trong câutruy vấn thì tốt hơn là một trang không chứa một hoặc một số từ. Ngày nay, hầu hết cácsearch engine đều hỗ trợ chức năng tìm cơ bản và nâng cao, tìm từ đơn, từ ghép, cụm từ,danh từ riêng, hay giới hạn phạm vi tìm kiếm như trên đề mục, tiêu đề, đoạn văn bản giớithiệu về trang web,…..Ngoài chiến lược tìm chính xác theo từ khoá, các search engine còn cố gắng “hiểu” ýnghĩa thực sự của câu hỏi thông qua những câu chữ trong truy vấn của người dùng. Điềunày được thể hiện qua chức năng sửa lỗi chính tả, tìm cả những hình thức biến đổi khácnhau của một từ, ví dụ: search engine sẽ tìm những từ như speaker, speaking, spoke khingười dùng nhập vào từ speak.12
  13. 13. Bài tập lớn xử lý ngôn ngữ tự nhiên4.5. Phân hạng trang (Page Rank)Sergey Brin và Lawrence Page đã đưa ra một phương pháp nhằm giúp cho côngviệc tính toán hạng trang. Phương pháp này dựa trên ý tưởng rằng: nếu có liên kết từtrang A đến trang B thì đó là một sự tiến cử của trang A đối với trang B. Nếu trang Bđược nhiều trang “quan trọng” hơn trỏ đến, còn trang C nào đó được ít trang “quan trọng”trỏ đến thì B cũng có độ quan trọng hơn C. Giả sử ta có một tập các trang Web với cácliên kết giữa chúng, khi đó ta có một đồ thị với các đỉnh là các trang Web và các cạnh làcác liên kết giữa chúng.PR được thể hiện với 11 giá trị: từ 0 – 10, chỉ số PR càng cao thì độ uy tính của trangweb đó càng lớn.Nếu bạn dùng trình duyệt firefox, bạn có thể dụng công cụ SearchStatus tại địa chỉhttps://addons.mozilla.org/en-US/firefox/addon/searchstatus/ . Hoặc bạn có thể vàohttp://seoquake.com để cài đặt công cụ SEOQuake, có thể xem với mọi trình duyệtCông thức tính PageRankPR(A) = (1-d) + d(PR(t1)/C(t1) + … + PR(tn)/C(tn)).- Trong đó PR(A) là Pagerank của trang A- t1, t2…tn là các trang liên kết tới trang A- C là số link outbound của trang nguồn t1, t2 …tn đó (link ra ngoài)- d là hệ số suy giảm (hệ số tắt dần của chuỗi)13
  14. 14. Bài tập lớn xử lý ngôn ngữ tự nhiênVí dụ nhé Page A của bạn có 3 trang page B (PR=6) page C (PR=3) và page D (PR = 4).Link tới Page B có 3 link dẫn ra ngoài, Page C có 6 link dẫn ra ngoài, Page D có 12 linkdẫn ra ngoàiVậy PR của A = 0.15 + 0.85*( 6/3 + 3/6 + 4/12) =2 (xấp xỉ)Một khi đã biết được công thức, ta có thể chủ động hơn khi trao đổi liên kết với các sitekhác. Chẳng hạn nếu bạn liên kết với một site PR =7,8 gì đó và site đó chỉ có 1 linkoutbound dẫn đến bài viết trên site của ta.14
  15. 15. Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN II: FRAMEWORK LUCENE1. Giới thiệuLucene là một thư viện mã nguồn mở viết bằng java cho phép dễ dàng tích hợpthêm chức năng tìm kiếm đến bất cứ ứng dụng nào. Nó cung cấp các API hỗ trợcho việc đánh chỉ mục và tìm kiếm . Lucene có thể được sử dụng để tích hợp chứcnăng tìm kiếm vào ứng dụng sẵn có hoặc xây dựng một search engine hoàn chỉnhLucene hỗ trợ các phần sau trong các bước của quá trình tìm kiếm với searchengine- Phân tích dữ liệu (dạng văn bản) để đánh chỉ mục: Analyze document- Đánh chỉ mục (Index document & Index)- Thực hiện việc xây dựng câu truy vấn và tìm kiếm trong chỉ mục: Build query,render result, run queryLucene có thể đánh chỉ mục, tìm kiếm bất cứ dạng dữ liệu gì miễn là các dạng dữliệu này có thể chuyển về dạng dữ liệu văn bản text. Do đó, Lucene không quantâm đến nguồn dữ liệu, định dạng dữ liệu thậm chí cả ngôn ngữ chỉ cần ta có thểchuyển đổi nó sang dạng văn bản. Nó có thể đánh chỉ mục các dữ liệu của servertừ xa hoặc trên máy cục bộ với các tập tin có định dạng khác nhau như txt, word,html, pdf…Hiện tại, Lucene đã được triển trên nhiều ngôn ngữ khác nhau như C#, PHP, C,C++, Python, Ruby…2. Lucene trong các thành phần của một ứng dụng tìm kiếmPhần này sẽ trình bày các thành phần thư viện Lucene hỗ trợ và các thành phầncần phải được tích hợp thêm để xây dựng một hệ thống search engine hoàn chỉnh.Như ta sẽ thấy, ứng dụng tìm kiếm sẽ thực hiện các bước truy lục các nội dungthông tin thô, tạo các tài liệu từ nội dung, tách ra văn bản từ các tài liệu nhị phânvà đánh chỉ mục tài liệu. Khi chỉ mục đã được xây dựng, ta sẽ cần xây dựng mộtgiao diện tìm kiếm, cách thực thi tìm kiếm và hiển thị kết quả tìm kiếm.15
  16. 16. Bài tập lớn xử lý ngôn ngữ tự nhiênCác ứng dụng tìm kiếm có nhiều biến thể khác nhau. Một số chạy như một thànhphần nhỏ được nhúng vào trong một ứng dụng. Một số có thể chạy trên mộtwebsite, một cơ sở hạ tầng server chuyên biệt và tương tác với nhiều người sửdụng thông qua trình duyệt web hoặc mobile. Số khác có thể chạy trong mạngintranet của một công ty và tìm kiếm những tài liệu nội bộ trong công ty đó.Nhưng các biến thể này đều có kiến trúc tổng thể giống nhau được minh họa nhưhình bên dưới16
  17. 17. Bài tập lớn xử lý ngôn ngữ tự nhiênTa sẽ lần lượt xem xét các thành phần của hệ thống search engine2.1. Các thành phần indexingGiả sử ta chúng ta cần tìm kiếm trên một số lượng lớn các file. Cách tiếp cậnthông thường là duyệt từng file xem có chứa từ hoặc cụm từ ta đưa ra hay không.Phương pháp này sẽ làm việc nhưng không hiệu quả nếu số lượng file hoặc kíchthước file là quá lớn. Để tìm kiếm hiệu quả hơn, ta cần đánh chỉ mục tập văn bảntìm kiếm, chuyển đổi chúng thành khuôn dạng cho phép ta tìm kiếm nhanh hơn vàloại bỏ tiến trình quét tuần tự. Tiến trình này được gọi là indexing và kết quả đầura của nó gọi là indexQuá trình indexing bao gồm một dãy các bước phân biệt mà chúng ta sẽ lần lượtlàm rõ sau đây.a. Thu thập nội dung (Acquire content)Bước đầu tiên là thu thập nội dung (acquire content). Tiến trình này sử dụngmột crawler hoặc spider để thu thập các nội dung cần thiết sẽ được đánh chỉmục. Các crawler sẽ chạy liên tục như một dịch vụ để đợi khi có những nộidung mới hoặc thay đổi, nó sẽ cập nhật các nội dung này.17
  18. 18. Bài tập lớn xử lý ngôn ngữ tự nhiênLucene như là một thư viện core và nó không cung cấp bất cứ chức năng nàođể hỗ trợ thu thập nội dung. Chúng ta có thể một số thư viện mã nguồn mở sẵncó để thực hiện chức năng thu thập nội dung thông tin sau• Solr: Một project con của Apache Lucene hỗ trợ thu thập thông tintrong CSDL quan hệ, XML feeds, xử lý các tài liệu thông qua Tika• Nutch: Một project con của Apache Lucene, có một crawler để thuthập nội dung của các website• Grub: Một web crawler mã nguồn mở• Heritrix, Droids, Aperture…Sau khi thu thập được các nội dung thông tin, chúng ta sẽ tạo ra các phần nhỏđược gọi là các tài liệu của nội dungb. Xây dựng tài liệu (Build Document)Khi ta đã có được các nội dung thô, ta phải chuyển các nội dung này thành cácđơn vị (units) thường được gọi là các document được sử dụng bởi searchengine. Document chứa một số trường có tên phân biệt với các giá trị tươngứng, ví dụ: title, body, abstract, author, url. Chúng ta phải thiết kế cách để chiacác dữ liệu thô thành các tài liệu và các trường cũng như cách để tính giá trịcho từng trường này. Thông thường, cách tiếp cận khá rõ ràng: một email trởthành một tài liệu, hoặc một file PDF hoặc một trang web trở thành một tàiliệu. Nhưng trong một số trường hợp thì không rõ ràng như thế, ví dụ: cách xửlý các file đính kèm trong một email. Liệu chúng ta có nên gộp tất cả các nộidung text lấy ra từ các file đính kèm thành một document hoặc tạo ra cácdocument phân biệtKhi ta làm việc theo các thiết kế này, ta sẽ cần phải lấy ra text từ các nội dungthông tin thô cho từng tài liệu. Nếu nội dung ban đầu đã ở dạng text bìnhthường và kiểu mã hóa được biết trước thì công việc là khá đơn giản. Nhưngtrong trường hợp các tài liệu ở dạng nhị phân (PDF, Microsoft office, Openoffice, Adobe flash, streaming video, audio multimedia) hoặc chứa các thẻ (cácthẻo phải được bỏ đi trước khi indexing) (RDF, XML, HTML) thì sao ? Ta sẽcần chạy các bộ lọc tài liệu để lấy ra được text từ các nội dung như thế trướckhi tạo search engine document.18
  19. 19. Bài tập lớn xử lý ngôn ngữ tự nhiênTrong bước này cũng có thể cần áp dụng các logic nghiệp vụ để tạo ra cáctrường. Ví dụ, nếu ta có một trường “body text” lớn, ta có thể chạy những bộphân tích ngữ nghĩa để lấy ra các thuộc tính như tên, vị trí, ngày, thời gian, vịtrí… để đưa vào các trường thích hợp.Lucene cung cấp API để xây dựng các trường và các document nhưng nókhông cung cấp bất cứ logic nào để xây dựng một document. Nó cũng khôngcung cấp bất cứ document filter nào. Ta có thể sử dụng thêm các thư viện nhưTika để thực hiện chức năng document filter.Sau khi tách ra được các document và các trường text thì search engine vẫnchưa thể đánh chỉ mục được ngay mà còn phải thông qua giai đoạn phân tíchvăn bảnc. Phân tích tài liệu (analyze document)Không có search engine nào đánh chỉ mục trực tiếp text, đúng hơn là text phảiđược chia nhỏ thành một dãy các phần tử nguyên tử được gọi là token. Bướcphân tích tài liệu sẽ thực hiện nhiệm vụ này. Từng token có thể coi là một từtrong ngôn ngữ và bước này sẽ xác định cách những trường văn bản trong mộtdocument được phân chia thành một dãy các token.Lucene cung cấp một tập các bộ phân tích được xây dựng sẵn, chúng sẽ giúpbạn kiểm soát quá trình phân tích dễ dàng hơn. Bước cuối cùng là đánh chỉmục cho documentd. Đánh chỉ mục tài liệu (Index document)Trong bước tiếp theo, document được thêm vào chỉ mục. Lucene cung cấp mọiđiều cần thiết cho bước này với các API đơn giản.2.2. Các thành phần tìm kiếm (Components for searching)Searching là quá trình tìm kiếm các từ trong một chỉ mục để tìm những tài liệu nơimà các từ đó xuất hiện. Chất lượng của tìm kiếm được mô tả dựa trên 2 độ đo làprecision và recall. Recall đo chất lượng của kết quả tìm ra có phù hợp hay khôngtrong khi precision đo mức độ loại bỏ các tài liệu không phù hợp. Chúng ta hãy lầnlượt xem các thành phần tìm kiếm của một search engine19
  20. 20. Bài tập lớn xử lý ngôn ngữ tự nhiêna. Search user interfaceUser interface là phần mà người sử dụng tương tác trực tiếp trên trình duyệt,ứng dụng desktop hoặc thiết bị di động khi họ tương tác với ứng dụng tìmkiếm. Lucene không cung cấp bất cứ giao diện tìm kiếm mặc định nào, nó phảiđược chúng ta tự xây dựng. Khi mà người sử dụng submit yêu cầu tìm kiếm,nó phải được dịch ra thành đối tượng Query phù hợp cho search engineb. Xây dựng truy vấn (Build query)Khi người sử dụng dùng search engine để tìm kiếm, họ sẽ submit yêu cầu tìmkiếm lên server. Sau đó, yêu cầu này phải được dịch thành đối tượng Querycủa search engine. Chúng ta gọi bước này là build queryCác đối tượng Query có thể đơn giản hoặc phức tạp. Lucene cung cấp một góiđược gọi là QueryParser để biến câu truy vấn người sử dụng nhập vào thànhđối tượng Query theo cú pháp tìm kiếm. Truy vấn có thể chứa các toán tửboolean, những truy vấn cụm hoặc những ký tự đại diện. Ngoài ra, truy vấn cóthể thêm vào các ràng buộc để hạn chế các tài liệu người sử dụng đó được phéptruy vấn. Một số ứng dụng cũng có thể sửa đổi câu truy vấn để thay đổi thứ tựkết quả tìm kiếm hoặc lọc những phần quan trọng, nếu boosting (thao tác thayđổi trọng số của các chỉ mục giúp hiển thị kết quả theo độ ưu tiên theo yêu cầu)không được thực hiện khi indexing. Thông thường, một website thương mạiđiện tử sẽ boost các loại sản phẩm mang lại lợi nhuận nhiều hơn hoặc filter cácsản phẩm.QueryParser mặc định của Lucene thường đáp ứng được yêu cầu của một ứngdụng thông thường. Đôi khi, chúng ta sẽ muốn sử dụng đầu ra của QueryParservà cộng thêm các logic riêng để hiệu chỉnh lại đối tượng Query. Bây giờ chúngta có thể sẵn sàng để thực thi yêu cầu tìm kiếmc. Search QuerySearch Query là quá trình tra cứu chỉ mục tìm kiếm và lấy ra các tài liệu khớpvới Query được sắp xếp theo thứ tự yêu cầu. Thành phần này bao đóng cáccông việc phức tạp bên trong của search engine và Lucene xử lý tất cả chúngcho bạn. Lucene cũng có thể mở rộng ở điểm này nên khá đơn giản nếu tamuốn tùy biến cách kết quả được thu thập, lọc, sắp xếp…Có 3 mô hình lý thuyết thông thường của tìm kiếm20
  21. 21. Bài tập lớn xử lý ngôn ngữ tự nhiên• Mô hình logic thuần túy (Pure Boolean model): Các tài liệu chỉ có 2trạng thái hoặc khớp hoặc không khớp đối với truy vấn yêu cầu vàchúng không được chấm điểm. Trong mô hình này không có điểmtương ứng với tài liệu khớp và các tài liệu khớp là không được sắp xếp,một truy vấn sẽ chỉ nhận diện được các bộ phù hợp• Mô hình không gian vector (Vector space model): Cả các truy vấn vàdocuments được mô hình hóa như các vector trong không gian nhiềuchiều. Sự phù hợp giữa một câu truy vấn và một tài liệu được tính toánbởi một số đo khoảng cách vector giữa các vector này• Mô hình xác suất (Probabilistic model): Trong mô hình này, ta phải tínhxác suất mà một tài liệu khớp với một câu truy vấn sử dụng cách tiếpcận xác suất đầy đủCách tiếp cận của Lucene kết hợp mô hình không gian vector và mô hình logicthuần túy và cho phép chúng ta quyết định xem mô hình nào sẽ được sử dụng.Cuối cùng, Lucene trả lại các tài liệu mà chúng ta sẽ hiển thị ra danh sách kếtquả cho người dùngd. Render resultsKhi chúng ta nhận được bộ các document khớp với truy vấn đã được sắp xếptheo thứ tự phù hợp thì chúng ta có thể hiển thị chúng đến giao diện ngườidùng.Đến đây, chúng ta đã kết thúc việc xem xét các thành phần của quá trình indexingvà searching trong ứng dụng search nhưng vẫn chưa hoàn thành.3. Các lớp chính của Lucene3.1. Các lớp chính đánh chỉ mụcMột số lớp chính để thực thi việc đánh chỉ mục bao gồm• IndexWriter• Directory• Analyzer21
  22. 22. Bài tập lớn xử lý ngôn ngữ tự nhiên• Document• FieldHình bên dưới chỉ ra vai trò của các lớp trên tham gia vào quá trình đánh chỉ mụcDưới đây là mô tả ngắn gọn chức năng của các lớp trêna. IndexWriterIndexWriter là thành phần trung tâm của quá trình đánh chỉ mục. Lớp này sẽtạo ra một chỉ mục mới hoặc mở một chỉ mục đã tồn tại để thêm, cập nhật, xóacác tài liệu (Document) trong chỉ mục đó. IndexWriter là một lớp cho phépchúng ta ghi lên chỉ mục nhưng không cho phép chúng ta đọc hoặc tìm kiếmtrên chỉ mục. IndexWriter cần một nơi nào đó để ghi chỉ mục và nơi đó gọi làDirectoryb. DirectoryLớp này mô tả vị trí chứa chỉ mục của Lucene. Directory là một lớp trừu tượngcài đặt các phương thức chung cho các lớp con. Ví dụ: Chúng ta có thể sử dụngFSDirectory.open để lấy thể hiện cụ thể FSDirectory của Directory, lớp nàycho phép ta lưu trữ các file chỉ mục trong một thư mục của hệ thống file.IndexWriter không thể đánh chỉ mục trực tiếp cho text trừ khi text được chianhỏ thành các từ phân biệt sử dụng Analyzerc. AnalyzerTrước khi văn bản (text) được đánh chỉ mục, nó sẽ được xử lý bởi mộtAnalyzer. Analyzer được xác định trong phương thức khởi tạo củaIndexWriter, nó có nhiệm vụ tách ta các tokens nào sẽ được đánh chỉ mục vàloại bỏ phần còn lại. Nếu nội dung được đánh chỉ mục không phải là plain text22
  23. 23. Bài tập lớn xử lý ngôn ngữ tự nhiênthì ta phải tách plain text ra trước khi đánh chỉ mục. Để thực hiện nhiệm vụtách plain text ra ta có thể sử dụng Tika. Analyzer là một lớp trừu tượng nhưngLucene cung cấp một vài cài đặt cụ thể của nó. Một số cài đặt thực hiện loại bỏcác stop word (các từ thông thường được sử dụng, không giúp phân biệt đượccác tài liệu với nhau VD: a, an, is, it…), một số thực hiện chuyển đổi các tokenthành chữ thường để tìm kiếm không phân biệt chữ hoa, chữ thường. CácAnalyzer là các thành phần quan trọng trong Lucene và có thể được sử dụngcho nhiều mục đích khác nữa ngoài nhiệm vụ lọc các ký tự đầu vào.Tiếp theo, tiến trình đánh chỉ mục đòi hỏi một tài liệu (Document) chứa cáctrường phân biệt (Field)d. DocumentLớp này mô tả tập hợp các trường (Field). Document có thể được coi như mộttài liệu ảo như một trang web, một thông điệp email hoặc một file text… Cáctrường của tài liệu mô tả tài liệu hoặc các siêu dữ liệu gắn với tài liệu đó. Cácnguồn dữ liệu gốc như một trường trong CSDL, một file microsoft office, mộtchương của một ebook là không phù hợp cho việc đánh chỉ mục trong Lucene.Chúng ta phải tách ra được các văn bản từ các tài liệu nhị phân trên và thêm nóvào như một thể hiện của Field để Lucene có thể xử lý. Các Field có thể là cácsiêu dữ liệu như author, title, content, date…Lucene chỉ xử lý các dữ liệu xâu và số, tức là nó chỉ hỗ trợ các kiểujava.lang.String, java.io.Reader và các kiểu số thông thường như int, float,double, long…Một Document là một container chứa nhiều Field và một Field là lớp chứa nộidung văn bản được đánh chỉ mụce. FieldTừng Document là một chỉ mục chứa một hoặc nhiều Field được đặt tên đượcđại diện bởi lớp Field. Từng Field có một tên, giá trị tương ứng và một tập cáclựa chọn để kiểm soát cách mà Lucene sẽ đánh chỉ mục giá trị của Field. Mộttài liệu có thể chứa nhiều hơn một Field cùng tên. Trong trường hợp này cácgiá trị của các field sẽ được nối với nhau trong khi đánh chỉ mục theo thứ tựcác field được thêm vào document.23
  24. 24. Bài tập lớn xử lý ngôn ngữ tự nhiên3.2. Các lớp chính tìm kiếmCác lớp được cung cấp để thực hiện chức năng tìm kiếm cũng khá đơn giản.Dưới đây là một số lớp chính• IndexSearcher• Term• Query• TermQuery• TopDocsa. IndexSearcherIndexSearcher có nhiệm vụ tìm kiếm các chỉ mục được đánh bởi IndexWriter.Có thể xem IndexSearcher như là một lớp mở chỉ mục theo kiểu read only. Nóyêu cầu một thể hiện Directory nắm giữ các chỉ mục đã được tạo ra trước đó vànó cũng cung cấp một số các phương thức tìm kiếm. Phương thức tìm kiếmđơn giản nhất yêu cầu 2 tham số là đối tượng Query và số lượng kết quả đượctrả lại, phương thức này sẽ trả lại đối tượng TopDocsVD:b. TermMột Term là một đơn vị cơ bản cho tìm kiếm. Tương tự như đối tượng Field,nó bao gồm một cặp giá trị xâu là tên của field và giá trị của field đó. Trongkhi tìm kiếm, ta có thể xây dựng đối tượng Term và sử dụng chúng cùng vớiTermQuery24
  25. 25. Bài tập lớn xử lý ngôn ngữ tự nhiênĐoạn code trên hướng dẫn Lucene tìm top 10 tài liệu chứa từ “lucene” trongtrường contents, sắp xếp các tài liệu bởi mức độ phù hợp giảm dần.c. QueryQuery là một lớp trừu tượng, nó chứa một số phương thức tiện ích và phươngthức được sử dụng nhiều là setBoost(float), nó sẽ nói với Lucene rằng truy vấnnày có trọng số cao hơn truy vấn kia. Ngoài ra, Lucene cung cấp một số lượngcác lớp con của lớp trừu tượng Query như: TermQuery, BooleanQuery,PhraseQuery, PrefixQuery, PhrasePrefixQuery…d. TermQueryTermQuery là kiểu cơ bản nhất của truy vấn được hỗ trợ bởi Lucene và nó làmột trong các kiểu truy vấn nguyên thủy. Nó được sử dụng để tìm kiếm các tàiliệu chứa các trường với giá trị phù hợp với truy vấn.e. TopDocsTopDocs là lớp mô tả bộ giá trị kết quả được trả về sau khi tìm kiếm. Nó làmột container chứa các con trỏ trỏ đến N kết quả được xếp hạng cao nhất.Trong đó kết quả là các tài liệu khớp với truy vấn yêu cầu. Với từng bản ghitrong N kết quả, TopDocs ghi lại các giá trị docID sẽ được sử dụng để lấy racác giá trị Document và các điểm trọng số của các tài liệu tương ứng25
  26. 26. Bài tập lớn xử lý ngôn ngữ tự nhiênPHẦN III: ỨNG DỤNG NUTCH1. Giới thiệu về Nutch1.1. Định nghĩaNutch là một search engine mã nguồn mở cài đặt trên ngôn ngữ lập trìnhJava. Nutch cung cấp tất cả các công cụ cần thiết để cho phép bạn tạo ra mộtsearch engine (SE) của riêng bạn.Cài đặt Nutch trên một trong các quy mô: hệ thống file cục bộ, intranethoặc trên một web nào đó.Cả ba cách cài đặt đó đều có những đặc tính khácnhau.Ví dụ: thu thập hệ thống file là đáng tin cậy hơn hai cách cài đặt kia vì có thểlỗi mạng xảy ra hay bộ nhớ cache không có sẵn.Các vấn đề với Nutch: Thu thập thông tin cần tìm kiếm trên hàng tỉ trangweb cần giải quyết một vấn đề là chúng ta sẽ bắt đầu từ đâu? Bao nhiêu lần thìchúng ta thu thập lại? Chúng ta sẽ phải xử lí các trường hợp như link bị hỏng, cácsites không hồi đáp và các nội dung trùng lặp hay khó hiểu? Có một tập các tháchthức để cung cấp khả năng tìm kiếm mở rộng và xử lí hàng trăm câu truy vấn đồngthời trên một tập dữ liệu lớn1.2. Đặc điểm1.2.1. Hỗ trợ nhiều protocolHiện nay Nutch hỗ trợ các các protocol khác nhau như: http, ftp, file.Nhờ kiến trúc plugin-based, ta có thể dễ dàng mở rộng ra thêm cácprotocol cho Nutch1.2.2. Hỗ trợ nhiều loại tài liệu khác nhauHiện nay, Nutch có thể phân tách (parse) khá nhiều loại tài liệu khác nhau như:• Plain text• HTML• XML26
  27. 27. Bài tập lớn xử lý ngôn ngữ tự nhiên• JavaScript: không chỉ phân tách các link từ mã js như các searchengine khác mà còn phân tách cả phần code của js.• Open Office (OpenOfice.org): phân tách tài liệu Open Office và StarOffice.• Tài liệu Microsoft: Word (.doc), Excel(.xls), Power Point(.ppt).• Adobe PDF• RSS• Rich text format document (.rft)• MP3: phân tách các trường D3v1 hay ID3v2 chứa các nội dung về bàihát như: tựa đề, album, tác giả…• ZIPMặc định Nutch chỉ xử lý hai loại tài liệu là HTML và Plain Text. Muốn mởrộng ra cho các tài liệu khác, ta phải cấu hình lại Nutch. Cũng nhờ vào kiếntrúc Plugin-based của Nutch mà ta có thể viết thêm các Plugin để xử lý các tàiliệu khác1.2.3. Chạy trên hệ thống phân tánNutch được phát triển trên nền tảng Hadoop. Do vậy ứng dụng Nutch sẽphát huy được sức mạnh của nó nếu chạy trên một Hadoop cluster1.2.4. Linh hoạt với pluginNhờ kiến trúc plugin-based, ta có thể dễ dàng mở rộng các tính năng củaNutch bằng cách phát triển thêm các plugin. Tất cả các thao tác phân tách tàiliệu, lập chỉ mục và tìm kiếm đều thật sự được thực hiện bởi các plugin1.3. Nutch và LuceneNutch được xây dựng trên phần ngọn của Lucene, một API cho việc đánhchỉ mục và tìm kiếm văn bản. Một câu hỏi thường thấy là “Ta lên sử dụng Lucenehay Nutch?” câu trả lời đơn giản ở đây là bạn sử dụng Lucene nếu bạn không cầnmột bộ thu thập dữ liệu web . Một kịch bản phổ biến là bạn có một cơ sở dữ liệuweb mà bạn muốn tìm kiếm. Cách tôt nhất là để làm điều này là bạn đánh chỉ mụctrực tiếp từ cơ sở dữ liệu sử dụng Lucene API và sau đó cài đặt giải thuật để tìmkiếm chỉ số, lại sử dụng Lucene. Nutch thì phù hợp hơn với những websites màbạn không thể truy cập trực tiếp đến tầng dữ liệu hoặc nó đến từ các nguồn dữliệu rời rạc.27
  28. 28. Bài tập lớn xử lý ngôn ngữ tự nhiên2. Các nền tảng phát triển của Nutch2.1. LuceneLucene là một bộ thư viện nguồn mở có chức năng xây dựng chỉ mục vàtìm kiếm. Bản thân Lucene cũng là một dự án của Apache SoftwareFoundation, được khởi xướng bởi Dough Cutting. Nutch sử dụng Lucene để thựchiện tạo chỉ mục cho các tài liệu thu thập được và áp dụng vào chức năng tìmkiếm, chấm điểm (ranking) của search engine.2.2. HadoopHadoop là một framework nguồn mở viết bằng Java cho phép phát triển cácứng dụng phân tán có thể xử lý trên các bộ dữ liệu lớn. Nó cho phép các ứng dụngcó thể làm việc với hàng ngàn node khác nhau và hàng petabyte dữ liệu. Hadooplấy được phát triển dựa trên ý tưởng từ các công bố của Google về mô hìnhMapReduce và hệ thống file phân tán Google File System (GFS).2.3. TikaTika là một bộ công cụ dùng để phát hiện và rút trích các metadata vànhững nội dung văn bản có cấu trúc từ những loại tài liệu khác nhau. Nutch sửdụng Tika để phân tách các loại tài liệu khác nhau, nhằm sử dụng cho quá trình tạochỉ mục3. Kiến trúc của NutchKiến trúc của Nutch được phân chia một cách tự nhiên thành các thành phầnchính: crawler, indexer và searcher. Các thành phần thực hiện các chức năng:o Crawler thực hiện thu thập các tài liệu, phân tách các tài liệu, kết quảcủa crawler là một tập dữ liệu segments gồm nhiều segments.o Indexer lấy dữ liệu do crawler tạo ra để tạo chỉ mục ngược.o Searcher sẽ đáp ứng các truy vấn tìm kiếm từ người dùng dựa trêntập chỉ mục ngược do indexer tạo ra28
  29. 29. Bài tập lớn xử lý ngôn ngữ tự nhiênCác thành phần được mô tả chi tiết sau đây3.1. Crawler• Hệ thống thu thập thông tin được điều khiển bởi công cụ thu thập dữ liệucủa Nutch và tập các công cụ có liên quan để xây dựng và duy trì một sốkiểu cấu trúc dữ liệu (bao gồm cả web, cơ sở dữ liệu , một tập hợpcác segments , và các chỉ số index).• Các cơ sở dữ liệu web , hay webdb , là một cấu trúc dữ liệu để phản ánh cấutrúc và tính chất của đồ thị web mà đã thu thập được. Nó vẫn tồn tại miễnlà đồ thị web được thu thập (và thu thập lại) tồn tại,có thể là vài tháng hoặcnhiều năm. Webdb chỉ được sử dụng bởi trình thu thập thông tin và khôngcó vai trò gì trong quá trình tìm kiếm. Webdb lưu trữ hai loại thựcthể: trang và liên kết . Một trang đại diện cho một trang trên Web, và đượclập chỉ mục URL và phép mã hóa MD5 sẽ băm nội dung của trang đó. Cácthông tin thích hợp cũng được lưu trữ,bao gồm cả các số của các liên kếttrong trang (cũng được gọi là outlinks ); lấy thông tin (đểtrang được nạplại. Một liên kết đại diện cho một liên kết từ một trang web ( nguồn) đếntrangkhác (đích). Trong đồ thị web webdb, các nút là các trang và các cạnhlà các liên kết.• Một phân đoạn (segment) là một tập hợp các trang lấy và lập chỉ mụccủa Crawler trong một hoạt động duy nhất. Các fetchlist cho một phân đoạnlà một danh sách các URL cho Crawler xử lí, và được tạo ra từ29
  30. 30. Bài tập lớn xử lý ngôn ngữ tự nhiêncác webdb. Đầu ra Fetcherlà các dữ liệu lấy từ các trang trongfetchlist. Đầu ra Fetchercho một segment xác định được lập chỉ mục và chỉsố được lưu trữ trong segment này. Bất kì một segment nào cũng đều cóvòng đời, mặc định là 30 ngày, vì vậy ta nên xóa đi các segment cũ.Quá trình crawl được khởi động bằng việc module injector chèn thêm mộtdanh sách các URL vao crawldb để khởi tạo crawldb.Crawler gồm có 4 thành phần chính là generator, fetcher, parser và updater30
  31. 31. Bài tập lớn xử lý ngôn ngữ tự nhiênhoạt động liên tiếp nhau tạo thành một vòng lặp. Tại mỗi lần lặp, crawler sẽ tạo ramột segment. Tại khởi điểm của vòng lặp, generator sẽ dò tìm trong crawldb cácURL cần nạp và phát sinh ra một danh sách các url sẽ nạp. Đồng thời lúc nàygenerator sẽ phát sinh ra một segment mới, lưu danh sách URL sẽ nạp vàosegment/crawl_fetch. Tiếp theo, fetcher sẽ lấy danh sách URL cần nạp từsegment/crawl_generate, thực hiện tải các tài liệu theo từng URL. Fetcher sẽ lưunội dung thô của từng tài liệu vào segment/content và lưu trạng thái nạp của từngURL vào segment/crawl_fetch. Sau đó, parser sẽ thực hiện lấy dữ liệu thô của cáctài liệu từ segment/content và thực hiện phân tách các tài liệu để trích lấy cácthông tin văn bản:o Trích các outlink và lưu vào segment/crawl_parseo Trích các outlink và metadata vào segment/parse_datao Trích toàn bộ phần text của tài liệu vào segment/parse_textCuối cùng, crawldb sẽ sử dụng thông tin về các trạng thái nạp của từng URL trongsegment/crawl_fetch và danh sách các URL mới phân tách được trongsegment/crawl_parse để cập nhật lại crawldb. Quá trình trên được lặp đi lặp lại. Sốlần lặp của vòng lặp này được gọi là độ sâu3.2. Indexer và searcherCác chỉ mục (index) là chỉ số đảo ngược (inverted index) của tất cả các trang hệthống đã truy xuất, được tạo ra bằng cách trộn tất cả các chỉ số segment. Nutchsử dụng Lucene để đánh chỉ mục, vì vậy tất cả các công cụ Lucene và API cósẵn đều tương tác với các chỉ mục được tạo ra.31
  32. 32. Bài tập lớn xử lý ngôn ngữ tự nhiênLink Invertor sẽ lấy dữ liệu từ tất cả các segment để xây dựng linkdb. Linkdbchứa tất cả các URL mà hệ thống biết cùng với các inlink của chúngVới từng segment trong segments, indexer sẽ tạo chỉ mục ngược chosegments. Sau đó, nó sẽ thực hiện trọn tất cả các phần chỉ mục này lại với nhautrong indexes. User của hệ thống sẽ tương tác với các chương trình tìm kiếmphía client. Bản thân Nutch cũng đã hỗ trợ sẵn một ứng dụng web để thực hiệntìm kiếm. Các chương trình phía client này nhận các query từ người dùng, gửiđến searcher. Searcher thực hiện tìm kiếm trên tập chỉ mục và gửi trả kết quảlại cho chương trình phía client để hiển thị kết quả ra cho người dùng32
  33. 33. Bài tập lớn xử lý ngôn ngữ tự nhiênTÀI LIỆU THAM KHẢO1. Bài giảng xử lý ngôn ngữ tự nhiên – Ths Hoàng Anh Việt2. Lucene in Action Second Edition Michael Mccandless, Erick Hatcher, OtisGospodnetic3. http://en.wikipedia.org/wiki/Web_search_engine4. http://today.java.net/pub/a/today/2006/01/10/introduction-to-nutch-1.html5. http://today.java.net/pub/a/today/2006/02/16/introduction-to-nutch-2.html6. http://en.wikipedia.org/wiki/Search_engine_indexing7. http://en.wikipedia.org/wiki/PageRank8. Và một số tài liệu khác33

×