4.4 Thiết kế, cài đặt tác tử di động tìm kiếm và trích rút thông tin
4.4.3 Trích rút đơn vị mô tả sản phẩm
Bài toán được đặt ra là từ trang Web nhận được, làm sao để lấy được chính xác tên của tài liệu và địa chỉ download. Quá trình thực hiện qua các bước sau:
Bước 1: Phân tích trang Web
Phân tích nội dung trang Web thành các dòng logic, mỗi dòng thể hiện là 1 thẻ HTML hoặc một giá trị thuộc tính của thẻ.
Việc thực hiện phân tích một trang HTML chuyển về dạng các dòng logic được thực hiện bởi phương thức parseHTML(File) thuộc lớp WebExtraction.
Hình 4-5 mô tả các dòng logic của trang HTML sau khi được phân tích. Riêng đối với các thẻ <a> được thêm vào thẻ <href> để thể hiện địa chỉ URL của tài liệu.
Hình 4-5 Nội dung trang HTML sau khi phân tích
Bước 2: Ánh xạ các thẻ HTML thành dạng thẻ bài
Phân tích mỗi dòng logic kết quả của bước 1 và ánh xạ sang thẻ bài tương ứng được quy định như Bảng 4-2
Bảng 4-2 Ánh xạ thẻ bài
Phân loại Ánh xạ Ý nghĩa
TEXT 0 Các thông tin không nhận biết được <BR> 2 Thẻ xuống dòng
<B> & </B> 3 Mở hoặc đóng thẻ <B> <A> & </A> 4 Mở hoặc đóng thẻ <A> <IMG> 5 Thẻ <IMG>
<HREF> 6 Thẻ <HREF>
TTAG 8 Các thẻ bảng: <td>, <tr>, <th>, </td>, </tr>, </th>
Bước 2 được thực hiện bởi phương thức createTokens() trong lớp
WebExtraction
Bước 3: Tìm mẫu xuất hiện với tần xuất nhiều nhất
Sau bước 2 toàn bộ trang HTML được chuyển thành dạng 1 xâu chỉ mục. Bước 3 này chỉ còn phải thực hiện công việc đơn giản là tìm xâu lặp trong chuỗi đó. Trước tiên phải xác định xâu bắt đầu của PDU (X) và xâu cuối của PDU (Y). Hàm
findIndex(seqStart, _MAP) trả lại vị trí đầu tiên của xâu X nằm trong xâu ánh xạ _MAP bắt đầu từ vị trí seqStart. Hàm findIndexReverse(seqStart, _MAP) trả lại vị trí đầu tiên của xâu Y nằm trong xâu _MAP bắt đầu từ vị trí
seqStart.
Thuật toán [20] trình bày về tìm mẫu xuất hiện nhiều nhất trong bài toán tìm kiếm thông tin về giá cả. Thuật toán sau đã được cải tiến để có thể tìm mẫu xuất hiện nhiều nhất đối với các mẫu dạng tên tài liệu và địa chỉ download tài liệu.
seqStart Å 0; // khởi tạo vị trí cho mẫu được tìm kiếm numCandPDUs Å 0; // số lượng mẫu khác nhau
while(true){ // tìm PDU tiếp theo trong khi còn đúng titleIndex Å findIndex(seqStart, _MAP);
urlIndex Å findIndexReverse(titleIndex+1, _MAP); currentPDU Å substring(_MAP, titleIndex, urlIndex); if(currentPDU==null) then exit();//không thêm PDU nào if(currentPDU đã tồn tại trong mảng candPDUs)
tăng biến đếm tần suất xuất hiện của PDU đó lên 1; else {
lưu currendPDU trong mảng candPDUs;
tăng biến đếm số lượng PDU khác nhau lên 1; } //kết thúc khối lệnh else;
seqStart Å titleIndex+1;/*điểm bắt đầu cho lần tìm kiếm lặp lại tiếp theo*/
} //kết thúc vòng lặp While;
mostFreqPDU Å thành phần trong mảng candPDUs có tần suất xuất hiện lớn nhất
return (mostFreqPDU);
Thuật toán này được thể hiện trong phương thức findPDU() thuộc lớp
WebExtraction.
Sau ba bước này nhận được mẫu xuất hiện nhiều nhất, mẫu này chính là thể hiện của một đơn vị mô tả sản phẩm.