Tải bản đầy đủ - 0 (trang)
TỔNG QUAN VỀ KỸ THUẬT BÓC TÁCH THÔNG TIN

TỔNG QUAN VỀ KỸ THUẬT BÓC TÁCH THÔNG TIN

Tải bản đầy đủ - 0trang

thế thông tin phải liên tục được thu thập để giúp các ứng dụng ln cập nhật,

ví dụ như bổ sung các trang mới loại bỏ các trang đã bị xóa, di chuyển hoặc

cập nhật các trang bị sửa đổi.

Các trang web chủ yếu được viết bằng các ngôn ngữ đánh dấu như

HTML, XHTML và được nhắm đến đối tượng sử dụng là con người chứ

khơng phải máy tính.

Các trang web lại chứa đựng nhiều thơng tin có ích mà con người có thể

muốn thu thập và lưu trữ lại, chính vì thế mà cần phải có những kỹ thuật bóc

tách và trích xuất thơng tin theo một cơ chế tự động. Các kỹ thuật bóc tách dữ

liệu (parsing) có thể ở mức đơn giản như việc bóc tách các siêu liên kết, hoặc

ở mức phức tạp hơn một chút là bóc tách bất kỳ phần nội dung nào trong một

trang web.

Về bản chất, q trình thu thập web chính là quá trình duyệt đệ quy một

đồ thị. Các web được xem như một đồ thị với các trang là các đỉnh (node) và

các siêu liên kết là các cạnh. Q trình lấy trang và trích xuất các liên kết bên

trong nó tương tự như việc mở rộng tìm kiếm một đỉnh trong đồ thị. Trình thu

thập sử dụng kỹ thuật tìm kiếm khác nhau sẽ cho kết quả tìm kiếm khác nhau,

so sánh hiệu suất của các kỹ thuật tìm kiếm này từ đó rút ra đánh giá về hiệu

suất của các trình thu thập.

Trình thu thập web là thành phần đầu tiên trong toàn bộ hệ thống search

engine. Mục đích của các hệ thống search engine là số lượng trang web đầu

vào đạt giá trị cao nhất có thể, trong đó trình thu thập web làm cơng việc

chính là duy trì cơ sở dữ liệu được đánh chỉ mục, trả về giá trị của bộ thu thập

và bộ lập chỉ mục cho hàng triệu truy vấn nhận được từ người dùng. Các trang

được đánh chỉ mục dựa trên các thuật toán ưu tiên hoặc các phương pháp dựa

trên kinh nghiệm (heuristic). Ngồi ra, chúng ta có thể sử dụng trình thu thập

web để xây dựng các phần mềm tập trung thông tin, các trang web tổng hợp

thông tin, dựa trên cơ chế tự động tìm và phát hiện tài nguyên.

 10 



1.2 Cách xây dựng một hạ tầng thu thập web

Trình thu thập chứa một danh sách các URL chưa được thăm gọi là biên

giới frontier. Danh sách được khởi tạo bởi một số các URL hạt giống - các

URL này được cung cấp bởi một người dùng hoặc một chương trình khác.

Mỗi vòng lặp là một q trình gồm các bước:

-



Lấy một URL tiếp theo từ frontier ra để thu thập.

Lấy trang tương ứng với URL thông qua HTTP.

Bóc tách trang vừa lấy để trích xuất ra các URL và các nội dung thông tin cụ



-



thể.

Cuối cùng là thêm các URL chưa thăm vào frontier.

Trước khi các URL được thêm vào frontier chúng có thể được đánh chỉ

mục dựa trên số lượng truy cập vào trang web ứng với URL. Quá trình thu

thập sẽ chấm dứt ngay khi trình thu thập đạt đủ số lượng trang nhất định hoặc

frontier rỗng, đây được gọi là trạng thái kết thúc (dead-end) của trình thu

thập.

1.3 Frontier

Frontier là một danh sách chứa các URL của các trang chưa thăm. Trong

thuật ngữ tìm kiếm đồ thị, frontier là một danh sách mở các đỉnh chưa được

mở rộng. Đối với một trình thu thập lớn frontier có thể chứa hàng chục ngàn

đến hàng trăm ngàn trang và phải lưu trữ trong ổ cứng. Tuy vậy frontier nào

cũng có một miền giới hạn nhất định, miền giới hạn này lớn hay nhỏ phụ

thuộc vào bộ nhớ của máy tính. Khi số lượng URL thu thập được vượt quá

giới hạn này chúng ta sẽ cần một cơ chế để loại bỏ các URL ứng với các trang

ít quan trọng và giữ lại các URL ứng với các trang quan trọng. Lưu ý rằng tốc

độ thêm các URL vào frontier nhanh gần bằng tốc độ thu thập thơng tin. Nó

có thể thêm tới 60000 URL ngay khi trình thu thập thu thập dữ liệu của 60000

trang, giả định trung bình mỗi trang có khoảng 7 liên kết.

Frontier có thể coi như một hàng đợi làm việc theo cơ chế FIFO (First In

First Out) nghĩa là vào trước ra trước trong trường hợp chúng ta sử dụng thuật

 11 



tốn tìm kiếm theo chiều rộng để thu thập thơng tin. Trình thu thập sử dụng

kỹ thuật tìm kiếm này gọi là trình thu thập theo chiều rộng. Các URL được lấy

ra thu thập được chọn từ trên xuống dưới trong danh sách và các URL mới

được thêm vào đuôi của danh sách. Do miền giới hạn của frontier, ta phải đảm

bảo các URL chỉ được lấy một lần. Để tìm kiếm xem một URL mới được

trích xuất đã có trong danh sách chưa là khá phức tạp vì số lượng trang là rất

lớn mỗi lần tìm kiếm là một lần chạy vòng for điều này là khá bất cập. Vì vậy

có một giải pháp là sử dụng một phần bộ nhớ để duy trì một hàm băm với

URL là khóa. Hàm băm này sẽ sinh ra các giá trị băm tương ứng với mỗi

URL. Sở dĩ sử dụng hàm băm sẽ tìm kiếm nhanh hơn vì việc so sánh các giá

trị băm nhanh hơn nhiều việc so sánh một giá trị với một khối dữ liệu lớn.

Hiện nay do bộ nhớ máy tính là rất lớn nên vấn đề về bộ nhớ là không

mấy quan trọng so với vấn đề về tốc độ. Do vậy, cách sử dụng hàm băm được

sử dụng rộng rãi, mặc dù là tốn bộ nhớ hơn nhưng tốc độ tìm kiếm lại được

cải thiện đáng kể.

Khi frontier đạt đến miền giới hạn, thì các trình thu thập theo chiều rộng

sẽ làm việc theo cơ chế sau: sau khi đưa một URL ra khỏi frontier để tiến

hành quá trình thu thập trang tương ứng thay vì việc lấy tất cả URL trong

trang này trình thu thập sẽ chỉ lấy URL chưa thăm đầu tiên và thêm vào

frontier.

Frontier có thể coi như một hàng đợi ưu tiên trong trường hợp chúng ta

sử dụng thuật tốn tìm kiếm theo lựa chọn tốt nhất. Trình thu thập sử dụng kỹ

thuật tìm kiếm này gọi là trình thu thập ưu tiên. Hàng đợi ưu tiên là một mảng

với các phần tử là các URL được sắp xếp theo điểm đánh giá.

Trình thu thập ưu tiên sẽ làm việc theo cơ chế sau: URL được lấy ra khỏi

frontier để tiến hành thu thập luôn là URL tốt nhất. Sau khi thu thập trang

tương ứng, các URL được trích xuất ra, được đưa vào frontier và các danh

sách URL được sắp xếp lại theo điểm đánh giá. Để tránh việc trùng lặp URL

 12 



chúng ta cũng duy trì một hàm băm với các khóa là URL để tra cứu.

Khi frontier đạt đến miền giới hạn, cơ chế làm việc của trình thu thập tối

ưu cũng giống với trình thu thập theo chiều rộng chỉ khác là các URL được

lấy là các URL tốt nhất (tức là URL có điểm đánh giá cao nhất).

Trong trường hợp trình thu thập nhận thấy frontier là danh sách rỗng

(không thể lấy ra các URL tiếp theo để thu thập) thì quá trình thu thập sẽ kết

thúc. Tuy vậy trường hợp rất hiếm xảy ra vì với một số URL hạt giống và

miền giới hạn khá lớn frontier hiếm khi đạt trạng thái rỗng.

1.4 Lược sử và kho lưu trữ trang

Lược sử thu thập dữ liệu là một danh sách đánh dấu theo thời gian các

URL được lấy bởi trình thu thập. Một URL được đưa vào lược sử chỉ sau khi

đã trả về các URL bên trong nó. Lược sử có thể sử dụng để phân tích và đánh

giá thơng tin. Lược sử được lưu trữ nhằm cung cấp cho một tra cứu nhanh để

kiểm tra xem một trang đã được thăm hay chưa. Kiểm tra này là khá quan

trọng nhằm tránh các trang bị thăm lại và tránh thêm việc thu thập lại các

trang này. Do kích thước của frontier có hạn và bộ nhớ của máy tính hiện nay

là vơ cùng lớn nên việc duy trì một lược sử cần thiết nhằm nâng cao hiệu quả

hoạt động của trình thu thập. Một điều cần chú ý là phải chuẩn hóa URL trước

khi đưa vào lược sử.

Khi một trang được lấy nó phải được lưu trữ và lập chỉ mục nhằm mục

đích phục vụ cho các ứng dụng sau này (chẳng hạn như cơng cụ tìm kiếm).

Đây là cơng việc mà một kho lưu trữ trang phải làm. Một kho lưu trữ trang ở

dạng đơn giản sẽ chứa các trang thu thập theo từng file riêng biệt. Trong

trường hợp đó, mỗi trang phải đặt trong một tệp tin duy nhất. Một cách để làm

điều này là đặt mỗi trang URL tương ứng với một chuỗi sau đó sử dụng một

vài dạng của hàm băm với xác suất xung đột thấp để mã hóa. Giá trị kết quả

của hàm băm được sử dụng làm tên của tập tin. Bằng cách này chúng ta có độ

dài tên tập tin ln cố định cho dù có bao nhiêu URL đi nữa. Tất nhiên nếu

 13 



chỉ cần lưu trữ vài nghìn trang thì ta có thể sử dụng một hàm băm đơn giản

hơn. Trong một số trường hợp các kho lưu trữ trang cũng có thể dùng để kiểm

tra xem một URL đã được thu thập hay chưa trước khi chuyển đổi sang tên

tập tin 32 ký tự. Trong những trường hợp này có thể bỏ đi cấu trúc dữ liệu

lược sử.

1.5 Cách lấy trang

Để lấy một trang web, chúng ta cần một máy khách HTTP (HTTP client)

gửi một yêu cầu HTTP (HTTP request) cho trang đó và đọc các phản hồi.

Client cần có thời gian trễ để đảm bảo rằng không bị mất thời gian không cần

thiết vào các máy chủ chậm hoặc đọc các trang lớn. Trong thực tế chúng ta

thường hạn chế vấn đề này bằng cách cho client tải về khoảng 10-20 KB đầu

tiên của trang. Client cần bóc tách được tiêu đề phản hồi cho các mã trạng thái

và chuyển hướng.

Kiểm tra lỗi và xử lý ngoài luồng là rất quan trọng trong quá trình lấy

trang vì chúng ta phải đối phó với hàng triệu máy chủ. Trong quá trình lấy

trang, trình thu thập khơng thể tự quyết định tài liệu nào được lập chỉ mục và

tài liệu nào khơng, do đó nó lấy tất cả những gì có thể. Thậm chí dù xác định

được tài liệu vơ ích thì nó cũng đã bỏ ra một chi phí đáng kể cho hoạt động

thu thập.

1.6 Bóc tách trang

Khi một trang đã được lấy, chúng ta cần phân tích nội dung của nó để

trích xuất thơng tin, lấy ra các URL để mở ra hướng đi tiếp theo của các trình

thu thập.

Phân tích nội dung có thể là q trình khai thác hyperlink/URL đơn giản

hoặc nó có thể bao gồm quá trình phức tạp hơn như lọc nội dung HTML để

phân tích thành mơ hình thẻ HTML dạng cây (HTML tag tree). Phân tích nội

dung cũng có thể bao gồm các bước chuyển đổi URL được trích xuất thành

dạng tiêu chuẩn, loại bỏ những từ ở phần đầu nội dung của trang và lấy các từ

 14 



còn lại ở phần thân.





Tiêu chuẩn trích xuất URL

Hàm bóc tách HTML có sẵn cho nhiều ngôn ngữ khác nhau. Chúng cung

cấp các chức năng để dễ dàng xác định các tag HTML và cặp các giá trị thuộc

tính liên quan trong một tài liệu HTML. Để trích xuất siêu liên kết URL từ

một trang Web, chúng ta có thể sử dụng các hàm bóc tách để tìm thẻ anchor

(thẻ ) và lấy các giá trị các thuộc tính href liên quan. Trước tiên chúng ta

phải chuyển đổi tất cả các đường dẫn URL sang đường dẫn URL tuyệt đối vì

có nhiều đường dẫn URL viết khơng đúng quy chuẩn có thể cùng dẫn tới một

trang. Điều này là quan trọng để tránh lấy một trang nhiều lần. Dưới đây là

một số bước điển hình được sử dụng trong thủ tục chuẩn hóa URL:



-



Chuyển đổi giao thức và tên máy chủ thành dạng chữ thường.

Loại bỏ phần “tham khảo” trong URL.

Thực hiện mã hóa URL cho một vài những ký tự thường sử dụng như ’~’.



-



Điều này sẽ tránh được việc thu thập lại 1 trang.

Đối với một vài URL, thêm ký tự ‘/’.

Sử dụng để nhận ra các trang web mặc định. Những tên file như index.html

hoặc index.htm có thể được loại bỏ trong đường dẫn URL với thừa nhận rằng



-



đó là những trang mặc định.

Loại bỏ ‘..’ và đường dẫn trước nó trong phần URL.

Điều quan trọng là đảm bảo tính nhất quán trong khi áp dụng các luật

chuẩn hóa. Có thể hai luật khác nhau lại cho kết quả tốt như nhau miễn là ta

áp dụng các luật chuẩn hóa URL một cách nhất qn.





Mơ hình thẻ HTML dạng cây

Các trình thu thập có thể lấy ra giá trị của các URL hoặc một nội dung



bất kỳ trong một trang web bằng cách kiểm tra phạm vi thẻ tag HTML chứa

chúng. Để làm được điều này, trình thu thập có thể sử dụng mơ hình thẻ

HTML dạng cây và phân tích cấu trúc DOM (Document Oject Model) của mơ

hình này. Phân tích cấu trúc DOM giúp trình thu thập có thể duyệt các node



 15 



trên cây này và chỉ lấy ra phần nội dung mà nó cần. Hình dưới đây cho ta thấy

một mơ hình cây tương ứng với một mã nguồn URL



Hình 1.1 Mơ hình cây tương ứng với một mã nguồn HTML

Có thể thấy thẻ là gốc của cây, các thẻ bên trong nó là các node

mở rộng, và dữ liệu text là lá của cây.

Trên thực tế, không phải văn bản HTML nào cũng được viết đúng quy

chuẩn như ví dụ trên. HTML là ngơn ngữ không phân biệt chữ hoa hay chữ

thường (hai thẻ và đều là một). Các phần tử HTML cần có một thẻ

mở và một thẻ đóng, tuy nhiên điều này khơng phải ln ln đúng, có nhiều

phần tử khơng cần thẻ đóng, ví dụ các thẻ
,
  • . Ngoài ra khi

    lồng nhau, các phần tử HTML cũng không cần thiết phải lồng nhau theo đúng

    thứ tự (tức là thẻ nào mở trước thì phải đóng sau).



     16 



    Vì vậy trước khi lập mơ hình cây cho một mã nguồn HTML chúng ta cần

    một quá trình chuyển đổi các tài liệu HTML ban đầu thành các tài liệu HTML

    tiêu chuẩn, q trình này gọi là chuẩn hóa các trang HTML. Quá trình này

    bao gồm việc chuyển đổi các thẻ sang dạng chữ thường, chèn thêm các thẻ và

    sắp xếp lại thứ tự các thẻ trong tài liệu HTML. Chuẩn hóa trang HTML là rất

    cần thiết để việc lập mơ hình cây được chính xác. Nếu như trình thu thập chỉ

    cần lấy các liên kết hoặc văn bản hoặc một phần văn bản thì có thể ta khơng

    cần sử dụng tới mơ hình cây mà chỉ cần sử dụng kỹ thuật bóc tách HTML đơn

    giản. Trình bóc tách như vậy cũng được hỗ trợ trong nhiều ngôn ngữ lập trình.

    1.7 Các kỹ thuật thu thập web

    Trong phần này chúng ta sẽ thảo luận về một số kỹ thuật thu thập dữ liệu

    bao gồm:

    - Kỹ thuật thu thập dữ liệu theo chiều sâu.

    - Kỹ thuật thu thập dữ liệu theo chiều rộng.

    - Kỹ thuật thu thập dữ liệu theo ngẫu nhiên.

    Như đã nói ở phần trước về bản chất, quá trình thu thập web chính là q

    trình duyệt đệ quy một đồ thị. Các web được xem như một đồ thị với các

    trang là các đỉnh (node) và các siêu liên kết là các cạnh. Chính vì thế các kỹ

    thuật thu thập dữ liệu cũng được xây dựng dựa trên các thuật tốn tìm kiếm

    trên đồ thị. Các thuật tốn tìm kiếm trên đồ thị bao gồm:

    - Tìm kiếm theo chiều sâu (Depth-First Search): Là thuật tốn tìm kiếm

    bằng cách mở rộng nút đồ thị theo chiều sâu.

    - Tìm kiếm theo chiều rộng (Breath-First Search): Là thuật tốn tìm

    kiếm bằng cách mở rộng nút đồ thị theo chiều rộng.

    - Tìm kiếm theo lựa chọn tốt nhất (Best-First Search): Là một thuật tốn

    tìm kiếm tối ưu bằng cách mở rộng nút hứa hẹn nhất theo một quy tắc nào đó.

    1.7.1 Kỹ thuật thu thập dữ liệu theo chiều sâu

    Quá trình thực hiện:

     17 



    Bước 1: Lấy URL đầu tiên trong danh sách (frontier) để thu thập.

    - Nếu có qua bước 2.

    - Nếu không qua bước 5.

    Bước 2: Lấy trang tương ứng với URL qua HTTP.

    - Nếu có qua bước 3.

    - Nếu không quay lại bước 1.

    Bước 3: Kiểm tra xem trang này đã được được thăm chưa?

    - Nếu chưa qua bước 4.

    - Nếu rồi quay lại bước 1.

    Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các

    liên kết có trong trang này.

    - Nếu có, thêm các liên kết vào đầu danh sách. Quay lại bước 3.

    - Nếu không, quay lại bước 1.

    Bước 5: Kết thúc.

    1.7.2 Kỹ thuật thu thập dữ liệu theo chiều rộng

    Quá trình thực hiện:

    Bước 1: Lấy URL đầu tiên trong danh sách để thu thập.

    - Nếu có qua bước 2.

    - Nếu khơng qua bước 5.

    Bước 2: Lấy trang tương ứng với URL qua HTTP.

    - Nếu có qua bước 3.

    - Nếu khơng quay lại bước 1.

    Bước 3: Kiểm tra xem trang này đã được được thăm chưa?

    - Nếu chưa qua bước 4.

    - Nếu rồi quay lại bước 1.

    Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các

    liên kết có trong trang này.

    - Nếu có, thêm các liên kết vào cuối danh sách. Quay lại bước 3.

     18 



    - Nếu không, quay lại bước 1.

    Bước 5: Kết thúc.

    1.7.3 Kỹ thuật thu thập dữ liệu ngẫu nhiên

    Bước 1: Lấy URL ngẫu nhiên trong danh sách để thu thập.

    - Nếu có qua bước 2.

    - Nếu không qua bước 5.

    Bước 2: Lấy trang tương ứng với URL qua HTTP.

    - Nếu có qua bước 3.

    - Nếu không quay lại bước 1.

    Bước 3: Kiểm tra xem trang này đã được được thăm chưa?

    - Nếu chưa qua bước 4.

    - Nếu rồi quay lại bước 1.

    Bước 4: Đánh dấu trang này đã được thăm. Bóc tách trang và tìm các

    liên kết có trong trang này.

    - Nếu có, thêm các liên kết vào cuối danh sách. Quay lại bước 3.

    - Nếu không, quay lại bước 1.

    Bước 5: Kết thúc.

    1.8



    Kỹ thuật lấy nội dung trang web bằng CURL trong PHP

    CURL: là một hàm trong PHP. Hàm này cho phép đọc các trang web tải



    tệp tin lên trang, sử dụng CURL để tự động cập nhật dữ liệu từ nhiều trang

    web. Đặc biệt CURL có khả năng lấy dữ liệu được cả những trang bị chặn

    bằng proxy thông qua curl_proxy(). Một CURL cần bao gồm các phần:

    Khởi tạo CURL: để khởi tạo một curl ta sử dụng hàm curl_init() hàm

    này có thể có đối số hoặc khơng có đối số với đối số là một địa chỉ tham

    chiếu.

    Thiết lập các tùy chọn cho CURL: để thiết lập tùy chọn ta sử dụng cú

    pháp lệnh : curl_setopt ($biến khởi tạo curl, $option , $giá trị).



     19 



    Thực hiện một CURL: để thực hiện một CURL ta sử dụng hàm

    curl_exec ($ten curl). Sau khi một CURL được thực thi ta sẽ kết thúc phiên

    làm việc này với hàm curl_close($ten curl).

    Kỹ thuật lấy nội dung: Có hai cách sử dụng CURL để lấy dữ liệu

    Cách 1: sử dụng GET để lấy dữ liệu từ một trang

    function getPage($url, $referer, $timeout, $header){

    if(!isset($timeout))

    $timeout=30;

    $curl = curl_init();

    if(strstr($referer,"://")){

    curl_setopt ($curl, CURLOPT_REFERER, $referer);

    }

    curl_setopt ($curl, CURLOPT_URL, $url);

    curl_setopt ($curl, CURLOPT_TIMEOUT, $timeout);

    curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozi

    lla/%d.0",rand(4,5)));

    curl_setopt ($curl, CURLOPT_HEADER, (int)$header);

    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);

    $html = curl_exec ($curl);

    curl_close ($curl);

    return $html;

    }



     20 



  • Tài liệu bạn tìm kiếm đã sẵn sàng tải về

    TỔNG QUAN VỀ KỸ THUẬT BÓC TÁCH THÔNG TIN

    Tải bản đầy đủ ngay(0 tr)

    ×