Xử lý ngôn ngữ tự nhiên là một nhánh của lĩnh vực trí tuệ nhân tạo và có thể nói đây là phần khó nhất trong lĩnh vực trí tuệ nhân tạo vì nó liên quan đến việc phải hiểu ngôn ngữ-công cụ hoàn hảo của tư duy và giao tiếp
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Tel (84-511) 3736 949, Fax (84-511) 842 771Website: itf.ud.edu.vn, E-mail: cntt@ud.edu.vn
LUẬN VĂN TỐT NGHIỆP NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI:
NGHIÊN CỨU MÁY TÌM KIẾM VÀ XÂY DỰNG THỬ NGHIỆM
MÔ PHỎNG MÁY TÌM KIẾM
SINH VIÊN : PHAN TẤN LUẬN
ĐÀ NẴNG, 06/2009
Trang 2Để hoàn thành được đồ án này, em đã nhận được sự chỉ bảo tận tình của các Thầy Cô giáo trong khoa Công nghệ Thông tin trường Đại học Bách Khoa, cùng sự giúp đỡ động viên của gia đình và bạn bè.
Trước tiên em xin chân thành cảm ơn tất cả các thầy cô của trường Đại học Bách Khoa, Đại học Đà Nẵng đã dạy dỗ và truyền đạt kiến thức cho
em trong thời gian học tại trường.
Em xin chân thành cám ơn Tiến sĩ Nguyễn Thanh Bình, thầy đã tận tình hướng dẫn góp ý cho em trong quá trình thực hiện đồ án này Nhờ đó mà
em có thể hoàn thành theo đúng yêu cầu về nội dung của một đồ án tốt nghiệp.
Em cũng xin được cám ơn những người bạn cùng ngành đã động viên giúp đỡ em trong suốt thời gian làm đồ án.
Cuối cùng, con xin cảm ơn gia đình đã tạo mọi điều kiện tốt nhất để bản thân có thể hoàn thành được đồ án đúng hạn.
Mặc dù đã cố gắng hết sức, nhưng vì khả năng và thời gian có hạn, đề tài nghiên cứu chắc chắn còn nhiều khiếm khuyết Rất mong các Thầy Cô giáo chỉ bảo giúp đỡ Rất mong sự góp ý của bạn bè, đồng nghiệp.
Đà Nẵng, 06/2009
Sinh viên Phan Tấn Luận
Trang 3Em xin cam đoan:
1 Những nội dung trong báo cáo này là do em thực hiện dưới sự hướng dẫn của thầy TS.Nguyễn Thanh Bình.
2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá,
tôi xin chịu hoàn toàn trách nhiệm.
Sinh viên, Phan Tấn Luận
Trang 4
Trang 5
Trang 6
TỔNG QUAN ĐỀ TÀI 1
.I GIỚI THIỆU CHUNG VỀ VẤN ĐỀ NGHIÊN CỨU 1
.I.1 Lịch sử phát triển 1
.I.2 Giới thiệu về các máy tìm kiếm thông dụng 2
.I.2.1 Thế giới 2
.I.2.2 Việt Nam 3
.II LÝ DO CHỌN ĐỀ TÀI 4
.II.1 Mục tiêu và ý nghĩa của đề tài 4
.II.2 Nhiệm vụ cần phải thực hiện 5
.II.2.1 Xây dựng chức năng 5
.II.2.2 Xây dựng ứng dụng web 6
.II.3 Hướng nghiên cứu của đề tài 6
.II.3.1 Về mặt lý thuyết 6
.II.3.2 Công cụ xây dựng đề tài 6
.II.3.3 Dự kiến kết quả đạt được 7
CƠ SỞ LÝ THUYẾT 8
.I LÝ THUYẾT LIÊN QUAN ĐẾN ĐỀ TÀI 8
.I.1 Tổng quan hệ thống máy tìm kiếm 8
.I.1.1 Giới thiệu 8
.I.1.2 Bộ thu thập tài liệu-Crawler 10
.I.1.3 Bộ lập chỉ mục-Indexer 15
.I.1.4 Ứng dụng tìm kiếm-Searcher 17
.I.2 Lucene-Mã nguồn mở cho máy tìm kiếm 18
.I.2.1 Giới thiệu chung 18
Các bước thực hiện 20
Các lớp chính 21
.II VẤN ĐỀ CẦN NGHIÊN CỨU 23
.II.1 HyperText Transfer Protocol 23
.II.1.1 Định dạng địa chỉ (Internet addressing) 23
.II.2 Lập trình đa luồng trong java 27
.II.2.1 Thread là gì? 27
.II.2.2 Thread trong ngôn ngữ Java 27
.II.3 Phân tích HTML 29
.II.3.1 Bốn thành phần cơ bản của Html 29
.II.3.2 Thành phần mà crawler phân tích 31
.II.3.3 Vấn đề cần xử lý 33
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 36
.I PHÂN TÍCH HỆ THỐNG 36
.I.1 Gói crawler 37
.I.1.1 Use-case quản lý các liên kết 38
.I.1.2 Usecase quản lý thiết lập các tùy chọn 45
.I.2 Gói reader 46
.I.3 Gói indexer 47
.I.4 Gói searcher và ứng dụng web 48
.II THIẾT KẾ HỆ THỐNG 49
Trang 7.II.1.3 Gói indexer 54
.II.2 Xây dựng các chức năng 54
.II.2.1 Chức năng xác nhận cho phép đánh chỉ mục 54
.II.2.2 Chức năng tải tài liệu về máy 56
.II.2.3 Tạo công việc mới 57
.II.2.4 Lưu công việc dở dang 58
.II.2.5 Thực hiện các công việc cũ 58
.II.2.6 Chức năng truy xuất liên kết 58
.II.3 Tổ chức dữ liệu 61
.II.3.1 Lớp URLRootBean 61
.II.3.2 Lớp LinkBean 62
.II.3.3 Lớp ParentDirBean 63
CÀI ĐẶT VÀ TRIỂN KHAI CHƯƠNG TRÌNH 65
.I CÀI ĐẶT CHƯƠNG TRÌNH 65
.II KẾT QUẢ THỰC HIỆN 67
.II.1 Màn hình chính của chương trình 67
.II.2 Màn hình hệ thống crawler đang vận hành 67
.II.3 Màn hình xử lý các công việc cũ 68
KẾT QUẢ THỬ NGHIỆM 70
.I DỮ LIỆU THỬ NGHIỆM 70
.II KẾT QUẢ THỬ NGHIỆM 70
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 73
.I KẾT QUẢ ĐẠT ĐƯỢC 73
.I.1 Về mặt lý thuyết 73
.I.2 Về mặt thực nghiệm 73
.I.2.1 Ưu điểm 73
.I.2.2 Khuyết điểm 73
.II HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 73
PHỤ LỤC 75
[1] Otis Gospodnetic, Erik Hatcher, Doug Cutting Luence in action ISBN 1-932394-28-1 .76
[2] Jeff Heaton , Programming Spiders, Bots, and Aggregators in Java 76
[3] Trang web : http://jarkata.apache.org 76
[4] Trang web : http://www.robotstxt.org 76
[5] Trang web: http://lucene.apache.org 76
[6] Trang web: http://maven.apache.org 76
[7] Trang web: http://vi.wiktionary.org/ 76
[8] Trang web: http://en.wikipedia.org/wiki/Search_engines 76
[9] Trang web: http://www.vietseo.net/ 76
TÓM TẮT ĐỀ TÀI 77
Trang 8HÌNH 1 GIAO DIỆN CỦA GOOGLE SEARCH ENGINE 2
HÌNH 2 GIAO DIỆN CỦA XALO.VN SEARCH ENGINE 3
HÌNH 3 SƠ ĐỒ USECASE BAN ĐẦU CỦA HỆ THỐNG 6
HÌNH 4 TỔNG QUAN HỆ THỐNG TÌM KIẾM 8
HÌNH 5 BIỂU ĐỒ TRẠNG THÁI CỦA MỘT LIÊN KẾT 13
HÌNH 6 QUÁ TRÌNH ĐÁNH CHỈ MỤC 16
HÌNH 7 CÁC BƯỚC PHÂN TÍCH TÀI LIỆU 16
HÌNH 8 VÒNG ĐỜI CỦA MỘT THREAD 28
HÌNH 9 BẢNG TRONG HTML 33
HÌNH 10 SƠ ĐỒ THÀNH PHẦN TỔNG QUAN CỦA HỆ THỐNG 36
HÌNH 11 CẤU TRÚC CỦA CRAWLER 38
HÌNH 12 SƠ ĐỒ USE-CASE CỦA GÓI CRAWLER 38
HÌNH 13 SƠ ĐỒ USECASE CỦA VIỆC QUẢN LÝ CÁC LIÊN KẾT GỐC39 HÌNH 14 SƠ ĐỒ TRẠNG THÁI THÊM MỚI CÁC LIÊN KẾT GỐC 40
HÌNH 15 SƠ ĐỒ TRẠNG THÁI CỦA TÁC VỤ CHỈNH SỬA MỘT LIÊN KẾT GỐC 41
HÌNH 16 SƠ ĐỒ TRẠNG THÁI XÓA LIÊN KẾT GỐC 42
HÌNH 17 SƠ ĐỒ USECASE CHO TÁC VỤ QUẢN LÝ CÁC LIÊN KẾT ĐÃ TẢI VỀ MÁY 43
HÌNH 18 SƠ ĐỒ USECASE QUẢN LÝ DANH SÁCH CÁC THƯ MỤC CHỨA TÀI LIỆU 45
HÌNH 19 SƠ ĐỒ TỔNG THỂ CÁC THÀNH PHẦN CỦA GÓI READER47 HÌNH 20 SƠ ĐỒ HOẠT ĐỘNG CỦA GÓI INDEXER 48
HÌNH 21 SƠ ĐỒ HOẠT ĐỘNG CỦA GÓI SEARCHER VÀ ỨNG DỤNG WEB 49
HÌNH 22 SƠ ĐÔ TUẦN TỰ CỦA HỆ THỐNG 50
HÌNH 23 SƠ ĐỒ MÔ TẢ HOẠT ĐỘNG CRAWLER 52
HÌNH 24 TRẠNG THÁI HOẠT ĐỘNG CỦA GÓI READER 53
HÌNH 25 SƠ ĐỒ TUẦN TỰ CỦA GÓI INDEXER 54
Trang 9HÌNH 27 SƠ ĐỒ HOẠT ĐỘNG CỦA CHỨC NĂNG TẢI TÀI LIỆU VỀ MÁY 56 HÌNH 28 SƠ ĐỒ HOẠT ĐỘNG CỦA CHỨC NĂNG TẠO CÔNG VIỆC MỚI 58 HÌNH 29 SƠ ĐỒ HOẠT ĐỘNG TRUY XUẤT CÁC LIÊN KẾT 60 HÌNH 30 MÀN HÌNH CRAWLER ĐANG HOẠT ĐỘNG TẢI CÁC DỮ LIỆU VỀ MÁY 67 HÌNH 31 MÀN HÌNH KHI HỆ THỐNG THỰC HIỆN CÁC CÔNG VIỆC CŨ 69 HÌNH 32 DANH SÁCH CÁC DỮ LIỆU DO CRAWLER TẢI VỀ 70 HÌNH 33 KẾT QUẢ TRẢ VỀ VỚI CÂU TRUY VẤN “JAVA TUTORIAL” 71 HÌNH 34 TRANG WEB NGUỒN CỦA KẾT QUẢ ĐẦU TIÊN 72
Trang 10BẢNG 1 BẢNG XẾP HẠNG SEARCH ENGINE NĂM 2009 2
BẢNG 2 CÁC GÓI CHÍNH TRONG THƯ VIỆN MÃ NGUỒN MỞ LUCENE 20
BẢNG 3 CÁC GIAO THỨC THƯỜNG GẶP 23
BẢNG 4 CÁC THÀNH PHẦN CỦA MỘT URL 24
BẢNG 5 DANH MỤC CÁC BẢNG TRONG CƠ SỞ DỮ LIỆU 61
BẢNG 6 BẢNG CHỨA THÔNG TIN ĐỊA CHỈ GỐC 62
BẢNG 7 BẢNG LƯU THÔNG TIN CÁC ĐỊA CHỈ ĐƯỢC TẢI VỀ 63
BẢNG 8 BẢNG LƯU TRỮ THÔNG TIN CỦA CÁC THƯ MỤC CHỨA TÀI LIỆU TẢI VỀ 64
BẢNG 9 BẢNG MÔ TẢ CÁC LỚP CHÍNH CỦA CHƯƠNG TRÌNH 65
Trang 11.I GIỚI THIỆU CHUNG VỀ VẤN ĐỀ NGHIÊN CỨU
Hiện nay Internet là nguồn tài nguyên vô tận của nhân loại chỉ cần vài lần nhấp chuột ta
có thể tiếp cận được những nguồn tài liệu mong muốn Để tiếp cận được tài liệu thích hợp
ta nhờ vào các máy tìm kiếm (search engine) vì vậy máy tìm kiếm chiếm lĩnh một vị trí vôcùng quan trọng trong thời đại thông tin Các máy tìm kiếm thông dụng ngày nay đầu tiênphải nói đến Google, Yahoo, MSN-Live Để xây dựng được một hệ thống như vậy vô cùngphức tạp và nó là đề tài luôn được nghiên cứu để tìm giải pháp tối ưu nhất
cả các thư mục liệt kê danh sách các file nằm trên FTP site
• Năm 1991 máy tìm kiếm Gopher được đưa ra bởi Mark McCahill tại đại học Minnesota Máy tìm kiếm Gopher có thể đánh chỉ mục tên toàn văn bản text đơn
giản
• Năm 1993 World Wide Web Wanderer xuất hiện, được biết đến như là robot đầu
tiên Nhiệm vụ của nó là đếm để ước lượng số lượng các web
• Năm 1994 WebCrawler được giới thiệu Đây là máy tìm kiếm full-text đầu tiên tức
là tìm kiếm trên toàn bộ phần văn bản
• Năm 1995 máy tìm kiếm Alta Vista ra đời, công cụ đầu tiên cho phép sử dụng các
câu truy vấn là ngôn ngữ tự nhiên Mặc dù thất bại sau này nhưng Alta vista vẫnthực sự ấn tượng có thể nói Alta vista là một Google thời bấy giờ
• Năm 1996 công ty Inktomi được khởi đầu tại UC Berkeley và vào tháng 6 năm
1999, công ty Inktomi giới thiệu một thư mục tìm kiếm dựa trên công nghệ
"concept induction" Theo như giới thiệu của công ty này thì "concept induction"
có khả năng tiến hành phân tích thói quen của người sử dụng để đưa ra các tranggợi ý
• Năm 1997 Google ra mắt như một dự án nghiên cứu tại trường Đại học Stanfordbởi hai nhà sáng lập Sergey Brin và Larry Page Dường như Google là máy tìmkiếm thống lĩnh ngày nay
• Năm 1998 MSN Search và Open Directory ra đời
Trang 12.I.2 Giới thiệu về các máy tìm kiếm thông dụng
Bảng 1 Bảng xếp hạng search engine năm 2009
.I.2.1. Thế giới
google.com
Hình 1 Giao diện của google search engine
Google được xem như là máy tìm kiếm thống trị thế giới hiện nay
Trang 13.I.2.2. Việt Nam
xalo.vn
Hình 2 Giao diện của xalo.vn search engine
Xalo.vn là một Máy tìm kiếm (search engine) được Tinhvân Media phát triển với tham vọng Xalo.vn sẽ trở thành công cụ tìm kiếm tiếng Việt hàng đầu của Việt Nam
Xalo.vn hiện tại đang cung cấp 7 dịch vụ tìm kiếm bao gồm:
- Tìm kiếm Web: dịch vụ tìm kiếm thông tin tổng hợp trên dữ liệu gần 100 triệu trang
văn bản tiếng Việt hiện có trên các Website của Việt Nam
- Tìm kiếm Tin tức: dịch vụ tổng hợp tin tức và tìm kiếm thông tin trên dữ liệu dạng tin
tức được tổng hợp từ gần 70 trang tin điện tử hàng đầu của Việt Nam
- Tìm kiếm Diễn đàn: dịch vụ tìm kiếm cho phép người dùng tìm kiếm thông tin từ hơn
100 diễn đàn lớn nhất của Việt Nam hiện tại
- Tìm kiếm Ảnh: dịch vụ tìm kiếm hình ảnh trên số lượng hơn 20 triệu hình ảnh được
người dùng Việt Nam đưa lên Internet
Trang 14- Tìm kiếm Blog: dịch vụ tìm kiếm cho phép người dùng tìm kiếm thông tin trên hầu
hết các mạng xã hội được cung cấp bởi Việt Nam cũng như trên thế giới mà người Việt Nam hay sử dụng
- Tìm kiếm Nhạc: dịch vụ tìm kiếm dữ liệu Nhạc từ các Website nghe nhạc trực tuyến
lớn nhất Việt Nam hiện tại
- Tìm kiếm Rao vặt: dịch vụ tổng hợp và tìm kiếm thông tin rao vặt từ hơn 20 Website
mua bán rao vặt lớn nhất Việt Nam
Với các dịch vụ cung cấp và tính năng khác biệt cho từng dịch vụ, Xa Lộ đang không ngừng được hoàn thiện để có thể phục vụ tốt nhất nhu cầu tìm kiếm của người dùng Internet Việt Nam và trở thành máy tìm kiếm tiếng Việt hàng đầu của Việt Nam
.II LÝ DO CHỌN ĐỀ TÀI
.II.1 Mục tiêu và ý nghĩa của đề tài
Xử lý ngôn ngữ tự nhiên là một nhánh của lĩnh vực trí tuệ nhân tạo và có thể nói đây làphần khó nhất trong lĩnh vực trí tuệ nhân tạo vì nó liên quan đến việc phải hiểu ngôn ngữ-công cụ hoàn hảo của tư duy và giao tiếp Các bài toán và ứng dụng của nhánh xử lý ngônngữ bao gồm:
Đây là các bài toán được rất nhiều chuyên gia quan tâm phát triển, vì tính ứng dụng của
nó rất thiết thực trong đời sống xã hội Ngay từ khi còn ngồi trên ghế nhà trường em mongmột ngày nào đó sẽ được làm việc trong nhánh xử lý ngôn ngữ Với mong ước đó trongthời gian qua em đã định hướng sẽ thực công việc có liên quan đến một phần nhỏ của lĩnhvực đó là nghiên cứu tìm hiểu phần tìm kiếm thông tin, tìm hiểu những công nghệ mới để
có thể xây dựng được một máy tìm kiếm toàn văn
Trong thời đại công nghệ số như hiện nay, các nguồn tài liệu là vô cùng phong phú đadạng Mỗi giây sẽ có rất nhiều, rất nhiều thông tin được đưa lên làm giàu cho nguồn tàinguyên vô tận này Nguồn tài nguyên càng nhiều thì dĩ nhiên là không thể thiếu công cụtìm kiếm và công việc tìm kiếm càng khó hơn đòi hỏi các máy tìm kiếm phải phát triểnkhông ngừng Vì lý do đó mà có rất nhiều máy tìm kiếm ra đời, phục vụ cho nhu cầu thiếtthực này Làm thế nào mà chỉ trong tích tắc các máy tìm kiếm có thể đưa về hàng nghìnkết quả tương ứng với truy vấn của người dùng Các máy tìm kiếm dùng các công nghệ
Trang 15nào, thuật toán nào mà có thể thực hiện được như vậy? Đó là câu hỏi mà em luôn tự hỏi vàmuốn nghiên cứu tìm hiểu.
Quay về một phạm vi nhỏ hơn Chẳng hạn như ta có một website chứa rất nhiều tài liệu
và muốn hỗ trợ công cụ tìm kiếm cho người dùng Thông thường thì ta sử dụng tìm kiếmtoàn văn (full-text) mà các hệ quản trị cơ sở dữ liệu cung cấp Sẽ có rất nhiều hạn chế nhưchỉ tìm được trên dữ liệu ở bên trong hệ quản trị cơ sở dữ liệu, hạn chế về câu truy vấn vìphụ thuộc vào cú pháp của mỗi cơ sở dữ liệu, không tìm được trên các dữ liệu phi cấutrúc, tốc độ xử lý trên một cơ sở dữ liệu lớn sẽ rất chậm v.v…Với các lý do đó ta cần xâydựng một hệ thống tìm kiếm cho website của mình tương tự như các máy tìm kiếm
Bởi vì mục đích và ý nghĩa như trên em chọn cho mình đề tài:”Nghiên cứu tìm hiểumáy tìm kiếm và xây dựng chương trình mô phỏng một máy tìm kiếm”
.II.2 Nhiệm vụ cần phải thực hiện
.II.2.1. Xây dựng chức năng
.1 Tự động thu thập tài liệu
• Từ một hay nhiều địa chỉ liên kết ban đầu, chương trình tự động theo tất cả cácliên kết có trong liên kết ban đầu để truy xuất tài liệu Một liên kết được tìmthấy sẽ đóng vai trò như một liên kết ban đầu mới Công việc cứ diễn ra khi tatìm hết tất cả các liên kết Có hai tùy chọn: một chỉ tìm các liên kết cùng tênmiền, hoặc cho phép theo những liên kết khác tên miền
• Các tài liệu tìm thấy thường ở các dạng chính html, pdf, doc sẽ được tải về lưutrữ trên máy
.2 Xây dựng chức năng xử lý tài liệu thành các văn bản thuần túy (plaintext)
• Từ kho tài liệu đã tìm được, hệ thống sẽ xử lý đưa về định dạng đơn giản nhất làvăn bản thuần túy Để phục vụ cho các bước phân tích sau
.3 Lập chỉ mục cho các tài liệu đã tìm được
• Từ các văn bản thuần túy đã truy xuất ra được ta sẽ thực hiện các bước như đưatất cả về chữ thường, phân tích văn bản thành từng đơn vị từ vựng, loại bỏ cácstopwords, thực hiện đưa văn bản về thành từ gốc (stemming, chỉ thực hiệnphần này trong Tiếng Anh), tính trọng số của từ, loại bỏ những từ có trọng sốthấp
• Tiến hành lập các tập tin chỉ mục đảo cho các thông tin vừa tìm được
.4 Tìm kiếm tài liệu
• Từ các chỉ mục đảo ta có thể xây dựng ứng dụng tìm kiếm cho tài liệu ta thuthập được ở dạng tìm kiếm toàn văn
• Hệ thống nhận truy vấn từ người dùng, truy vấn sẽ được phân tích qua các bướcnhư: đưa về chữ thường loại bỏ, stopword Sau đó tiến hành tìm kiếm, trả về kếtquả được sắp xếp theo độ tương đồng với câu truy vấn giảm dần
Trang 16Từ nhiệm vụ như trên ta có sơ đồ usecase tổng quát
Hình 3 Sơ đồ usecase ban đầu của hệ thống
Đây chỉ là sơ đồ hình dung ban đầu, vì thế có thể được thay đổi trong các bước phântích sau
.II.2.2. Xây dựng ứng dụng web
Xây dựng giao diện giao tiếp giữa hệ thống và người sử dụng Người sử dụng ở đâygồm người quản trị hệ thống, và người tìm kiếm Người quản trị hệ thống sẽ có các chứcnăng vận hành hệ thống còn người dùng thì sẽ nhập câu truy vấn và nhận kết quả trả về
.II.3 Hướng nghiên cứu của đề tài
.II.3.1. Về mặt lý thuyết
Nắm được các lý thuyết liên quan đến lĩnh vực tìm kiếm thông tin
.II.3.2. Công cụ xây dựng đề tài
• Về mặt cơ sở lý thuyết: các nguồn tài liệu tham khảo trên các trang web, sách ngônngữ lập trình, các giáo trình và kết thức trau dồi trong thời gian học tại trường…
• Công cụ thiết kế phần mềm: Eclipse version 3.3, Mysql, Poseidon for UML PE 6.0.2,ArgoUML
• Công cụ quản lý đề tài, mã nguồn: Maven2, Lucene, TortoiseSVN
• Công cụ Test: JUnit
Trang 17.II.3.3. Dự kiến kết quả đạt được
Xây dựng mô phỏng được một hệ thống máy tìm kiếm:
• Tải được nội dung các trang html Từ một trang web gốc hệ thống sẽ tự tìm ratất cả các siêu liên kết tới các trang web đó, download các loại định dạng(contentType) cơ bản như: text/html, application/pdf, application/doc… về máy.Các file sẽ được lưu trữ theo từng thư mục được đặt tên theo tên host của liênkết Địa chỉ các trang web sẽ được mã hóa để có thể đặt tên cho nó ở trên đĩa
• Xây dựng hệ thống đọc file dựa theo phần đuôi mở rộng Tùy vào các định dạngfile sẽ có các lớp đọc thích hợp Chủ yếu đọc các file thông dụng như: html,htm, pdf, doc, rtf, xml, txt…còn các file dạng khác sẽ chỉ đánh chỉ mục theo têncủa file và địa chỉ của nó
• Phân tích các tài liệu đã thu thập được bóc tách phần văn bản thuần túy(plaintext)
• Sử dụng thư viện mã nguồn mở Lucene để đánh chỉ mục cho các tài liệu
• Phân tích chuỗi tìm kiếm của người dùng
• Tìm kiếm được trên các trang html và trong toàn nội dung tập tin Trả về kếtquả thích hợp
Trang 18.I LÝ THUYẾT LIÊN QUAN ĐẾN ĐỀ TÀI
.I.1 Tổng quan hệ thống máy tìm kiếm
Hình 4 Tổng quan hệ thống tìm kiếm
.I.1.1. Giới thiệu
Thuật ngữ search engine thường được dùng để mô tả cho cả crawler-based searchengine và human-powered directory Đây là hai loại máy tìm kiếm mà chúng thu thập chỉmục theo các cách khác nhau
Crawler-based search engines
Crawler-based search engines chẳng hạn như Google, tạo chỉ mục một cách tự động
Họ “crawl” và “spider” các trang web và sau đó chúng ta tìm trên hệ thống chỉ mục họ thu
Trang 19thập được Khi ta thay đổi nội dung của trang web thì crawler-base search engine sẽ có thểtìm ra các thay đổi và điều đó sẽ ảnh hưởng đến trang web sẽ được xếp hạng như thế nào.
Human-powered directory
Human-powered directory chẳng hạn như Open Directory phụ thuộc vào nhân tố conngười trong khi lập chỉ mục Ta sẽ gửi một bản mô tả ngắn về trang web của ta đếnhuman-powered directory, hoặc các nhà biên soạn cho các máy tìm kiếm này sẽ ghi lạimột bản mô tả nội dung trang web mà họ đã xem qua Kết quả phù hợp khi ta tìm kiếm sẽphụ thuộc vào các bản mô tả này Lập chỉ mục theo dạng này thì khi ta thay đổi nội dungcủa trang web thì sẽ chẳng ảnh hưởng gì đến chỉ mục đã được thực hiện Ngoại trừ nhữngtrang web hay, trang web có nội dung bổ ích và phổ biến thì có khả năng được mô tả lạithường xuyên
Ngày nay các máy tìm kiếm không còn phân biệt rõ ràng là crawler-based searchengine hay human-powerd directory Bởi vì kết quả tìm kiếm trả về dựa trên cả hai dữliệu Chẳng hạn MSN Search trước kia là human-powered directory tuy nhiên ngày nay nóvẫn hiển thị các kết quả theo crawler-based search engine (được cung cấp bởi công tyInktomi) cho các truy vấn phức tạp hơn
Crawler-based search engine thường bao hàm 3 thành phần chính Đầu tiên là spiderhay đôi khi còn gọi là crawler, wanderer…Crawler sẽ truy cập vào một trang web, đọc nộidung, và sau đó theo các liên kết có đi tới các trang khác bên trong site Spider sẽ trở lạicác website này theo một nguyên tắc đặt ra trước, có thể là mỗi tháng hay hai tháng để tìmkiếm các thay đổi
Những gì mà crawler thu thập được sẽ được đưa vào phần thứ hai của máy tìm kiếm đểlập thành chỉ mục Chỉ mục (index hay đôi khi còn được gọi là catalog, giống như là mộtquyển sách khổng lồ chứa tất cả những bản copy của mỗi trang web mà spider tìm thấy.Nếu một trang web thay đổi, thì quyển sách này sẽ được cập nhật các nội dung mới
Thường thì sẽ mất một khoảng thời gian các trang web mới, hay các thay đổi mà spidertìm thấy được thêm vào chỉ mục Vì vậy, một trang web có thể đã được “spider” nhưngchưa được đánh chỉ mục Khi chưa được đánh chỉ mục thì dĩ nhiên nó sẽ không tồn tạitrên các kết quả tìm kiếm
Ứng dụng web là thành phần thứ ba trong máy tìm kiếm Nó là chương trình mà sẽduyệt qua hàng tỉ trang web được ghi lại trong bảng chỉ mục để tìm kiếm kết quả phù hợpcho một truy vấn và sắp xếp các kết quả theo một trật tự được cho là tương thích nhất.Search engine tìm kiếm trên hàng hàng tỉ trang web và trả về các kết quả phù hợp vớingười dùng mong muốn Dĩ nhiên không phải lúc nào kết quả trả về cũng đúng đắn.Search engine không có khả năng hỏi vài câu hỏi để tập trung vào chủ đề tìm kiếm haycũng chẳng thể nào dựa vào đánh giá cũng như kinh nghiệm cho các lần tìm kiếm trướcnhư cách của con người Search engine dựa tất cả vào thuật toán khi nó phải đối diện vớihàng tỉ trang web cần phải sắp xếp Hầu như các thuật toán cụ thể của các máy tìm kiếmlàm việc như thế nào đều được giữ kín không tiếc lộ Tuy nhiên các search engine đềutuân theo các các quy tắc chung Các quy tắc này sẽ được trình bày ở phần sau
Trang 20.I.1.2. Bộ thu thập tài liệu-Crawler
.1 Đặc điểm hoạt động của Crawler
Từ một hay nhiều các liên kết ban đầu, Crawler lên đường thực hiện công việc “lùngsục” Internet của mình Crawler tải về nội dung các trang web từ các liên kết đã nhận banđầu và truy xuất các liên kết mới nằm trong nội dung của các trang này Các liên kết mớinày sẽ được nạp vào một trình điều khiển (Crawler Manager) Crawler Manager sẽ quyếtđịnh các liên kết nào sẽ được viếng thăm kế tiếp, Crawler Manager sẽ nạp chúng vào hàngđợi để chờ xử lý Các liên kết này sẽ được quản lý trong cơ sở dữ liệu để thuận tiện chocông việc cập nhật thông tin mới Trong một lần thực hiện thì các liên kết phải chỉ đượctruy cập một lần để tăng khả năng hoạt động và tránh trùng lặp nội dung Một crawler điqua bốn bước cơ bản:
• Bắt đầu từ một hay nhiều liên kết
• Tải nội dung
• Phân tích nội dung, tìm liên kết, đi theo các liên kết
• Theo dõi liên kết, tránh trùng lặp
Có nhiều chế độ làm việc cho crawler thực hiện nhiệm vụ truy tìm thông tin Các chế
độ được phân biệt theo nhiều cách Các đặc điểm phân biệt có thể là:
• Batch Mode
• Incremental Mode
Batch mode Crawler sẽ đánh chỉ mục liên tục các trang web và không tải nội dung về
để lưu trữ Cách này nội dung luôn được cập nhật nhưng chỉ phù hợp cho lượng trang webnhỏ có giới hạn Chẳng hạn như mục tiêu của crawler được định ra là thực hiện trên một
số website cụ thể nào đấy Crawler chỉ có nhiệm vụ liên tục chạy qua các wesiste này đểcập nhật các nội dung mới
Incremental Mode hoạt động ở chế độ này crawler sẽ không bao giờ xóa các nội dung
lưu trữ Khi gặp một tài liệu được cho là đã viếng thăm thì crawler sẽ tuân theo chiến lượccập nhật nội dung đã được cài đặt Ở chế độ này thì crawler cần phải có kho lưu trữ tài liệuthật lớn
• Breadth-first(Tìm kiếm theo chiều rộng)
• Depth-first(Tìm kiếm theo chiều sâu)
Tìm kiếm theo chiều rộng Tìm tất cả các liên kết ở cùng cấp trước khi đi sâu hơn tìm
tất cả các liên kết ở cấp tiếp theo Cấu trúc dữ liệu cho thuật toán này là hàng đợi vào sau
ra trước
Tìm kiếm theo chiều sâu Tìm tất cả các liên kết trong một nhánh trước khi tìm các
liên kết ở nhánh tiếp theo
• Randomized
Trang 21• PageRank
Randomized Tìm kiếm một cách ngẫu nhiên
PageRank Tìm các trang quan trọng trước Các trang quan trọng là các trang được dẫn
tới từ nhiều trang khác
.2 Tính năng bắt buộc crawler phải tuân theo
• Robustness: Các crawler phải được thiết kế chính xác và hoạt động ổn định.
Nhiều website có tạo ra chức năng đánh lừa các crawler Tức là dẫn các crawlervào các vòng lặp không có kết thúc Crawler cần phải được thiết kế sao cho cóthể nhận ra “bẫy” và quay trở ra Không phải “cái bẫy” nào cũng tạo ra nhằmđánh lừa các crawler mà đôi khi là vô tình bởi trang web thiết kế bị lỗi
• Politeness: Các website sẽ có các chính sách cho phép các crawler truy cập vào
trang web mình theo một cấp độ nào đó Crawler cần phải tuân thủ các chínhsách này
.3 Tính năng crawler nên tuân theo
• Distributed: Các crawler cần được thiết kế theo mô hình phân tán để có thể
thực thi trên nhiều máy tính
• Scalable: Crawler cần được thiết kế có khả năng tăng tần xuất hoạt động bằng
nhiều cách Chẳng hạn như thêm nhiều máy tính hoặc tăng dung lượng băngthông
• Performance and efficiency: Crawler cần được thiết kế hiệu thật hiệu quả
trong việc sử dụng các tài nguyên hệ thống như bộ xử lý, dung lượng lưu trữ vàbăng thông mạng
• Freshness: Crawler cần phải được cập nhật nội dung mới một cách liên tục.
Crawler cần phải có tần xuất truy cập trang web xấp xĩ với tần xuất thay đổi nộidung của trang web
• Extensible: Crawler cần được thiết kế sao cho dễ dàng mở rộng theo nhiều
hướng Chẳng hạn như tăng định dạng cho nội dung truy cập hay thêm giao thứctruy cập Internet Để được như vậy crawler cần được chia thành các phần nhỏ(các mudole) để tiện cho việc duy trì và nâng cấp
.4 Vấn đề cơ bản cần giải quyết của Crawler
• Những trang web nào nên được tải về? Tải về tất cả các trang web đó là một
việc làm không tưởng vì vậy cần phải có chiến lược lựa chọn các trang webquan trọng để tải về Các trang web được nhiều truy cập, các trang web cungcấp nội dung có giá trị và phổ biến thì nên được vị trí ưu tiên trong hàng đợi
• Làm thế nào để cập nhật nội dung? Trên Internet các trang web cập nhật
thường xuyên nội dung của nó Có trang cập nhật liên tục có trang cập nhậttrong thời gian lâu hơn Làm thế nào để quyết định các trang web nào nên đượctruy cập lại và những trang web nào cần bỏ qua Cũng như công việc trên ta
Trang 22không thể cập nhật lại toàn bộ các trang web một cách thường xuyên Cần phải
có chiến lược lựa chọn
• Làm thế nào để tải nội dung trang web tối ưu nhất Trong khi crawler thực
hiện công việc thu thập tài liệu sẽ tiêu tốn tài nguyên như CPU hay tài nguyênmạng Nếu crawler chiếm quá nhiều tài nguyên mạng thì nó có thể bị ngườiquản trị các website loại trừ Cần phải có chiến lược để nâng cao khả năng hoạtđộng sao cho ít tốn tài nguyên nhất
• Làm thế nào để xử lý song song Tài liệu trên Internet là vô cùng lớn cần phải
có nhiều crawler hoạt động đồng thời Làm thế nào để các crawler khác nhau sẽkhông truy cập cùng một website ở các thời điểm khác nhau
• Khả năng lưu trữ Yêu cầu tổng quan của một công cụ tìm kiếm và sao chép
nội dung web bao hàm tính năng tải file, giao diện trực quan dễ mở rộng, bảomật giữa server và trình duyệt web, trình diễn các thành phần động, và phản ảnhgiao diện web một cách chính xác Mục đích trong việc sao chép một trang web
là phải phản ảnh lại chính xác giao diện của trang web, tải từng hình ảnh, liênkết cũng như thành phần động Đây là một nhiệm vụ khó hầu hết bởi vì khảnăng phân tích mã JavaScript của crawler còn thấp Phạm vi hoạt động củacrawler phụ thuộc vào cách trình bày của các trang web nguồn Ví dụ cần phải
có thuật toán để crawler truy lục hết các tài liệu trên cùng một website trước khi
đi theo các liên kết đi ra các website khác Hình ảnh nằm ở các website bênngoài được tham chiếu tới bởi website này thì lại khác, tất cả các hình ảnh phảiđược lưu trữ để phục vụ cho việc lưu các trang web trong cache HTTP headerchuyển hướng (HTTP header redirect) nằm ở vị trí Location của HTTP headerphải được lần theo Các liên kết nằm hai server nhưng trên cùng một miền thì
cần phải theo Ví dụ như mail.yahoo.com và quote.yahoo.com Nhiều liên kết và
các dòng chuyển hướng thường được viết dưới mã JavaScript, các liên kết nàycần phải lần theo Cũng cần phải định nghĩa trước giới hạn độ sâu của liên kết
.5 Xây dựng Crawler
Có hai cấu trúc mà crawler có thể được xây dựng Thứ nhất là xây dựng crawler như làmột chương trình đệ quy Thứ hai là xây dựng crawler theo cấu trúc dữ liệu sử dụng hàngđợi
Chương trình đệ quy là một kỹ thuật lập trình mà các phương thức tự gọi lại chính nó.Chương trình đệ quy phù hợp cho các dự án mà các công việc được thực thi lặp lại mộtcách hệ thống và thông tin mà công việc trong tương lai cũng được biết trước sẽ giống nhưcông việc đang được thực hiện hiện tại Chương trình đệ quy chỉ nên dùng cho crawler màbiết trước sẽ có số ít các trang web vì mỗi khi chương trình chạy sẽ lưu dữ liệu vào ngănxếp với số lượng trang web lớn thì ngăn xếp sẽ rất lớn và có thể gây tràn ngăn xếp nguyênnhân ngăn chặn không cho chương trình có thể hoạt động Lý do nữa là ta sẽ không thểthực hiện khả năng đa luồng cho crawler đệ quy, bởi khi ta đệ quy sẽ tạo ra nhiều tiếntrình Mỗi tiến trình đóng vai trò là một crawler, mỗi tiến tình lại có một ngăn xếp riêngmỗi khi chương trình gọi lại chính nó thì sẽ tạo ra một ngăn xếp mới điều này không phùhợp vì cần phải dùng một chung một ngăn xếp cho một chương trình crawler
Khi xây dựng crawler sử dụng cấu trúc dữ liệu hàng đợi, đầu tiên crawler sẽ nhận đượcliên kết của trang web gốc Crawler sẽ nạp liên kết này vào hàng đợi Khi crawler tìm thấy
Trang 23các liên kết mới thì nó cũng đưa các liên kết này vào hàng đợi Khi xử lý xong một liên kếtcrawler sẽ lấy một liên kết trong hàng đợi ra và tiếp tục truy cập Công việc sẽ kết thúc khikhông còn một liên kết nào trong hàng đợi.
Như mô tả thì một crawler chỉ cần một hàng đợi là có thể thực thi, Nhưng thông thường
ta dùng bốn hàng đợi để lưu trữ các liên kết để theo dõi các trạng thái của nó
• Waiting Queue trong hàng đợi này thì các liên kết đang chờ để được xử lý và
liên kết mới sẽ được nạp vào hàng đợi này khi chúng được tìm thấy
• Running Queue liên kết được chuyển tới hàng đợi này khi crawler bắt đầu xử
lý nó Một điều quan trọng cần tránh là một liên kết phải chỉ được xử lý một lần
để tránh lãng phí tài nguyên Khi một liên kết đã được xử lý thì hoặc nó đượcchuyển tới Error Queue hoặc Complete Queue
• Error Queue khi có lỗi xảy ra trong quá trình xử lý liên kết thì liên kết này sẽ
được chuyển tới Error Queue Một khi đã vào đây thì liên kết sẽ không chuyển
đi đâu nữa và cũng sẽ không được xử lý lần nào nữa
• Complete Queue khi xử lý thành công thì các liên kết sẽ được chuyển tới đây
và cũng sẽ không chuyển tới đâu nữa
Một liên kết sẽ chỉ ở một hàng đợi tại một thời điểm Vì vậy mỗi thời điểm có thể đượccoi là mỗi trạng thái của liên kết Chương trình máy tính thường được mô tả theo biểu đồtrạng thái trong đó sẽ biểu diễn luồng di chuyển của liên kết từ trạng thái này sang trạngthái khác
Hình 5 Biểu đồ trạng thái của một liên kết
.6 Vấn đề cần tránh
• Quá tải mạng và server: Sử dụng robot, một điều tiên quyết phải chú ý đó là tàinguyên mạng phải lớn Nhiều robot hoạt động sẽ gây tốn một lượng lớn băngthông cũng như các tài nguyên mạng khác, tốc độ xử lý, dung lượng bộ nhớv.v
Trang 24• Cập nhật quá mức: Khó có thể kiểm soát được tốc độ cập nhật mới của trangweb Cập nhật thông tin là quan trọng Nhưng phải có chiến lược cập nhật phùhợp sao cho tốc độ cập nhật xấp xỉ với tốc độ thay đổi nội dung của một trangweb sao cho không quá thường xuyên gây tốn kém tài nguyên, hay quá rời rạc
dữ liệu không được cập nhật cho người dùng
• Những tình huống không mong đợi khác: Robot không thể nhận ra các url khácnhau về tên nhưng cùng dẫn về một địa chỉ Chẳng hạn như DSN và IP Robotcũng có thể đi vào những vòng lặp vô hạng khi các trang có sử dụng sessionId.Mỗi phiên làm việc sẽ tạo ra một Id, id này có thể là tham số của liên kết Cácliên kết cứ tạo ra liên tục như vậy Robot theo các liên kết này sẽ không có điểmdừng Một tình huống không mong đợi nữa là trong các website có sử dụng lịch(calendars) thành phần lịch này sử dụng các trang web động cùng với các liênkết cứ liên tục chỉ đến những ngày, hay năm trong tương lai Spider đi theo cácliên kết này cũng sẽ không có điểm dừng
.7 Robot.txt tiêu chuẩn loại trừ crawler
Không phải lúc nào thì crawler cũng được chấp nhận hoạt động trên các website Bởi vìnhiều lý do như chiếm giữ băng thông, gửi yêu cầu đến một nội dung nhiều lần liên tục, vì
lý do bảo mật v.v…Vì vậy các nhà quản trị website muốn ngăn chặn các vị khách khôngmời này do đó tiêu chuẩn loại trừ crawler ra đời Có hai cách để loại trừ robot:
• Tạo file robot.txt nằm ngay trong thư mục chính của web site
• Định nghĩa trong thẻ <META …/>
Robot.txt: file robot.txt bao gồm một hay nhiều dòng có dạng
"<field>:<optionalspace><value><optionalspace>", ngoài ra còn có các chú thích.Các chú thích là văn bản đi theo sau dấu # Ví dụ: #Chú thích Phần chú thích sẽ bị crawler
bỏ qua Crawler chỉ quan tâm đến các nội dung sau:
User-agent: Giá trị trong trường này chỉ định tên của robot sẽ phải tuân theo chính sáchloại trừ robot của website Nếu có nhiều trường User-agent có nghĩa là chính sách chỉ địnhtrên nhiều robot Ít nhất phải có một trường User-agent trong tập tin robot.txt TrườngUser-agent mà có giá trị là * có nghĩa là tất cả các robot
Disallow: Giá trị trong trường này chỉ định các URL không được truy cập Giá trị này
có thể là tên đầy đủ hay chỉ là tên một phần của URL Tất các các URL bắt đầu với giá trị
trong trường này thì không được viếng thăm Ví dụ: Disallow: /help có nghĩa là không cho phép truy cập lẫn /help.html và /help/help/index.html còn Disallow: /help/ thì không cho phép truy cập /help/help/index.html nhưng cho phép truy cập /help.html Không có giá trị
nào trong trường Disallow thì có nghĩa tất cả các URL đều được phép truy cập
Trang 25Disallow: /cyberworld/map/ # This is an infinite virtual URL space Disallow: /tmp/ # these will soon disappear
Disallow: /cyberworld/map/ # This is an infinite virtual URL space
# Cybermapper knows where to go.
NOINDEX chỉ định robot không được đánh chỉ mục trang web này
NOFOLLOW chỉ định robot không được theo các liên kết nằm bên trong trang này
Trang 26Hình 6 Quá trình đánh chỉ mục
Lập chỉ mục là quá trình phân tích tài liệu cần đánh chỉ mục thành các từ, cụm từ thíchhợp quan trọng có khả năng phản ánh đúng nội dung của tài liệu Bởi vậy cần phải có giảipháp để chiết lọc thông tin một cách chính xác và phải tự động vì lượng tài liệu là vô cùnglớn không thể làm thủ công Thông tin được chiết lọc phải đủ nội dung để trả về kết quảtìm kiếm cho người dùng và cũng không được dư thừa gây tốn kém dung lượng lưu trữcũng như trả về kết quả không chính xác cho người dùng Quá trình phân tích tài liệu đượcchia thành các bước nhỏ hơn:
Hình 7 Các bước phân tích tài liệu
Bước thứ nhất chuyển các dạng tài liệu thành text hay còn gọi là plaintext tạm dịch làvăn bản thuần túy Vì tài liệu ngày nay tồn tại ở nhiều định dạng khác nhau như pdf, doc,xml, rtf, html, v.v Không thể phân tích ngay trên các định dạng này được mà cần phảichuyển tất cả thành văn bản thuần túy sau đó mới tiếp tục các bước phân tích tiếp theo.Bước thứ hai chuyển văn bản thành đơn vị từ vựng (Tokenization) Tức là tách văn bảnthành các đơn vị từ Trong Tiếng Anh thì cần dựa vào các dấu khoảng trắng ta có thể phân
tích văn bản thành các token Còn trong Tiếng Việt thì khó hơn Ví dụ như ta có câu Thầy giáo này rất gương mẫu nếu dựa vào khoảng trắng ta phân tích sẽ thành 6 token sau: thầy, giáo, này, rất, gương, mẫu như thế sẽ không thích hợp mà kết quả ta cần phải được là 4 token thầy giáo, này, rất, gương mẫu.
Bước thứ hai là loại bỏ các stopword Stopwords là các từ mà nó xuất hiện trong vănbản nhưng không mang nghĩa chẳng hạn trong Tiếng Việt các stopword như: thì, là, và,nhưng v.v còn trong Tiếng Anh các stopwords như: a, the, but, and v.v Các stopword thìkhông cần thiết trong việc đánh chỉ mục cho tài liệu, nó không phản ánh nội dung của vănbản và hầu như trong văn bản nào cũng xuất hiện chúng vì thế chúng cần phải được loạibỏ
Bước thứ ba là loại bỏ hậu tố Phần này trong Tiếng Việt không có vì Tiếng Việt làngôn ngữ đơn thể Trong Tiếng Anh một từ ngoài từ gốc còn có thể có tiền tố và hậu tố
Trang 27Tiền tố có làm thay đổi nghĩa của từ nên được giữ nguyên Hậu tố chỉ thay đổi từ loại của
từ mà không thay đổi nghĩa nên cần phải được đưa về thành từ gốc
Bước cuối cùng là tính trọng số của các từ có trong tài liệu Trong văn bản thì có nhiều
từ sẽ xuất hiện thường xuyên, các từ đó phản ảnh nội dung của tài liệu Cần phải tính trọng
số của các từ để loại bỏ các từ mang trọng số thấp
.1 Tìm kiếm theo từ khóa
Tìm kiếm theo từ khóa là cách tìm kiếm mà dựa trên các từ được cho là quan trọngnhất trong tài liệu Như đã đề cập các từ có trọng số cao nhất trong tài liệu là các từ xuấthiện thường xuyên và có khả năng phản ảnh một phần nội dung mà tài liệu đề cập tới Ví
dụ các từ khóa, cụm từ khóa hữu dụng trong chủ để máy tìm kiếm như "tìm kiếm", "công
cụ tìm kiếm", "phương pháp tìm kiếm", "thuật toán tìm kiếm", "xếp hạng" "độ tươngđồng", "kết quả tìm kiếm", v.v… Những từ khóa, cụm từ khóa trên phản ảnh được nộidung của chủ đề này Các trang web ngày nay thường liệt kê tất cả các từ khóa của websitemình để tăng tính chính xác khi các máy tìm kiếm đánh chỉ mục cho website cũng nhưphục vụ cho công việc tìm kiếm của người dùng dễ dàng hơn Trong tài liệu tác giả cũngthường định nghĩa các từ khóa cho tài liệu mình nhằm phục vụ cho máy tìm kiếm đánh chỉmục dễ dàng và chính xác hơn Trong các trang html thì các từ khóa được định nghĩatrong thẻ <Meta…/> ở đầu trang trong phần <head></head> Ví dụ:
<Meta name=”keywords” content=”…”/> Các từ khóa được liệt kêtrong thuộc tính content Ngoại trừ những tài liệu trên, các từ khóa hoàn toàn phụ thuộcvào cách phân tích tài liệu của máy tìm kiếm Chẳng hạn như các máy tìm kiếm thường để
ý đến tựa đề của trang web, nơi mà sẽ chứa nội dung liên quan đến chủ đề mà trang webmuốn đề cập đến nhiều nhất Hay các máy tìm kiếm cũng thường phân tích các câu đầucủa một tài liệu, đây là các câu mang nội dung trọng tâm mà tài liệu muốn nói đến Cáccâu này được xem như là câu chính trong một đoạn văn mang nội dung cốt lõi Ngoài racác máy tìm kiếm còn phân tích các từ được lặp đi lặp lại nhiều lần trong tài liệu Các từ
đó cũng phản ảnh nội dung của tài liệu
Các khó khăn của chiến lược tìm kiếm theo từ khóa là làm sao phải xử lý các từ đồng
âm khác nghĩa Vì các từ đồng âm khác nghĩa mà các máy tìm kiếm có khi sẽ trả về kếtquả chẳng liên quan gì đến mục đích của ta Khó khăn thứ hai là mà các máy tìm kiếmphải giải quyết là vấn đề đưa các từ về thành từ gốc (stemming, vấn đề này chỉ có trongTiếng Anh) Chẳng hạng khi ta nhập vào từ “big” thì kết quả trả về có thể là “bigger” Mộtkhó khăn nữa là máy tìm kiếm chưa trả về được các kết quả theo từ đồng nghĩa Chẳnghạn khi ta truy vấn với từ “giáo viên” thì kết quả trả về sẽ không trả về các tài liệu có các
từ “thầy giáo” hay “cô giáo”
Trang 28.2 Tìm theo ngữ nghĩa
Thông tin về tìm kiếm theo ngữ nghĩa đã cũ và hiện nay nó cũng không còn tồn tại.Nhưng thông tin về cách tìm kiếm theo ngữ nghĩa sẽ có giá trị cho các nhà nghiên cứu.Tìm kiếm theo ngữ nghĩa là cách tìm kiếm mà đoán ý của người sử dụng thông qua câutruy vấn Cách này phải gom nhóm tài liệu thành chủ đề, dựa vào lý thuyết trí tuệ nhân tạo
để phân tích câu truy vấn của người dùng Chẳng hạn như trong tài liệu có từ trái tim Có hai lĩnh vực chính mà từ trái tim thuộc đó là y học và tình yêu Chỉ với từ trái tim thì chưa
đủ tri thức để máy tìm kiếm lựa chọn chủ đề để sắp xếp cho tài liệu này Máy tìm kiếm
dựa vào các từ đi cùng từ trái tim chẳng hạn như nhịp đập, huyết áp v.v thì có thể biết tài liệu hướng đến chủ đề y học Còn từ trái tim đi với các từ như thổn thức, tan vỡ, ngọt ngào v.v thì máy tìm kiếm có thể đoán nhận người dùng đang hướng đến chủ đề tình yêu.
.I.2.1. Giới thiệu chung
Lucene là phần mềm mã nguồn mở đượ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ập vào tổ chức Apache và hiện tại được Apache pháttriển và quản lý Đây là công cụ được thiết kế, phát triển dùng để phân tích, đánh chỉ mục
và tìm kiếm thông tin với hiệu suất cao bằng ngôn ngữ Java Cần lưu ý rằng Lucene khôngphải là một ứng dụng mà chỉ là một công cụ đặc tả API cần thiết để viết chương trình chomáy tìm kiếm Mặc dù được 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 như:
• Montezuma – Common Lisp
Lucene là mã nguồn mở rất mạnh rất hữu ích dành cho những nhà phát triển máy tìmkiếm Với Lucene ta có thể xây dựng được hệ thống tìm kiếm toàn văn mạnh mẽ và linhhoạt tương tự như Google Lucene cung cấp các hàm cơ bản cho công việc đánh chỉ mục
và tìm kiếm Sử dụng Lucene ta cần phải chuẩn bị dữ liệu, dữ liệu có thể là các tập tin lưutrên trang web hoặc các dữ liệu có cấu trúc trong các hệ quản trị cơ sở dữ liệu Lucene
Trang 29cung cấp những API cơ bản thực hiện đánh chỉ mục trên toàn nội dung văn bản và sau đó
ta có thể tìm kiếm dựa trên các tập tin chỉ mục đảo (inverted index) mà Lucene tạo ra khithực hiện đánh chỉ mục
Lucene có thể đánh chỉ mục và tạo khả năng tìm kiếm bất kì dữ liệu nào mà dữ liệu đó
có thể được chuyển sang định dạng text Lucene không quan tâm đến nguồn của dữ liệu,định dạng dữ liệu, hoặc ngay cả ngôn ngữ của tài liệu, chỉ cần có thể chuyển qua đượcđịnh dạng văn bản thuần túy (plaintext) thì tài liệu đó có thể được đánh chỉ mục Điều đó
có nghĩa là ta có thể dùng Lucene để đánh chỉ mục và tìm kiếm dữ liệu lưu trữ trong cáctập tin, trang web trên server, tài liệu lưu trữ trong hệ thống cục bộ, tập tin văn bản đơngiản, tập tin Microsoft Word, HTML, hoặc PDF, hoặc bất kì định dạng khác mà từ nó cóthể truy xuất ra thông tin dạng văn bản Tương tự, với sự giúp đỡ của Lucene ta có thểđánh chỉ mục dữ liệu được lưu trữ trong cơ sở dữ liệu, cung cấp cho người dùng tìm kiếmfull-text mà nhiều hệ quản trị cơ sở dữ liệu không hỗ trợ Có thể nói đánh chỉ mục là contim của tất cả các hệ thống tìm kiếm Đánh chỉ mục giúp tăng tốc độ tìm kiếm thay thế chocách tìm kiếm duyệt tuần tự chậm chạp trước kia Có thể hiểu đơn giản kết quả của đánhchỉ mục là cho ra một cấu trúc dữ liệu mà cho phép truy cập ngẫu nhiên nhanh chóng đếncác từ được chứa trong nó Tìm kiếm là quá trình truy tìm các từ lưu trong chỉ mục để tìm
ra các tài liệu có chứa những từ đó
Một ứng dụng máy tìm kiếm sử dụng mã nguồn mở Lucene có thể đạt được các tínhnăng như sau:
• Đánh chỉ mục hoạt động cao
Tốc độ đánh chỉ mục lớn, hơn 20Mb mỗi phút đối với máy Pentium M 1.5GHz
Yêu cầu dung lượng RAM nhỏ - chỉ cần 1Mb heap
Dữ liệu chỉ mục tăng một cách thống nhất đồng loạt
Các tập tin chỉ mục của Lucene kích thước chỉ khoảng 20% - 30% kích thước của chỉmục bằng tập tin txt
• Sử dụng thuật toán tìm kiếm mạnh, chính xác và hiệu quả
Xếp hạng kết quả - kết quả tốt nhất được trả về trước tùy theo độ tương đồng với câutruy vấn người sử dụng Kết quả có thể sắp xếp theo các trường được đánh chỉ mục, theongày tháng v.v…
Nhiều loại truy vấn mạnh như: phrase query (truy vấn theo cụm từ), wildcast query(truy vấn sử dụng các kí hiệu thay thế như *, ?, ~), range query (câu truy vấn theo phạm vi)v.v…
Tìm kiếm theo các trường được đánh chỉ mục Nhiều trường có thể được lựa chọn đểphục vụ cho việc tìm kiếm Ví dụ một tài liệu thường được chia thành các trường cơ bảnnhư tựa đề, tác giả và nội dung Ta có thể lựa chọn bất kì trường nào để tìm kiếm hay tìmkiếm trên tất cả các trường Thông thường thì trường nội dung dùng để tìm kiếm còntrường tác giả, tựa đề thì dùng để biểu diễn kết quả trả về
Trang 30Ta có thể tìm kiếm đồng thời trên nhiều hệ thống chỉ mục Các hệ thống chỉ mục chophép cập nhật nội dung mới, chỉnh sửa…
• Được sử dụng miễn phí cho phần mềm mã nguồn mở cũng như phần mềm thương mại
Các gói chính của thư viện Lucene (Lucene core):
org.apache.lucene Gói chính
org.apache.lucene.analysis. API dùng để chuyển text sang các đơn vị từ
vựng(token) để có thể đánh chỉ mục và tìmkiếm
org.apache.lucene.analysis.standard Cấu trúc ngữ pháp dùng tokenize từ vựng
org.apache.lucene.document Quản lý document
org.apache.lucene.index. Mã để duy trì và truy cập chỉ mục
org.apache.lucene.queryParser. Phân tích truy vấn đơn giản
org.apache.lucene.search Gói dùng để tìm kiếm chỉ mục
org.apache.lucene.search.function
org.apache.lucene.search.payloads Cung cấp các cơ chế truy vấn
org.apache.lucene.util Chứa các lớp tiện ích
org.apache.lucene.search.spans Các thuật toán
org.apache.lucene.store API thực hiện vào/ra, dùng cho tất cả các dữ
liệu đánh chỉ mục
Bảng 2 Các gói chính trong thư viện mã nguồn mở Lucene
Các bước thực hiện
.1 Mô tả các đối tượng
Lucene coi các đối tượng được đánh chỉ mục là các Lucene Document, mỗi LuceneDocument có nhiều Field tương ứng như là thuộc tính của đối tượng Ví dụ như ta muốnđánh chỉ mục cho một tập tin pdf, thì ta phải mô tả các metadata của tập tin pdf như Title,Keyword, Author, Content v.v… thành các Field tương ứng cho Lucene Document Các Field có thể được đánh chỉ mục hay không đánh chỉ mục Các Field được đánh chỉmục thường là nội dung của tập tin, còn các Field không đánh chỉ mục thường là cácthông tin không quan trọng như tên tác giả, đường dẫn v.v…các thông tin này chỉ được lưutrữ để phục vụ cho các kết quả trả về
.2 Đánh chỉ mục
Trước khi đánh chỉ mục ta cần phải viết các hàm để chuyển đổi tài liệu từ dạng ban đầu
về plaintext để có thể tạo ra Lucene Document như đã giới thiệu ở trên Chẳng hạn như dữ
Trang 31liệu ban đầu là một tập tin Microsoft Word đuôi doc Lucene không thể trực tiếp tạoLucene Document được mà cần phải có một hàm đọc nội dung của tập tin doc để đưa radạng text đơn giản hay còn gọi là plaintext Sau đó từ định dạng văn bản thuần túy này thìLucene mới tạo ra được các Lucene Document.
Thao tác đánh chỉ mục khá phức tạp Trước hết dữ liệu văn bản sẽ được phân tích thànhcác từ khóa, đồng thời loại bỏ các xuất hiện nhưng không mang nghĩa quan trọng gọi làcác stopword Chẳng hạn trong Tiếng Việt các stopword như: thì, là, và, nhưng v.v…Sau
đó các từ khóa sẽ được dùng để tạo chỉ mục nghịch đảo và lưu thành các phân đoạn dạngthuận tiện cho việc tìm kiếm sau này Chỉ mục nghịch đảo được hiểu là một dạng cấu trúc
dữ liệu dùng để lưu trữ danh sách các tài liệu mà có chứa các từ khóa Chẳng hạn như ta
muốn tìm các tài liệu có chứa từ khóa “search engine” nếu dùng chỉ mục thông thường,
phải quét qua hết các tài liệu có trong cơ sở dữ liệu thì mới tìm ra được, rất tốn thời gian
khi số lượng dữ liệu lớn Cách này tương ứng với câu hỏi: Các tài liệu nào có chứa từ
“search engine”? Nếu có 100 tài liệu thì ta cần phải tìm 100 lần Còn chỉ mục nghịch đảo
sẽ tương ứng với câu hỏi ngược lại: Từ “search engine” nằm trong các tài liệu nào? Tức
là ta sẽ lập chỉ mục trước và chỉ tìm với số lần đúng với số tài liệu có chứa từ “search engine” mà không cần duyệt qua tất cả 100 tài liệu
Sau khi dữ liệu đã được đánh chỉ mục, ta có thể thực hiện tìm kiếm trên chúng Tìmkiếm toàn văn cho phép bạn có thể tìm kiếm theo danh sách các từ khóa cùng với các toán
tử luận lí (và, hoặc, phủ định).Ví dụ ta có thể truy vấn “cửa hàng máy tính NOT Phi Long” tức là sẽ tìm các website có từ “cửa hàng máy tính” nhưng không có từ “Phi Long” Ngoài ra, điểm nổi bật khác của tìm kiếm toàn văn là cho phép xếp hạng các kết
quả trả về tùy vào độ tương đồng (relevance) giữa câu truy vấn và kết quả tìm kiếm
Trang 32document, một chương trong sách v.v… là không được đánh chỉ mục mà chỉ có meta-datanhư author, title, subject, data modified mới được đánh chỉ mục và lựu trữ một cách táchbiệt như các trường của tài liệu.
• Field
Mỗi Document trong chỉ mục chứa ít nhất một tên trường, mỗi trường phù hợp vớimảnh dữ liệu mà vừa được truy vấn hoặc truy lục từ chỉ mục trong quá trình tìm kiếm.Trong Lucene có bốn loại Field: Keyword, UnIndexed, UnStored và Text
.4 Các lớp chính dùng để tìm kiếm
• IndexSearcher
Lớp IndexSearcher làm công việc tìm kiếm những gì mà IndexWriter đã đánh chỉ mục,đây là lớp trung tâm liên kết với bảng chỉ mục mà đưa ra một vài phương thức tìmkiếm.Ta có thể nghĩ rằng IndexSearch là một lớp có thể mở các bảng chỉ mục ở chế độ chỉđọc Nó cung cấp một số phương thức tìm kiếm, phương thức đơn giản nhất là chỉ cần mộttham số là một đối tượng Query và trả về một đối tượng Hits Cách sử dụng phương thứcnhư sau:
IndexSearcher is = new IndexSearcher(FSDirectory.getDirectory(“tmp/index”, false));Query q = new TermQuery(new Term(“contents”, “lucene”));
Hits hits = is.search(q);
• Term
Term là một đơn vị cơ bản trong tìm kiếm Tương tự như đối tượng Field, nó bao gồmmột hai thành phần kiểu String: là tên của trường và giá trị của trường Chú ý rằng đốitượng Term cũng liên quan đến quá trình đánh chỉ mục Trong quá trình tìm kiếm, chúng
ta có thể khởi tạo đối tượng Term và sử dụng chúng cùng với TermQuery:
Query q = new TermQuery(new Term(“contents”, “lucene”);
Hits hits = is.search(q);
Đoạn mã trên chỉ cho Lucene tìm tất cả các tài liệu mà có chứa từ lucene trong trường
Trang 33• Hits
Lớp Hits có tác dụng để xếp hạng các kết quả tìm kiếm Khi muốn xử lý, thao tác vớicác kết quả trả về thì ta khai báo đối tượng của lớp Hits
.II VẤN ĐỀ CẦN NGHIÊN CỨU
.II.1 HyperText Transfer Protocol
.II.1.1. Định dạng địa chỉ (Internet addressing)
Địa chỉ Internet là cách kết hợp nhiều phần thành một địa chỉ, địa chỉ đó xác định duy nhấtmột tập tin trên Internet Nguồn thông tin trên Internet là vô cùng lớn vì thế chúng ta cần phảichỉ định chính xác thông tin nào chúng ta cần tìm kiếm Địa chỉ Internet giúp ta giải quyết vấn
Scheme: tên giao thức truy cập
Giao thức Diễn giải
Data Dữ liệu được mã hóa dưới mã Base64
File Dữ liệu là tập tin lưu trữ ở hệ thống cục bộ
FTP Data được truyền bằng giao thức FTP(file transfer protocol)HTTP Data được truyền bằng giao thức HTTP
HTTPS Data được truyền bằng giao thức HTTP bảo mật
GOPHER Data được truyền bằng giao thức Gopher
MAILTO Data được truyền bằng giao thức Simple Mail Transfer ProtocolNEWS Data được truyền bằng dùng News server
TELNET Data được truyền bằng kết nối Telnet
Bảng 3 Các giao thức thường gặp
Phần thứ hai của định dạng URI là scheme-specific-path không theo một cú pháp chuẩnnào nhưng thường có dạng:
host/path?query
Trang 34Ví dụ: với liên kết http://www.java2s.com/java/jsp thì host sẽ là www.java2s.com còn path
là /java/path.
.2 Định dạng URL
URL là viết tắt của Uniform Resources Locators đây là địa chỉ chỉ định đến tài nguyên
cụ thể trên Internet Chẳng hạn http://www.java2s.com/java/pic.gif là địa chỉ trỏ đến hình
ảnh pic.gif trên web server URL được hiểu như là con trỏ trỏ đến tài nguyên trên WorldWide Web, tài nguyên ở đây có thể là tập tin hay thư mục, hay nó cũng có thể tham chiếuđến các tài nguyên phức tạp khác như truy vấn một cơ sở dữ liệu hay một máy tìm kiếm,một chương trình CGI-BIN, một serlet hay một JSP page
Scheme://hostname :port/path ?query#anchor
Các thành phần của một URL
Scheme Chỉ định giao thức truy cập, thông thường là HTTP và HTTPS
host Đây là server mà tài liệu được lưu trữ, có thể là tên hoặc địa chỉ IP
port URL có tùy chọn chỉ định cổng Mặc định cổng 80 cho giao thức HTTP và 443
cho HTTPS
path Đường dẫn thực sự chỉ đến tập tin được yêu cầu tới server
anchor Chỉ đến vị trí ở bên trong tài liệu Điểm neo thực sự là chuỗi ngắn tương tự như
một label
Bảng 4 Các thành phần của một URL
.3 Địa chỉ URL tương đối
Đôi khi chỉ một phần của địa chỉ URL được chỉ định Thay vì phải dùng toàn bộ địa chỉ
như http://www.jeffheaton.com/images/logo.gif đôi khi ta thấy chỉ là /images/logo.gif hay /logo.gif hay đôi khi chỉ logo.gif những địa chỉ như trên gọi là địa chỉ tương đối.
Khi xử lý địa chỉ tương đối ta cần phải dựa vào địa chỉ của trang web chứa nó ta mớixác định được địa chỉ tuyệt đối
Nếu địa chỉ bắt đầu bằng / thì địa chỉ sẽ là: host + địa chỉ tương đối Chẳng hạn trong
trang http://www.java2s.com/index.html có chứa địa chỉ tương đối là /images/pic.gif thì lúc này địa chỉ đó chính là http://www.java2s.com/images/pic.gif.
Nếu địa chỉ tương đối không bắt đầu bằng / thì có nghĩa là nó nằm cùng thư mục vớitrang web đang được xem Cũng như trên nhưng nếu địa chỉ của trang mà chứa địa chỉ
Trang 35tương đối là http://www.java2s.com/jsp/index.html thì lúc này ta được địa chỉ sẽ là http://www.java2s.com/jsp/images/pic.gif.
.4 HTTP request
Chức năng cơ bản của một crawler hay spider là truy xuất trang web dùng HTTP.Thông thường thì các crawler hay các spider chỉ truy xuất các nội dung là HTML và nó cóthể bỏ qua thời gian tiêu tốn cho công việc tải các hình ảnh Cũng như các giao thứcInternet khác, HTTP được định nghĩa bởi RFC nó được trình bày trên RFC2616 Tài liệuRFC này trình bày cấu trúc của phiên làm việc của HTTP (HTTP session)
Một yêu cầu HTTP được bắt đầu từ trình duyệt web Trình duyệt web gửi yêu cầu đếnweb server và web server sẽ phản hồi Khi một kết nối được thiết lập, vài dòng văn bảnđơn giản mô tả yêu cầu sẽ được gửi lên server Sever sẽ phản hồi với một vài header cùngvới dữ liệu được yêu cầu HTTP header chứa một số thông tin quan trọng như thời giancuối sửa đổi trang web, loại web server đang sử dụng v.v…Ví dụ:
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Host: www.classinfo.net
Trang 36Connection: Keep-Alive
Cookie: ASPSESSIONIDGGGGQHPK=BHLGFGOCHAPALILEEMNIMAFG
Dòng đầu tiên chứa thông tin quan trọng nhất Từ GET ở dòng đầu tiên nhận định đây
là GET request Trường tiếp theo trên dòng này chỉ định tài nguyên Tài nguyên thường làtên đường dẫn bắt đầu bằng dấu / (có ý nghĩa là trực tiếp từ gốc) Thông tin từ phía serverphản hồi lại gọi là response, ví dụ một response cho GET resquest phía trên như sau :
Date: Tue, 13 Mar 2001 03:55:05 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
the rest of the HTML document
Response cho GET Request có hai phần phần header và phần body được ngăn cáchnhau bởi một dòng trống Phần body chính là tài nguyên mà client yêu cầu
.6 HTTP POST request
Tương tự như HTTP GET request nhưng HTTP POST request có thêm phần body dùng
để gửi dữ liệu lên cho server Các dữ liệu thường được điền vào các form và khi form này được submit thì các thông tin trong form được gửi cho server
.7 HTTP HEAD request
HTTP HEAD request là yêu cầu mà ít được dùng nhất trong các loại yêu cầu củaHTTP HTTP HEAD chỉ được sử dụng bởi browser dùng để xác nhận sự tồn tại của tàiliệu mà không cần tài liệu được gửi về Loại yêu cầu này thường được các search enginecũng như các web directory gửi đến server nhằm mục đích xác nhận liên kết có còn tồn tạihay không HTTP HEAD không mất nhiều thời gian để cho server xử lý vì không có dữliệu nào được gửi đi ngoại trừ request header
Trang 37.II.2 Lập trình đa luồng trong java
Ta có thể dùng Thread để thực hiện các công việc:
• Khởi tạo trong thời gian dài
• Công việc dùng vòng lặp hay liên quan đến thời gian
• Thực thi sự kiện không đồng bộ
• Công việc mang tính đa nhiệm (multistasking)
.II.2.2. Thread trong ngôn ngữ Java
.1 Giới thiệu lớp java.lang.Thread
Trong ngôn ngữ lập trình Java định nghĩa lớp java.lang.Thread dùng để tạo và điềukhiển Thread Khi một Thread được tạo ra nghĩa là một đối tượng của lớpjava.lang.Thread được khởi tạo Và khi hàm Thread.start() được gọi thì lúc đó Thread mớithực sự hoạt động, nó sẽ thực thi hàm run() Có hai cách khởi tạo Thread:
• Thứ nhất là tạo lớp kế thừa từ lớp Thread, và lớp này sẽ thực thi hàm run() củariêng nó
• Thứ hai là thực thi Runable Interface Trong Java không có đa kế thừa, nên khimột lớp đã kế thừa từ một lớp khác thì nó không thể kế thừa lớp Thread đượcnên lúc này thì cần phải tạo theo cách này
Trang 38Hình 8 Vòng đời của một Thread
Các phương thức của Thread:
• start() phương thức này bắt đầu chạy Thread, thực thi hàm run() của lớp Runableđích Hàm này chỉ được gọi một lần
• suspend() phương thức này treo một phương thức đang chạy, nó sẽ bị treo cho đếnkhi hàm resume() được gọi
• resume() lớp này sẽ thực thi Thread bị treo
Trang 39• stop() lớp này dừng và chấm dứt một Thread, nhưng muốn chấm dứt một thread bịtreo thì ta phải resume Thread vì stop() chỉ có tác dụng trên các Thread đang chạy
• sleep() Thread sẽ tạm dừng trong khoảng thời gian, thời gian được đưa vào trongtham số của Thread
.2 Đồng bộ hóa các Thread
Cách ngăn chặn dữ liệu không bị hỏng bởi nhiều Thread tác động vào nó cùng lúc ta dùng
kỹ thuật “critical region” tạm gọi là vùng “gay cấn” Tức là khi đã có một Thread đi vào vùngnày rồi thì các Thread khác sẽ không được vào vùng này nữa Chỉ khi Thread ra khỏi cùng nàythì Thread khác mới được vào Trong ngôn ngữ Java dùng từ khóa synchronized để địnhnghĩa vùng critical region
<h1>Hello World</h1>
Như đã đề cập trước đó, có một trường hợp dữ liệu nằm bên ngoài một tag nhưng
không được xem là văn bản đó là script code Hầu hết các đoạn mã hay gặp trong trang
html là JavaScript JavaScript là một chương trình nhỏ nằm bên trong các trang html giữacác tag <script>Đoạn mã JavaScript</script> Crawler cần phải phân biệt giữa text và
mã JavaScipt Ví dụ ta có đoạn mã sau:
<script>
var wpop_;
function myfunct(para) {
if(wpop_&&!wpop_.closed) {
Trang 40wpop_.location.href=para;
} wpop_.focus();
if(wpop_&&!wpop_.closed) {
wpop_.location.href=para;
} wpop_.focus();