Trong hai bài tutorial trước, chúng ta đã sử dụng Jsoup để tiến hành thu thập và truy xuất thông tin từ các trang web trên mạng Internet. Tuy nhiên để thực hiện được công việc này, ta cần phải biết tên id, tên tag, tên class,.. của bộ phận cần trích xuất thông tin. Với một trang web cụ thể, ta có thể dễ dàng biết được các thông số này bằng cách xem source code của trang web đó. Tuy nhiên với các trang web khác nhau, tên id, tên tag hoặc tên class của từng bộ phận lại khác nhau, do đó rất khó để ta có thể sử dụng Jsoup để thiết lập một cấu hình chung cho tất cả các trang Web. Việc cấu hình cho từng trang sẽ tương đối tốn thời gian nếu ta cần cấu hình một số lượng lớn các trang web và việc duy trì cấu hình này cũng mất nhiều công sức nếu các trang web thường xuyên thay đổi cấu trúc html của mình.

Để giải quyết vấn đề này, ta có thể sử dụng các thư viện như Boilerpipe, Goose, Readibility,… Đây đều là các thư viện được phát triển nhằm loại bỏ các thông tin không cần thiết (menu, quảng cáo, sidebar,…), giúp người dùng có thể dễ dàng trích xuất nội dung chính của bài viết. Trong bài tutorial này, chúng ta sẽ cùng tìm hiểu về cách sử dụng Boilerpipe – một thư viện Java nguồn mở được viết bởi Christian Kohlschutter, sử dụng kỹ thuật trích xuất thông tin mà Christian đã trình bày trong bài báo “Boilerplate Detection using Shallow Text Features” năm 2010.

Trước hết ta thêm dependency của Boilerpipe vào file pom.xml như sau:

Boilerpipe cung cấp một số loại Extractor khác nhau như:

ArticleExtractor: là Extractor chính được sử dụng cho các Article-like HTMLs.

DefaultExtractor: là Extractor mặc định của Boilerpipe, không sử dụng heuristics và thường cho kết quả không chính xác bằng ArticleExtractor .

LargestContentExtractor: Tương tự như DefaultExtractor nhưng LargestContentExtractor chỉ trả về kết quả là đoạn text trong block lớn nhất.

CanolaExtractor: là Extractor được huấn luyện trên krdwrd Canola.

KeepEverythingExtractor: trả về kết quả là các đoạn text.

Việc sử dụng Boilerpipe khá đơn giản khi ta chỉ cần tạo một biến Extractor rồi sử dụng hàm .getText() để lấy nội dung chính của bài đăng. Boilerpipe hỗ trợ 5 nguồn thông tin chính để trích xuất nội dung là URL, Reader, String html, InputSource và TextDocument. Ở đây ta sẽ sử dụng tham số đầu vào của .getText() là URL với URL là các đường link thu được từ việc sử dụng Google search để tìm các thông tin liên quan đến “Big data application” (Các bạn cần chuyển hàm googleSearch(String searchKey,int numOfResult) trong code của bài tutorial Tìm kiếm trên Google với Jsoup từ private thành public để có thể truy cập được từ hàm main của BoilerpipeExtractor)

Chạy chương trình trên ta được kết quả:

Tháng Mười Hai 25, 2018
ITechSeeker