Tưởng giải thuật “Khoảng cách cây soạn thảo”

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 33)

2.2.2.1 Các khái niệm cơ bản

a. Khái niệm khoảng cách soạn thảo cây

Cho T là một cây có gốc, ta gọi T là một cây có nhãn nếu mỗi đỉnh của chúng được gắn một nhãn là một trong các kí tự trong tâp hữu hạn W. Ta gọi T là cây có thứ tự nếu chúng được sắp xếp theo thứ tự từ phải sang trái. Các phép toán cơ bản cho cây sắp xếp thứ tự là: [8]

Gắn lại nhãn: Thay đổi nhãn của một đỉnh v nào đó trong T

Xóa nhãn: Xóa một đỉnh không phải đỉnh gốc v trong T ứng với đỉnh cha là đỉnh v0, các đỉnh con của v sẽ trở thành đỉnh con của v0 tại vị trí của v0 theo một thứ tự từ trái sang phải.

Chèn: Chèn một đỉnh v là một đỉnh con của v0 trong T.

Giả sử ta có một hàm chi phí cho các phép toán cơ bản trên cây. Một phép chuyển S là một phép chuyển giữa hai cây T1 và T2 để chuyển từ T1 thành T2 dựa trên các phép toán cơ bản trên cây. Mỗi một phép chuyển S ta có một giá trị chi phí C. Giá trị nhỏ nhất của C được gọi là khoảng cách soạn thảo cây (tree edit distance).

b. Vùng dữ liệu và đỉnh gộp

Đỉnh gộp (hay một đỉnh hợp) có độ dài r gồm r đỉnh trong cây thẻ HTML, là đỉnh có các tính chất sau:

 Tất cả r đỉnh con có chung một đỉnh cha.

 r đỉnh con này đều liền kề nhau liên tục trong cấu trúc cây thẻ HTML.

Một vùng dữ liệu là một tập gồm hai hay nhiều đỉnh hợp có các tính chất sau:

 Các đỉnh hợp này đều có chung môt đỉnh cha.

 Các đỉnh hợp này đều có cùng độ dài

 Các đỉnh hợp phải liền kề nhau

 Khoảng cách soạn thảo của các đỉnh hợp này phải nhỏ hơn một ngưỡng nhất định nào đó.

Hình 2.5: Mô tả cây thông tin chứa nhiều vùng dữ liệu

Để thuận tiện cho việc mô tả, ở đây ta sử dụng cây với các đỉnh có chỉ số thay vì dùng các đỉnh thẻ HTML. Trên hình 2.5 vùng tô màu là các đỉnh gộp như đỉnh 5 và 6 là các đỉnh gộp có độ dài 1 và chúng tạo lên vùng dữ liệu 1. Các đỉnh 8, 9, 10 là các đỉnh gộp có độ dài 1 và chúng tạo thành một vùng dữ liệu thứ 2, các cặp đỉnh (14, 15), (16, 17) và (18, 19) là các đỉnh gộp có độ dài 2 và chúng tạo thành một vùng dữ liệu thứ 3.

c. Đối sánh cây đơn giản

Theo định nghĩa ở trên, khoảng cách soạn thảo giữa cây A, B là tổng chi phí ít nhất để chuyển từ cây A sang cây B dựa trên các phép toán cơ bản trên cây như thêm đỉnh, thay thế đỉnh và xóa đỉnh. Để tính khoảng cách soạn thảo cây, có thể đưa về bài toán tìm số cặp đỉnh đối sánh lớn nhất giữa hai cây [9]. Sau đây là thuật toán đối sánh cây đơn giản dùng đối sánh các đỉnh con bậc một của cây. [3][4]

Cho A = <RA, A1, A2 , …, Am> và B = <RB, B1, B2 , …, Bn> là hai cây trong đó RA và RB là đỉnh gốc và Ai, Bj là các cây con bậc 1 thứ i và j của A, B. Nếu RA và RB

cùng chứa một nhãn thì phép đối sánh lớn nhất giữa hai cây A, B là MA,B + 1 trong đó MA,B là phép đối sánh cây lớn nhất của <RA, A1, A2 , …, Am> và <RB, B1, B2,…, Bn>. Việc tính MA,B có thể theo lược đồ kĩ thuật quy hoạch động như sau:

− Nếu số cặp đối sánh lớn nhất giữa Am và Bn lớn hơn bất kì số cặp đối sánh lớn nhất giữa Am và Bi (1 i< n) thì MA,B bằng số cặp đối sánh lớn nhất giữa <A1,

A2 , …, Am> và <B1, B2 , …, Bn-1> cộng với số cặp đối sánh lớn nhất giữa Am và Bn.

− Ngược lại MA,B chính là số cặp đối sánh lớn nhất giữa <A1, A2 , …, Am> và <B1, B2 , …, Bn-1> hoặc giữa <A1, A2 , …, Am-1> và <B1, B2 , …, Bn>

2.2.2.2 Phân vùng thông tin dựa trên khoảng cách soạn thảo cây

Trong một trang web, thông thường có nhiều vùng thông tin khác nhau. Để tìm được thông tin cần thiết, ta cần phải phân vùng thông tin. Có rất nhiều phương pháp khác nhau thực hiện việc phân vùng thông tin trong trang web. Trong mục này, ta sẽ trình bày một phương pháp phân vùng thông tin dựa trên khoảng cách soạn thảo cây. Ý tưởng để xác định các miền thông tin trong một trang Web dựa trên các quan sát sau:

− Các bản ghi dữ liệu mà chứa thông tin mô tả tập các đối tượng giống nhau (ví dụ các mặt hàng) thường được biểu diễn dưới một vùng dữ liệu liên tục của một trang Web và được biểu diễn bởi các thẻ HTML giống nhau.

− Các bản ghi dữ liệu trong một vùng dữ liệu nhất định được biểu diễn bởi các cây thẻ HTML con giống nhau và các cây thẻ HTML con này thường có chung một đỉnh cha nào đó, mặc dù không biết được đỉnh cha này là đỉnh nào. Ví dụ, hình 2.6, có thể thấy rằng mỗi một bản ghi dữ liệu trong cây thẻ có 3 đỉnh thẻ TR và mỗi một đỉnh thẻ TR có thể có các đỉnh thẻ con TD. Và các đỉnh thẻ TR này có cùng chung một đỉnh cha là đỉnh TBODY. [5]

Hình 2.6: Cấu trúc cây thông tin cho các bản ghi dữ liệu

Để tìm các vùng dữ liệu có trong một trang Web, thuật toán cần phải thực hiện trả lời các câu hỏi sau:

1. Đâu là đỉnh gộp đầu tiên bắt đầu một vùng dữ liệu? Ví dụ trong vùng dữ liệu thứ hai của hình 2.5, đỉnh 8 là đỉnh bắt đầu vùng dữ liệu.

2. Một đỉnh gộp trong một vùng dữ liệu nhất định nào đó có bao nhiêu đỉnh thẻ. Ví dụ trong vùng dữ liệu thứ 3 sẽ thấy rằng mỗi một đỉnh gộp có 2 đỉnh thẻ.

Gọi K là số đỉnh thẻ lớn nhất mà một đỉnh gộp có thể có. Để trả lời câu hỏi (1), thực hiện tìm điểm bắt đầu vùng dữ liệu bằng cách xem xét tuần tự từng đỉnh một. Còn đối với câu hỏi (2), gộp các đỉnh với độ dài là 1, 2, . . cho đến K. Cụ thể, bắt đầu từng đỉnh một, và thực hiện việc so sánh các xâu 1 đỉnh, 2 đỉnh cho đến K đỉnh.

Hình 2.7 mô tả chi tiết quá trình so sánh các đỉnh. Trong đó, tiến hành việc so sánh 10 đỉnh con có cùng đỉnh cha là đỉnh P. Sau đó bắt đầu lần lượt các đỉnh và thực hiện việc so sánh xâu gộp của các đỉnh con trong cây thẻ HTML. [3]

P 3 8 1 2 4 5 6 7 9 10 P 3 8 1 2 4 5 6 7 9 10 Hình 2.7: Thực hiện hợp đỉnh và so sánh

Bắt đầu từ đỉnh 1: Thực hiện các phép so sánh xâu:

 (1, 2), (2, 3), (3, 4), (4, 5), (6, 7), (7, 8), (8, 9), (9, 10).

 (1-2, 3-4), (3-4, 5-6), (5-6, 7-8), (7-8, 9-10).

 (1-2-3, 4-5-6), (4-5-6, 7-8-9).

(1, 2) có nghĩa là xâu thẻ của đỉnh 1 được so sánh với xâu thẻ của đỉnh 2. Xâu thẻ của một đỉnh bao gồm tất cả các thẻ trong cây con của đỉnh đó.

Bắt đầu từ đỉnh 2: Thực hiện các phép so sánh:

 (2-3, 4-5), (4-5, 6-7), (6-7, 8-9)

 (2-3-4, 5-6-7), (5-6-7, 8-9-10)

Không thực hiện so sánh xâu 1 đỉnh vì đã thực hiện phép so sánh này rồi.

Bắt đầu từ đỉnh 3: Thực hiện các phép so sánh:

Tương tự như trên sẽ không thực hiện phép so sánh 1 đỉnh và 2 đỉnh bởi vì đã thực hiện các phép so sánh này rồi. Ở đây cũng không thực hiện các phép so sánh bắt đầu sau đỉnh 3 vì thực tế đã thực hiện tất cả các phép so sánh có thể có rồi.

Thuật toán so sánh xâu các đỉnh trong một cây thẻ HTML dựa trên khoảng cách soạn thảo được mô tả bằng biểu đồ hoạt động (hình 2.8):

Hình 2.8: Biểu đồ hoạt động thuật toán so sánh xâu các đỉnh

Thuật toán dựa trên tư tưởng thuật toán tìm kiếm theo chiều sâu, thăm đỉnh gốc trước sau đó thăm các đỉnh con. Tại mỗi đỉnh, thực hiện việc so sánh các xâu gộp có độ dài khác nhau của các đỉnh con. Thuật toán sẽ không thực hiện các phép so sánh đối với những đỉnh mà độ sâu của cây con của đỉnh này là 1 hoặc 2. Bởi vì, không thể có một vùng dữ liệu nào được tạo bởi duy nhất một đỉnh thẻ.

Thuật toán so sánh các xâu gộp có độ dài khác nhau của các đỉnh con được thực hiện như sau:

Bắt đầu từ từng đỉnh trong danh sách các đỉnh và chỉ cần thực hiện tới K phần tử (K là số đỉnh thẻ lớn nhất mà một đỉnh gộp có thể có, ta thường chọn K bằng 10). Thực hiện việc so sánh các đỉnh gộp có độ dài khác nhau, bắt đầu so sánh các đỉnh gộp có độ dài 1 cho các đỉnh gộp có độ dài K. Để so sánh các xâu thì thuật toán sử dụng hàm so sánh các xâu thẻ các đỉnh gộp. Hàm này dựa trên thuật toán khoảng cách soạn thảo xâu hay còn gọi là khoảng cách Levenshtein [3]. Khoảng cách soạn thảo của hai xâu được định nghĩa là số lượng nhỏ nhất các phép: xóa, thay thế và chèn kí tự cần thiết để chuyển một xâu các kí tự này thành một xâu các kí tự khác. Tuy nhiên, khi áp dụng, thuật toán khoảng cách soạn thảo chuẩn hóa sẽ được sử dụng. Khoảng cách soạn thảo chuẩn hóa bằng khoảng cách soạn thảo chia cho tổng khoảng cách của hai xâu kí tự NormalizedEditDistance (S1, S2)= ) ( ) ( ) , ( distance 2 2 1 2 1 S Length S Length S S   (1. 1) Kiểm tra độ sâu của

cây con thuộc đỉnh.

Đỉnh, K (số đỉnh thẻ lớn nhất mà một đỉnh gộp có) thể có) Kết quả >=3 Sai So sánh các xâu gộp có độ dài khác nhau của các đỉnh con. Đúng Thực hiện đệ qui với các đỉnh con.

Sau khi so sánh các đỉnh trong cây thẻ HTML ta biết được các khoảng cách soạn thảo của các đỉnh gộp có độ dài khác nhau. Từ kết quả này cho phép thực hiện việc tìm các đỉnh liên tiếp nhau trong cây thẻ HTML có cùng một đỉnh gốc, đây chính là quá trình tìm vùng dữ liệu.

b. Khai phá các vùng dữ liệu

Sau khi thực hiện so sánh xâu các thẻ trong cây thẻ HTML, có thể tìm được vùng dữ liệu thông qua quá trình tìm các đỉnh gộp của chúng. Hình sau sẽ được sử dụng để mô tả các cách tiếp cận chính của thuật toán xác định vùng dữ liệu. [8]

Hình 2.9: Mô tả một vùng dữ liệu

Về cơ bản, thuật toán xác định vùng dữ liệu trong một trang Web dựa trên kết quả so sánh xâu thẻ các đỉnh con của một đỉnh để tìm gộp của các đỉnh con giống nhau, từ đó sẽ xác định các đỉnh gộp và các vùng dữ liệu có thể có trong đỉnh cha. Tuy nhiên, các đỉnh gộp và các vùng dữ liệu này chưa chắc là đỉnh gộp và vùng dữ liệu cuối cùng. Để tìm vùng dữ liệu và các đỉnh gộp, sẽ sử dụng các nhận xét sau:

− Nếu một vùng dữ liệu ở mức cao bao một miền dữ liệu ở mức thấp hơn, vùng dữ liệu và các đỉnh gộp mức cao sẽ được sử dụng. Bao ở đây có nghĩa là vùng dữ liệu mức thấp nằm trong vùng dữ liệu mức cao. Ví dụ trên hình 2.9 các ô 1 và 2 có thể là một đỉnh gộp và hai đỉnh gộp này tạo nên một vùng dữ liệu ở hàng 1. Tuy nhiên, chúng nằm trong vùng dữ liệu mức cao hơn gồm tất cả 4 hàng. Cho nên, sẽ chọn vùng dữ liệu gồm tất cả 4 hàng chứ không chọn hàng 1 là một vùng dữ liệu.

− Cần một ngưỡng để xác định đâu là hai xâu thẻ giống nhau. Trong quá trình thử nghiệm để đảm bảo tốt việc xác định các vùng dữ liệu, ngưỡng thường được chọn là 0, 3.

Ý tưởng của thuật toán tìm các vùng dữ liệu có trong một cây thẻ HTML là đi từ trên xuống dưới bằng thuật tìm kiếm theo chiều sâu. Thực hiện hai bước sau:

− Khi đi xuống theo chiều sâu ta tìm tất cả các vùng dữ liệu có thể có của mỗi đỉnh. Tuy nhiên, đây không hẳn là các vùng dữ liệu thật sự của một đỉnh, chúng chỉ là các vùng dữ liệu có thể có của đỉnh.

− Khi đi lên sẽ thực hiện kiểm tra xem các vùng dữ liệu mức thấp có nằm trong các vùng dữ liệu mức cao hay không. Nếu vùng dữ liệu nào nằm trong vùng dữ liệu mức cao thì bị loại bỏ. Nếu không, coi vùng dữ liệu đó là một vùng dữ liệu có thể.

Sau khi xác định được các vùng dữ liệu khác nhau có trong trang Web, cần xác định các vùng dữ liệu cần thiết để tách thông qua các đặc điểm nhận dạng như kí tự $ cho các site buôn bán bằng tiếng anh thông qua giao dịch bằng đô la, £ cho các site thông tin mặt hàng bằng bảng anh và VNĐ, VNĐ, Đ, D cho các site thông tin dùng đồng Việt Nam.

c. Tách thông tin bản ghi dựa trên đối sánh cây đơn giản

Tất cả các bản ghi dữ liệu trong cùng một vùng dữ liệu khi biểu diễn dưới dạng cây thẻ HTML sẽ có chung một đỉnh cha nào đó, trong phần xác định vùng dữ liệu, đã xác định các vùng dữ liệu có thể có trong một đỉnh. Vấn đề là làm sao tìm được một cây mẫu dùng để biểu diễn thông tin các bản ghi của vùng dữ liệu đó. Bởi vì, trong các bản ghi dữ liệu có thể thêm hay bớt các trường thông tin, nên khi được biểu diễn dưới dạng cây thẻ HTML có thể thêm hay bớt một số đỉnh nào đó. Do cây mẫu phải là cây chứa tất cả các đỉnh dùng để biểu diễn trường thông tin của các bản ghi dữ liệu trong một vùng dữ liệu nhất định, nên, ngoài quá trình đối sánh để tìm các đỉnh đối sánh với nhau giữa hai cây, cần phải thực hiện việc căn chỉnh và gộp đỉnh của cây để không mất các trường thông tin.

Ý tưởng chung của thuật toán tìm cây mẫu dùng để biểu diễn các bản ghi dữ liệu đó là đi từ dưới lên trên, xem xét các cây liền kề nhau có cùng một đỉnh cha. Nếu hai cây nào giống nhau, sử dụng kĩ thuật căn chỉnh cây để tìm một cây mẫu chung cho hai cây này. Nếu không, có thể đây là hai cây biểu diễn các trường thông tin khác nhau, thực hiện việc tạo một cây mẫu có đỉnh gốc là đỉnh gốc của hai cây trên và nhận 2 cây trên là các cây con bậc 1.

Hình 2.10: Biểu đồ hoạt động cho thuật toán tạo cây mẫu

Ở bước thứ 2 thuật toán sắp xếp cây theo thứ tự giảm dần số đỉnh lá vì các đỉnh lá có thể là đỉnh chứa các trường thông tin. Do đó, cần chọn cây có số lượng đỉnh lá lớn nhất để giảm việc đối sánh và chèn đỉnh sau này. Khi đối sánh hai cây, nếu cây Tj có một số đỉnh không tìm được đỉnh đối sánh thì thực hiện việc chèn, tuy nhiên, có thể không chèn được. Do đó, thực hiện 2 vòng vì sau này có thể chèn thêm vào cây thẻ HTML mẫu. Sau quá trình đối sánh và chèn, sẽ tìm được cây mẫu biểu diễn thông tin các bản ghi dữ liệu có trong một đỉnh.

Khi đối sánh 2 cây Tj và T, có một số đỉnh của Tj có đỉnh đối sánh bên T. Tuy nhiên, có một số đỉnh của Tj không có cặp đối sánh bên T, do đó thực hiện việc chèn. Việc chèn các đỉnh này tùy thuộc vào việc có thể xác định được vị trí duy nhất để chèn trong cây T hay không. Không mất tính tổng quát, giả sử muốn chèn nhiều đỉnh nj…nm

liền kề nhau có chung một đỉnh cha trong cây Tj vào T, và đỉnh cha này có đỉnh đối sánh bên T. Việc xác định vị trí để thực hiện việc chèn này được xác định theo các tình huống sau: [8]

1. Nếu nj…nm có hai đỉnh liền kề, 1 bên trái và 1 bên phải có đỉnh đối sánh bên T như hình 2.11. Các đỉnh c, d là các đỉnh liền kề nhau trong cây Tj, hai đỉnh này

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 33)