Bài toán thu thập, bóc tách dữ liệu (Crawl, parse data)

Một phần của tài liệu Xây dựng, thử nghiệm giải pháp tìm kiếm theo yêu cầu người dùng, sử dụng cloud computing và thuật toán mapreduce (Trang 40 - 45)

Bài toán thu thập, bóc tách dữ liệu là bước đầu tiên để xây dựng một máy tìm kiếm. Chúng ta phải xây dựng giải pháp để có thể thu thập được càng nhiều trang web càng tốt, tần suất thu thập các trang web phải đủ nhanh so với tần suất cập nhật, nhưng không được gây ảnh hưởng trực tiếp đến site đích. Ngoài ra bộ phận bóc tách dữ liệu

cần loại bỏ những dữ liệu thừa, chung chung gây ảnh hưởng đến nội dung tìm kiếm. Các nội dung thừa gây lãng phí khi phải đánh chỉ mục, và gây độ nhiễu trong các tìm kiếm của người dùng.

Các bước thu thập nội dung và bóc tách dữ liệu:

- Bước 1: Khởi điểm của thuật toán là một tập các site gốc xuất phát, thông thường gọi là seed. Những site này là điểm gốc để chúng ta có thể xuất phát từ chúng, để lấy nội dung của các site. Đưa những site từ seed vào hệ thống lưu trữ link.

- Bước 2: lấy nội dung của các site, lấy các outlinks trong từng trang web. Nội dung các trang web thì lưu trữ vào hệ thống lưu trữ nội dung, các link thì lưu trữ vào hệ thống lưu trữ các links để tiếp tục cho các lần chạy tiếp theo.

- Bước 3: bóc tách nội dung của các trang web, bỏ đi những phần không cần thiết, chỉ giữ lại những phần nội dung cần thiết cho quá trình đánh chỉ mục.

- Bước 4: cập nhật lại các link, đánh dấu các link đã được thu thập, thời gian thu thập, tham số của các link, kết thúc một vòng chạy.

Việc lựa chọn các link từ CSDL để cho lần chạy tiếp theo cũng rất quan trọng, quyết định khả năng bao phủ các trang web. Hiện tại hay sử dụng ba phương pháp chính:

- Thu thập tin tức theo chiều rộng: thu thập nội dung các trang web theo tất cả các link có thể, sau khi đã tìm được tất cả các link trong cùng cấp, sẽ đi xuống các cấp ở phía dưới. Ưu điểm của cách tìm kiếm này là có thể bao được nhiều trang, tuy nhiên lại không lấy được dữ liệu ở các lớp phía dưới của trang (sẽ lấy được nhưng mất rất nhiều thời gian).

- Thu thập tin tức theo chiều sâu: thu thập nội dung trang Web theo chiều sâu, đi từ đầu đến cuối site đích. Sau khi hoàn thành sẽ chuyển sang site khác. Ưu điểm của phương pháp này là lấy toàn bộ dữ liệu của từng site, nhưng không thể lấy được dữ liệu toàn bộ. Ngoài ra còn bị vấn đề độ sâu của site và đệ quy. Nếu bị rơi vào trường hợp đệ quy sẽ không thể ra khỏi được site.

- Thu thập tin tức theo phương pháp tổng hợp: đây là phương pháp tổng hợp của cả phương pháp thu thập theo chiều rộng và chiều sâu. Ngoài ra phương pháp này còn sử dụng PageRank của mỗi link, tần suất cập nhật của mỗi site để tính thời gian quay lại, từ đó tạo ra được danh sách những site cần thu thập tin tức trong lần tiếp theo. Ưu điểm của phương pháp này là vẫn thu thập được lượng lớn, có độ sâu nhất định (thông thường là 1 đến 3) để tránh trường hợp bị rơi vào vòng đệ quy. Ngoài ra việc sử dụng PageRank và tần suất cập nhật của mỗi site sẽ giúp lấy được nhiều nội dung mới, không mất thời gian quay lại những trang không có tin mới.

Những vấn đề của bài toán thu thập dữ liệu:

- Khả năng bao phủ: các trang web trên Internet là rất lớn, làm sao để có thể bao phủ các trang web, lấy về nội dung của chúng. Theo cách hiện tại, khi sử dụng phương pháp tổng hợp, chúng ta phải thiết kế hệ thống thu thập tin tức theo mô hình phân tán, mỗi máy, mỗi cụm máy phụ trách một phần trong số những trang cần thu thập. Trung bình mỗi trang có khoảng 100 – 200 outlinks là các link mở rộng đến các trang khác, vì vậy số lượng trang web tăng lên rất nhanh theo cấp số nhân. Nếu không mở rộng hạ tầng thì không thể đảm bảo được việc bao phủ các trang web cần thu thập.

- Khả năng mở rộng hạ tầng: khi cần thu thập nhiều trang web, có hai vấn đề lớn về hạ tầng đó là băng thông mạng và khả năng phân giải địa chỉ. Khi thu thập nội dung thực chất là việc download nội dung trang web về hệ thống lưu trữ của máy tìm kiếm. Khi lượng trang web cần download về rất lớn, cần phải có một băng thông mạng đầy đủ phục vụ cho quá trình này. Theo một số liệu không chính thức, vào đầu những năm 2000, băng thông mạng của Google sử dụng cho việc thu thập tin tức là hơn 2000 Gigabit, nhiều hơn cả băng thông mạng ra quốc tế của toàn bộ nước Việt Nam lúc bấy giờ! Ngoài ra, khi thu thập tin tức từ một số lượng lớn các site, vấn đề phân giải địa chỉ cũng rất quan trọng. Khi tạo quá nhiều request đến các địa chỉ khác nhau, hệ thống phân giải địa chỉ phải thực hiện liên tục, và dẫn đến tình trạng bị treo, không thể tạo request đến các hệ thống bên ngoài để thu thập nội dung.

- Không ảnh hưởng đến các site đích: đây là một trong những yếu tố kiên quyết, nó gần như đối nghịch với khả năng bao phủ các site. Khi chúng ta tạo quá nhiều request đến một site, sẽ làm nghẽn mạng, một dạng tấn công DOS hay DDOS làm ảnh hưởng đến site đích. Vì thế phải có một cơ chế làm việc thật sự hiệu quả, không tạo quá nhiều request đến site cùng một lúc, nhưng vẫn phải đảm bảo được độ cập nhật thông tin cho site. Thông thường sẽ dựa vào độ cập nhật tin tức của một site. Các ứng dụng như các báo điện tử có rất nhiều bài viết mới trong một ngày, nên phải quay lại và thu thập nó nhiều lần, còn các ứng dụng ít có tính cập nhật hơn như blog, trang Web giới thiệu của các tổ chức, cá nhân thì sẽ quay lại trong thời gian lâu hơn.

- Khả năng chuẩn hóa, lọc các URL: thông thường URL có nhiều định dạng khác nhau nhưng vẫn cùng trỏ vào một địa chỉ. Việc phải chuẩn hóa từng URL để lưu trữ tránh trùng lặp, tránh thu thập nội dung lại là một vấn đề quan trọng. Ví dụ: http://www.apache.org, http://apache.org, http://apache.org/ đều trỏ về trang chủ của Apache Software Foundation, nhưng khi lưu trữ thì 3 link này là hoàn toàn khác nhau. Vì thế chúng ta phải chuẩn bị bộ chuẩn hóa – normalizer và bộ lọc – filter URL để xử lý những tình huống này.

- Khả năng nhận biết nội dung mới: khi quay lại một URL cũ, làm cách nào để nhận biết nội dung có thay đổi hay không, và nếu thay đổi thì sẽ lấy những phần gì mới. Một trong những cách đơn giản nhất là lưu trữ nội dung của page và URL, sau đó băm thành một dãy để lưu trữ, so sánh với lần tiếp theo. Cách này giúp xử lý các trang cũ nhanh hơn.

Để một site không bị thu thập bởi các bộ thu thập tin, có thể sử dụng file robots.txt [27].

Như vậy để có được một hệ thống thu thập tin tức hiệu quả, cần chuẩn bị rất nhiều về cả hạ tầng (máy tính để thu thập, băng thông mạng, hệ thống phân giải địa chỉ,…) lẫn các giải thuật để thu thập tin tức một cách có hiệu quả theo độ rộng, độ sâu, chỉ số của từng site, tần suất cập nhật.

Khi đã thu thập được các nội dung dữ liệu gốc, chúng ta cần phải bóc tách, để hiểu được những nội dung đính kèm như các tài liệu theo định dạng pdf, word, excel, txt,…. Ngoài ra khi đã có toàn bộ nội dung, sẽ phải bỏ đi những phần không cần thiết, rác để giảm dung lượng lưu trữ, dung lượng chỉ mục, và giảm độ nhiễu khi tìm kiếm. Thông thường một trang web, bao gồm rất nhiều thẻ meta, các thẻ định dạng, dữ liệu javascript, phần nội dung chủ yếu ở giữa trang, còn các phần header, footer, các menu, navigation bar đều là chung cho cả site, và nó không có nhiều nội dung.

Việc bóc tách nội dung có một số khó khăn sau:

- Cần phải hiểu nội dung cần bóc tách, hiện tại nếu như nội dung thuần dạng text do bộ thu thập dữ liệu lấy về, thì bộ bóc tách nội dung có thể hiểu và lưu trữ dễ dàng. Tuy nhiên nếu như gặp các định dạng đính kèm như các file văn bản: word, excel, rtf, open office, các file chứa nội dung: pdf, xml,… thì hệ thống bóc tách cần một bước đọc nội dung các file này và lấy ra toàn bộ nội dung chứa trong file.

- Hiểu khu vực nội dung cần bóc tách, bỏ những phần rác làm nhiễu kết quả trong nội dung dữ liệu: đây là một trong những vấn đề khó nhất, vì thông thường các trang web có cấu trúc khác nhau, không giống nhau, nên chúng ta không thể có một cơ chế chung để bóc tách nội dung có ý nghĩa trong các trang web. Thông thường nội dung có ý nghĩa sẽ nằm ở phần trung tâm của trang, các phần header, footer, menu navigation và cột bên phải không chứa đựng nội dung có ý nghĩa. Vì thế nhiệm vụ của phần bóc tách phải lấy cho đủ, không lấy thừa dữ liệu, vì khi lấy thừa dữ liệu, sẽ gây nặng, tốn kém hệ thống lưu trữ, đánh chỉ mục và gây nhiễu trong quá trình tìm kiếm. Hiện nay phương pháp thông dụng hay được sử dụng là phương pháp học máy, training cho hệ thống bóc tách về các mẫu nội dung cần lấy và hệ thống sẽ tự động bóc tách cho những trang web mới.

Hiện tại nhiều hệ thống sử dụng Apache Tika [29] để tìm và bóc tách thông tin từ các loại tài liệu thông qua các bộ bóc tách dữ liệu. Tika chạy khá mềm dẻo và xử lý được rất nhiều loại file.

Một phần của tài liệu Xây dựng, thử nghiệm giải pháp tìm kiếm theo yêu cầu người dùng, sử dụng cloud computing và thuật toán mapreduce (Trang 40 - 45)