2012-10-01 23 views
5

gì ?:
Tôi đang cố gắng để có được trang-to-page liên kết bản đồ (matrix) của các trang wikipedia bởi page_id ở định dạng sau:liên kết wikipedia trang-to-page bởi pageid

from1 to1 to2 to3 ... 
from2 to1 to2 to3 ... 
... 

Tại sao ?:
Tôi đang tìm tập dữ liệu (các trang từ wikipedia) để dùng thử PageRank.

Vấn đề:
Tại dumps.wikimedia.org nó có thể tải về trang-articles.xml đó là XML với loại định dạng:

<page> 
    <title>...</title> 
    <id>...</id>   // pageid 
    <text>...</text> 
</page> 

mà tôi sẽ sử dụng cho các bài viết lấy (text) , sau đó cũng dựa trên dữ liệu trên mỗi trang (page.sql) chứa một số chi tiết về các trang theo page_id và cuối cùng có vẻ liên quan đến tôi là pagelinks.sql có chứa các bản ghi liên kết từng trang. Vấn đề là pagelinks bảng có các trường sau: pl_from, pl_namespacepl_title.

Idea: Tạo cơ sở dữ liệu tạm thời, nhập khẩu pagepagelinks bảng và tạo ra ma trận này bằng cách sử dụng pagelinks bảng và lấy page_id s theo pl_title s. giải pháp khả thi:

SELECT pl_from, GROUP_CONCAT(page_id SEPARATOR ' ') FROM pagelinks 
    JOIN page ON 
     pl_title = page_title AND pl_namespace = page_namespace 
GROUP BY pl_from 

hoặc để nhận bản đồ của "backlinks" (to1 from1 from2 from3 ..., không from1 to1 to2 to3 ...):

SELECT page_id, GROUP_CONCAT(pl_from SEPARATOR ' ') FROM pagelinks 
    JOIN page ON 
     pl_title = page_title AND pl_namespace = page_namespace 
GROUP BY page_id 

Câu hỏi:
Có một nơi để có được loại ma trận liên kết từng trang của page_id để tôi không cần tự tạo nó? Hoặc nếu không, có cách nào nhanh hơn để có được loại ma trận này hơn là giải pháp mà tôi đã chỉ ra không?

Trả lời

1

Tôi nghĩ rằng việc nhập cả hai bảng vào cơ sở dữ liệu và sử dụng đó có lẽ là cách dễ nhất để thực hiện việc này (và bạn không cần pages-articles.xml cho điều đó).

Một tùy chọn khác là phân tích thủ công hai tệp sql mà không cần nhập chúng vào cơ sở dữ liệu. Tôi thực sự đã tạo a library to do exactly that in .Net.

+0

Sau đó, có thể bạn cần một số chỉ mục? Tôi không chắc liệu các tập tin sql tạo ra chúng. – svick

+0

Có các chỉ mục đã có, tôi nghĩ nó bị giới hạn bởi tốc độ đĩa của tôi ... quá tệ đến nỗi 'page_id' không phải là một phần của bảng' pagelinks' đã ... không sao, cảm ơn bạn đã giúp đỡ :) – LihO

0

Vâng, để phân tích các file XML tôi đoán bạn có thể thử liên kết này:

http://haselgrove.id.au/wikipedia.htm

Có một cách tiếp cận, cộng với một vài .m trước khi thực hiện (MATLAB, Octave) tập tin có thể làm sạch bãi chứa của bạn. Ngoài ra, có một kết xuất trước khi xử lý trong một tệp .txt. Mặc dù, nó khá cũ. 2009 hoặc lâu hơn.