Trích rút thông tin từ trang web dựa trên cấu trúc cây DOM

Một phần của tài liệu 28012_171220200190175LUANVAN (Trang 38 - 45)

6. Bố cục của luận văn

2.2.1.Trích rút thông tin từ trang web dựa trên cấu trúc cây DOM

a. Khái nhiệm cây DOM [7]

Phƣơng pháp sử dụng cây DOM sẽ phân tích mã nguồn HTML dƣới dạng một cây các node, mỗi node là một thẻ HTML, quá trình trích rút thông tin sẽ dựa vào đƣờng đi từ gốc đến node chứa thông tin cần trích rút.

Theo W3C [17] thì DOM (Document Object Model) là một giao diện lập trình ứng dụng (API) cho các văn bản HTML hợp lệ và các văn bản XML có cấu trúc chặt chẽ. Nó định nghĩa cấu trúc logic của các văn bản và cách thức một văn bản đƣợc truy cập và thao tác [15].

Ví dụ về một bảng đƣợc lấy từ văn bản HTML:

Hình 2.3. Dạng biểu diễn cây DOM của mã HTML

Cây DOM đƣợc xây dựng dựa trên các thẻ HTML, trong đó nút gốc chính là thẻ ngoài cùng (TABLE), sau đó đến các thẻ lồng bên trong và lá

chính là các nội dung. Nhƣ vậy việc trích chọn thông tin trên cây DOM chính là việc duyệt cây thông qua các cặp thẻ HTML. Nhƣ vậy, việc trích rút thông tin từ cây DOM phía trên nhƣ sau: Duyệt lần lƣợt qua các nút cây DOM đến khi nào gặp lá. Khi đó, giá trị tại nút chính là thông tin cần trích rút. Ví dụ: Trích rút thông tin Aeolian thì sẽ duyệt cây DOM nhƣ sau: TBODY -> TR -> TD -> Aeolian.

b. Phương pháp xây dựng cây DOM [7]

Xây dựng cây DOM từ những trang web đầu vào là một bƣớc cần thiết trong nhiều giải thuật trích rút dữ liệu.

Có hai phƣơng pháp cơ bản để xây dựng các cây DOM:

* Sử dụng các thẻ riêng biệt [7]

Hầu hết các thẻ HTML làm việc trong một cặp. Mỗi cặp chứa một thẻ mở <> và một thẻ đóng </>. Bên trong mỗi cặp thẻ có thể có những cặp thẻ khác, kết quả là cấu trúc trở nên chồng chéo. Xây dựng một cây DOM từ một trang web bằng cách sử dụng mã HTML của nó là một vấn đề cần thiết. Trong một cây DOM, mỗi cặp thẻ là một node, những cặp thẻ ẩn bên trong là node con của node hiện tại. Có hai nhiệm vụ cần thi hành đó là:

Làm sạch mã HTML: Một vài thẻ không cần thẻ đóng (nhƣ <li>, <hr>,<p>) mặc dù chúng có thẻ đóng. Bởi vậy một thẻ đóng nên đƣợc chèn vào để tất cả các thẻ đƣợc cân bằng. Các thẻ đƣợc định dạng không tốt cũng cần thiết đƣợc sửa chữa. Một thẻ sai thƣờng là một thẻ đóng, đó là thẻ cắt ngang các khối ẩn bên trong. Ví dụ: <tr> … <td> … </tr> … </td>, sẽ rất khó để sửa lỗi trƣờng hợp này nếu tồn tại sự chồng chéo đa cấp. Có một vài phần mềm mã nguồn mở để làm sạch mã HTML, một số những phần mềm thông dụng nhƣ: JTidy, NekoHTML, HTMLCleaner.

Xây dựng cây: Chúng ta có thể đi theo các khối con của các thẻ HTML để xây dựng đƣợc cây DOM.

* Sử dụng các thẻ và các hộp thông tin trực quan Visual Cue

Thay vì phân tích mã HTML để sửa lỗi, có thể sử dụng sự biểu diễn hoặc các thông tin trực quan (ví dụ địa chỉ trên màn hình mà các thẻ đƣợc biểu diễn) để suy luận mối quan hệ có cấu trúc của các thẻ và có thể xây dựng đƣợc cây DOM. Phƣơng thức xây dựng có thể phân tích mã HTML thành cây DOM, miễn là trình duyệt có thể hiển thị đƣợc đoạn mã đó một cách chính xác.

Trong một trình duyệt web, mỗi phần tử HTML (chứa đựng một thẻ mở, các thuộc tính tùy chọn, nội dung HTML đƣợc nhúng tùy ý và một thẻ đóng, thẻ này có thể thiếu) đƣợc biểu diễn nhƣ một hình chữ nhật. Thông tin trực quan này có thể lấy đƣợc sau khi mã HTML đƣợc biểu diễn trên trình duyệt. Một cây DOM sau đó có thể đƣợc xây dựng dựa vào các thông tin trực quan này. Các bƣớc xử lý nhƣ sau:

- Tìm 4 đƣờng biên của hình chữ nhật ứng với mỗi phần tử HTML thông qua việc công cụ trình diễn của trình duyệt ví dụ nhƣ trình duyệt Internet Explorer.

- Theo sự tuần tự của các thẻ mở kiểm tra xem một hình chữ nhật có nằm trong một hình chữ nhật khác không để xây dựng cây DOM. Hình 2.5 minh họa về sử dụng hộp thông tin trực quan Visual Cue gồm đoạn HTML, tọa độ ranh giới, và cây kết quả. Đoạn mã HTML này có ba lỗi, sử dụng thông tin trực quan có thể dễ dàng xây dựng đƣợc cây DOM.

c. Trích rút thông tin từ trang web dựa trên cây DOM [7]

Để trích rút đƣợc thông tin cần thiết ở một node của cây DOM, chúng ta cần chỉ rõ đƣờng đi từ gốc của cây đến node cần trích rút thông tin. Đƣờng đi này gọi là một XPath hay mẫu trích rút.

Trƣớc tiên việc trích rút này đƣợc hỗ trợ bởi xây dựng cây DOM cho mã HTML của trang. Các mẫu trích rút có thể đƣợc làm rõ nhƣ đƣờng dẫn từ gốc của cây DOM đến node chứa nội dung cần trích rút.

Ví dụ: Đây là cây DOM của một đoạn mã HTML chứa thông tin về bài báo, gồm tiêu đề của bài báo (title) và nội dung của bài báo (content). Bài toán đặt ra là sử dụng cây DOM này trích rút các thông tin về tiêu đề của bài báo và nội dung của bài báo. Mẫu trích rút đƣợc xây dựng nhƣ sau:

Mẫu trích rút tiêu đề bài báo: HTML -> BODY -> B -> CharacterData Mẫu trích rút nội dung bài báo: HTML -> BODY -> FONT -> CharacterData.

Hình 2.5. Mô tả mẫu trích tiêu đề và nội dung bài báo

Việc trích rút đƣợc hỗ trợ bởi xây dựng cây DOM cho mã HTML của trang. Các mẫu trích rút này có thể đƣợc làm rõ nhƣ đƣờng dẫn từ gốc của cây DOM đến node chứa nội dung cần trích rút. Với đầu vào là một trang web có

dạng liệt kê danh sách mẩu tin, phƣơng pháp của luận văn đƣợc thực hiện thông qua các bƣớc nhƣ sau [7]:

Bước 1: Xác định các thuộc tính khóa của bộ dữ liệu

Bước 2: Xây dựng bộ dữ liệu mẫu trong trang web

Bước 3: Tìm kiếm các bộ dữ liệu có trong trang web

Bước 4: Xác định các thuộc tính trong một bộ dữ liệu (adsbygoogle = window.adsbygoogle || []).push({});

* Xác định các thuộc tính khóa của bộ dữ liệu

Phần lớn các phƣơng pháp trích rút thông tin trên một trang duy nhất đều có bƣớc đầu tiên là đi tìm vùng dữ liệu chính của trang web để xác định danh sách các bộ dữ liệu. Tuy nhiên, bƣớc này vô hình chung đã loại bỏ các danh sách khác trong trang web cũng nhƣ dễ dàng nhận dạng sai vùng dữ liệu. Thay vào đó phƣơng pháp đề xuất sẽ không tìm vùng chứa nội dung chính mà trực tiếp xác định các bộ dữ liệu có trong trang web thông qua tìm kiếm các thuộc tính khóa của bộ dữ liệu.

Thứ nhất: Cách thức duyệt trên cây DOM [7]

Do các thuộc tính chỉ bảo toàn đƣờng dẫn từ nút lá đến nút danh sách bộ dữ liệu, nên thuật toán sẽ bắt đầu từ các nút lá của cây DOM và đi ngƣợc lên nút gốc. Nhằm giảm bớt độ phức tạp tính toán và tăng tốc độ duyệt trên cây, cây DOM biểu diễn của trang web sẽ đƣợc lƣợc giản hóa bằng cách loại bỏ các nhánh không dẫn đến nút lá văn bản hoặc nút văn bản có nội dung rỗng.

Thứ hai: Xác định nút ứng cử là danh sách và danh sách thuộc tính khóa [7]

Tại mỗi bƣớc đi ngƣợc lên gốc, ta xét từng nút trên cây DOM xem có phải thể là nút chứa danh sách các bộ thuộc tính và xác định thuộc tính khóa của các bộ thuộc tính này. Do tính chất của thuộc tính khóa mục, nếu p là nút chứa danh sách các bộ dữ liệu thì các thuộc tính khóa của các bộ dữ liệu trong

p phải là danh sách các nút lá văn bản có cùng đƣờng dẫn từ nút lá đến nút p và xuất hiện nhiều nhất. Thuộc tính khóa là thuộc tính của bộ dữ liệu và luôn xuất hiện trong bộ dữ liệu. Hơn nữa các nút lá này phải thuộc về các cây con phân biệt và trực tiếp của p do tính chất các bộ dữ liệu bao gồm toàn bộ một hoặc nhiều cây con trực tiếp của nút danh sách. Nói cách khác, hai nút lá là thuộc tính khóa không thể xuất hiện trong cùng một cây con trực tiếp của p. Các bƣớc trên chỉ dựa trên cấu trúc của thuộc tính khóa của cây DOM nên vẫn có khả năng nhận nhầm cấu trúc của một cây con của trang web thành nút danh sách bao gồm các thuộc tính khóa thỏa các tính chất nêu trên. Vì vậy, cần có các bộ lọc kết quả nhƣ độ tƣơng đồng giữa kích thƣớc của các bộ dữ liệu trong cùng một danh sách, độ tƣơng đồng về cấu trúc cây của các bộ dữ liệu trong cùng một danh sách,... Tùy vào tính chất và loại website muốn trích rút thông tin ta có thể bổ sung thêm các loại bộ lọc kết quả để có đƣợc kết quả cô đọng và chính xác hơn. Sau bƣớc này ta có đƣợc các danh sách và các thuộc tính khóa tƣơng ứng. Tuy nhiên, một loại bộ dữ liệu có thể xuất hiện trong nhiều danh sách khác nhau của trang web. Vì vậy, ta cần xác định các loại bộ dữ liệu có trong trang web và tiến hành gom nhóm các loại bộ dữ liệu. Các bƣớc gom nhóm cơ bản gồm:

Bước 1: Gom nhóm các danh sách liền kề nhau có chung đƣờng dẫn từ khóa lên nút danh sách. Ví dụ hai danh sách là hai thẻ liên tiếp nhau <tr> trong một thẻ <table>

Bước 2: Gom nhóm các danh sách có chung đƣờng dẫn từ nút khóa lên nút danh sách và có bộ dữ liệu mẫu tƣơng đồng nhau. Tức là các danh sách có cấu trúc cây của các bộ dữ liệu tƣơng đồng nhau.

Cuối cùng, nhằm xác định đƣợc bộ dữ liệu chính của trang web, ta cần hàm đánh giá độ mức độ quan trọng của danh sách trong trang web.

* Thuật toán tìm các thuộc tính khóa trên cây DOM [7]

Bước 1: Gọi R là tập hợp các loại danh sách các thuộc tính khóa của trang web. Ban đầu R = ∅

Bước 2: Lƣợc giản hóa cây DOM của trang web và gọi là cây D, chỉ giữ lại các nhánh có chứa nút văn bản.

Bước 3: Gọi T là tập hợp tất cả các nút lá của cây D là văn bản text có nội dung khác rỗng.

Bước 4: Gọi P là tập hợp tất cả các nút cha trên cây D của các nút t ∈ T.

Bước 5: ∀p ∈ P, trong tập C các nút con trực tiếp của p, tìm các nút lá văn bản t có đƣờng dẫn tƣơng ứng đến các nút con phân biệt thuộc C giống nhau.

Bước 6: Xác định nhóm g là nhóm đầu tiên có số lƣợng nút con trực tiếp của p nhiều nhất.

Bước 7: Áp dụng các phƣơng pháp lọc kết quả nhóm g có phải là danh sách các thuộc tính khóa trong danh sách p hay không.

Bước 8: Nếu thỏa bƣớc 6, R = R ∪ g.

Bước 9: Nếu P ≠ ∅, gán T = P và quay lại bƣớc 3.

Bước 10: Gom nhóm cơ bản các danh sách thuộc tính khóa trong R của cùng một loại bộ dữ liệu.

Bước 11: Sắp xếp R giảm dần dựa trên hàm f, hàm đánh giá độ quan trọng của danh sách các thuộc tính khóa trong trang web.

* Xây dựng bộ dữ liệu mẫu trong trang web

Bước 1: Bƣớc này chuyển đổi các bộ dữ liệu thành các chuỗi phần tử với một phần tử đại diện cho tên của nút trên cây DOM. Thực hiện duyệt theo chiều sâu trên cây biểu diễn bộ dữ liệu và thêm các phần tử vào chuỗi phần tử.

Bước 2: Xác định chuỗi phần tử dài nhất và tạm thời đặt làm bộ dữ liệu mẫu m

Sau khi đối sánh, bổ sung vào m các phần tử của ti chƣa đƣợc đối sánh trên m

* Tìm kiếm các bộ dữ liệu có trong trang web

Dựa trên bộ dữ liệu mẫu đã tìm đƣợc ở bƣớc trên, ta một lần nữa đối sánh bộ dữ liệu mẫu trên toàn bộ cây DOM biểu diễn của trang web để tìm lại tất cả bộ dữ liệu có thể có thỏa bộ dữ liệu mẫu. Bƣớc này rất quan trọng vì trong bƣớc đầu của phƣơng pháp rất có thể bỏ qua các thuộc tính khóa khi trong trang web có nhiều danh sách riêng biệt. Bƣớc này cũng giúp tìm đƣợc các bộ đứng riêng lẻ không nằm trong danh sách mà các thuật toán trƣớc đó đều không phát hiện đƣợc. Do đƣờng dẫn từ thuộc tính khóa lên tới nút chứa danh sách của cùng một loại bộ dữ liệu luôn bảo toàn trong một trang web, ta tiếp tục duyệt từ nút lá ngƣợc trở lên gốc của cây DOM để so sánh với đƣờng dẫn của thuộc tính khóa trong dữ liệu mẫu. Ứng với mỗi trƣờng hợp tìm thấy, ta tiếp tục đối sánh cây biểu diễn của bộ dữ liệu mẫu tại vị trí tìm đƣợc. Nếu độ tƣơng đồng giữa bộ dữ liệu mẫu và vị trí đối sánh thỏa ngƣỡng tƣơng đồng, ta phát hiện thêm một bộ dữ liệu có trong trang web.

* Xác định các thuộc tính trong một bộ dữ liệu

Dựa vào bộ dữ liệu mẫu và danh sách bộ dữ liệu tìm đƣợc ta tiến hành đối sánh để xác định các thuộc tính trong bộ dữ liệu. Do bộ dữ liệu mẫu là bộ dữ liệu lớn nhất vì vậy việc đối sánh trở thuộc tính trở thành đối sánh cây với cây biểu diễn bộ dữ liệu mẫu. (adsbygoogle = window.adsbygoogle || []).push({});

Tƣơng tự nhƣ việc xây dựng bộ dữ liệu mẫu, tiếp tục sử dụng phƣơng pháp xấp xỉ là đối sánh chuỗi để đối sánh các thuộc tính của các bộ dữ liệu với bộ dữ liệu mẫu.

Một phần của tài liệu 28012_171220200190175LUANVAN (Trang 38 - 45)