Xây dựng môđun bóc tách

Một phần của tài liệu Hệ thống bóc tách giá cả sản phẩm tự động (Trang 56)

Dựa vào cơ sở lí thuyết đã được trình bày ở trên, ở đây sử dụng các nguyên mẫu (prototype) để xây dựng một mô đun bóc tách hoàn chỉnh giải quyết bài toán đã đặt ra. Cụ thể bổ sung thêm các luật để đưa ra các kết quả chính xác như lí thuyết mô tả. Trước tiên, cần định nghĩa các cấu trúc dữ liệu sử dụng cho quá trình bóc tách như dưới đây :

a. Cấu trúc chứa thông tin vùng dữ liệu

class Region {

private HtmlNode node; /* node cha cua vung du lieu */

private int index; /* chỉ số của node */

private int nCombinatedNode;/* So node chua trong mot node dinh gop */

}

Cấu trúc dữ liệu này đánh dấu các vùng thông tin chứa dữ liệu bằng cách lưu thông tin về nút cha (nút chứa vùng dữ liệu), các thông tin cơ bản về vùng dữ liệu. Đây chính là các vùng dữ liệu cần được xác định đầu tiên trước khi thực hiện các bước bóc tách.

b. Cấu trúc cây template (cây chứa thông tin mẫu)

public class TemplateTree {

String name; /* chua ten node tren cay DOM */

bool hasTemplate; /* cac node con co tao template ko*/

ArrayList childNodes;/* chua cac con tuong ung voi node */

... ...

//dinh nghia cac ham thao tac ...

}

TemplateTree là một cấu trúc cây, được sử dụng để chứa một cây thông tin mẫu được phát hiện từ một vùng dữ liệu chứa nhiều hơn một bản ghi dữ liệu. Nên phân biệt điểm khác nhau giữa một cây thông tin mẫu với một cây chứa các nút DOM của một sản phẩm thật. Cây thông tin mẫu chỉ chứa thông tin về tên nút, còn cây chứa thông tin sản phẩm thì lưu cả tên nút và cả giá trị của nút. Từ một cây thông tin mẫu ta có thể dựng được một cấu trúc cây gồm tên các nút DOM tương ứng với một cấu trúc trình bày thông tin của sản phẩm.

c, Cấu trúc chứa thông tin sản phẩm

class Item {

String name; /* Chua ten san pham */ String description; /* Chua mieu ta san pham */

String price; /* Chua gia san pham */ String images; /* Chua duong dan anh san pham */

... ...

//dinh nghia cac ham get/set ...

... }

Với đầu vào là một trang liệt kê sản phẩm chứa ít nhất hai sản phẩm trở lên với các thông tin tối thiểu (tên sản phẩm, giá cả) quá trình bóc tách gồm ba giai đoạn nối tiếp và tách biệt nhau hoàn toàn.

1. Tìm tất cả các vùng dữ liệu có thể chứa thông tin

Trên một trang liệt kê sản phẩm có thể có vài vùng dữ liệu chứa thông tin sản phẩm ở các vị trí khác nhau. Ngoài các vùng thông tin sản phẩm trang Web có thể còn chứa các vùng thông tin khác như quảng cáo, tin tức. Các trang Web qua giai đoạn xử lí này sẽ được bộ extractor bóc tách các vùng dữ liệu đặt vào mảng danh sách các vùng.

Trước tiên, trang Web được định vị vào một đối tượng HtmlDocument. Quá trình tìm kiếm vùng thông tin đều thao tác trên cấu trúc DOM của trang Web. Nút gốc xuất phát, chính là nút tương ứng với thẻ body duy nhất trên cây DOM. Bắt đầu từ nút này, thuật toán tìm kiếm sẽ được thực hiện đệ qui.

Node gốc của phần thông tin trong tài liệu HTML

(node body)

Vùng dữ liệu 1 (tƣơng ứng với node A)

Vùng dữ liệu 3 (tƣơng ứng với node C)

Vùng dữ liệu 2 (tƣơng ứng với node B) FindDataRegions

Hình 3.6: Minh họa kết quả xử lí bước 1 thuật toán

 Method FindDataRegions

protected ArrayList FindDataRegions(HtmlNode node) {

//implement }

Tham số

node : Nút gốc của cây DOM chứa các vùng dữ liệu

Trả về

Danh sách các vùng chứa dữ liệu

Mô tả

Hàm thực hiện tìm kiếm các vùng chứa dữ liệu thực sự (đỉnh gộp cuối) ở tất cả các mức của cây đầu vào

 Method IdentifyDR

protected ArrayList IdentifyDR(HtmlNode node,int

start) {

//implement }

Tham số

node: Nút gốc của cây DOM chứa các vùng dữ liệu

start: vị trí của thẻ bắt đầu vùng dữ liệu trong nút cha

Trả về

Danh sách các vùng chứa dữ liệu

Mô tả

Hàm thực hiện tìm kiếm tất cả các vùng có thể chứa dữ liệu dựa trên phép so sánh cây. Chỉ xem xét các đỉnh gộp ở mức con bậc 1 (ngay dưới node gốc)

 Method Distance

private double Distance(ArrayList nodeList, int nCombinate,int start)

{

//implement }

Tham số

nodeList: Danh sách chứa các nút con bậc 1 dưới dạng xâu

nCombinate: số nút giả thiết chứa trong một cây thông tin (đỉnh gộp)

start: vị trí của thẻ bắt đầu vùng dữ liệu trong node cha

Trả về

Khoảng cách cây soạn thảo đã được chuẩn hóa

Mô tả

Hàm thực hiện tính khoảng cách soạn thảo của hai cây thông tin giả thiết

2. Phát hiện cây thông tin mẫu từ một vùng chứa dữ liệu

Tương ứng với mỗi một vùng chứa các bản nghi dữ liệu đã được ghi nhận ở trên, một cây thông tin mẫu sẽ được tổ hợp trong giai đoạn này. Một tham số đóng vai trò ngưỡng được chỉ ra nhờ những kiểm nghiệm thực tế.

Quá trình tìm kiếm cây thông tin mẫu được lặp lại từ nút cha đến các nút con. Có thể tại một nút nào đó trên cây thẻ HTML, cây mẫu được phát hiện nhưng quá trình vẫn tiếp tục bởi trong một vùng dữ liệu thường sẽ có nhiều “hàng”, trên mỗi hàng lại có nhiều “cột” tức sắp xếp nhiều sản phẩm (các khái niệm “hàng” và “cột” ở đây chỉ là tương đối để minh họa việc cài đặt). Như vậy cây thông tin mẫu được phát hiện đầu tiên thường là tương ứng với cả một hàng. Vậy nếu dùng cây thông tin mẫu này để bóc tách cho sản phẩm thì kết quả trả về sẽ bị thiếu hoặc sai. Chính vì vậy quá trình tìm kiếm được tiếp tục để tìm ra cây thông tin mẫu cuối cùng ở mức sâu nhất. Biến

hasTemplatei được dùng để đánh dấu mỗi một cây thông tin mẫu được tìm thấy (tương ứng mỗi node trên cây mẫu được đánh dấu)

Vùng dữ liệu 1

(tƣơng ứng với node A) getTemplate

tr td br text text td img Vùng dữ liệu 2

(tƣơng ứng với node B) getTemplate

tr

td

img td

text

Hình 3.7 : Minh họa kết quả xử lí bước 2 thuật toán

 Method getTemplate

protected TemplateTree getTemplate(Region re,int thres)

{

//implement }

Tham số

re: Một vùng dữ liệu chứa thông tin

thres: ngưỡng tin cậy của cây thông tin

Trả về

Cây chứa các cây thông tin mẫu

Mô tả

Hàm tổng hợp ra cây thông tin mẫu cuối cùng chứa tên các nút theo cấu trúc cây dựa trên một ngưỡng khoảng cách soạn thảo cây. Đây là ngưỡng thể hiện số lượng cây con của cây thông tin được so khớp.

 Method getTemplateTree

protected TemplateTree getTemplateTree(HtmlNode

node, int thres) {

//implement }

Tham số

node: Node gốc chứa cây thông tin

thres: ngưỡng tin cậy của cây thông tin

Trả về

Cây thông tin mẫu

Mô tả

Hàm tổng hợp ra tập các cây thông tin mẫu từ một node cha của một bản ghi dữ liệu.

 Method SimpleTreeMatching

protected int SimpleTreeMatching(TemplateTree

source, TemplateTree des) {

//implement }

Tham số

source: Cây thông tin mẫu dùng để so sánh

des: Cây thông tin mẫu cần đối sánh

Trả về

Giá trị đối sánh của hai cây thông tin mẫu

Mô tả

Hàm thực hiện đệ qui để trả về trọng số đối sánh lớn nhất trong các cặp đối sánh các cây thông tin con.

3. Bóc tách các bản ghi từ vùng dữ liệu

Dựa vào cây thông tin mẫu đã phát hiện được, quá trình bóc tách bản ghi được thực hiện. Ý tưởng vẫn dựa trên nguyên lí khoảng cách soạn thảo cây để đối sánh cây thông tin với một cây thông tin thật để bóc ra giá trị các trường thông tin. Sau khi đã có được trường thông tin này, kết hợp với các đặc điểm nhận dạng để có thể đưa ra các thuộc tính sản phẩm dựa trên các trường thông tin đã bóc tách.

Vùng dữ liệu 1 (tƣơng ứng với node A)

tr td br text text td img getItemColletion tr td br text text td img /upload/nokia/3304.jpg (ảnh) 2,450,000 VND (giá) Nokia 6030 (tên) tr td br text text td img /upload/nokia/1204.jpg (ảnh) 6,000,000 VND (giá) Nokia N71 (tên) text khuyến mãi

Hình 3.8: Minh họa kết quả xử lí bước 3 thuật toán

 Method getItemCollection

protected ArrayList getItemCollection(Region re, TemplateTree

template, int thres) {

//implement }

Tham số

re: Một vùng dữ liệu chứa thông tin

template: Cây thông tin mẫu của các bản ghi dữ liệu

thres: Ngưỡng tin cậy của cây thông tin thật so với cây thông tin mẫu

Trả về

Danh sách các sản phẩm đã được xác định

Mô tả

Thực hiện các bước tách cây thông tin thật, định vị các trường thông tin vào cấu trúc dữ liệu sản phẩm dựa trên các dấu hiệu nhận dạng.

 Method MatchingTree

protected int MatchingTree(HtmlNode source,

TemplateTree des) { //implement } Tham số

source: Nút cha của một cây thông tin thật

des: Cây thông tin mẫu của các bản ghi dữ liệu

Trả về

Giá trị đối sánh của cây thông tin mẫu với cây thông tin thật

Mô tả

Hàm thực hiện đệ qui để trả về trọng số đối sánh lớn nhất trong các cặp đối sánh các cây thông tin con.

 Method getNodeData

protected ArrayList getNodeData(HtmlNode source, TemplateTree template, int thres,int index) {

//implement }

Tham số

source: Nút cha của cây thông tin thật

template: Cây thông tin mẫu của các bản ghi dữ liệu

thres: Ngưỡng tin cậy của cây thông tin thật so với cây thông tin mẫu

Trả về

Danh sách các sản phẩm đã được xác định

Mô tả

Thực hiện xác định các trường thông tin thật, định vị các thông tin này vào cấu trúc dữ liệu sản phẩm dựa trên các dấu hiệu nhận dạng.

Một phần của tài liệu Hệ thống bóc tách giá cả sản phẩm tự động (Trang 56)