2012-10-01 16 views
5

Cosa ?:
Sto cercando di ottenere da pagina a pagina di collegamento mappa (matrice) di pagine di Wikipedia dal page_id in seguente formato:wikipedia page-to-page link da parte pageid

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

Perché ?:
Sto cercando il set di dati (pagine da wikipedia) per provare PageRank.

Problema:
A dumps.wikimedia.org è possibile scaricare pagine-articles.xml che è XML con questo tipo di formato:

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

che userò per il recupero articoli (text) , quindi anche base dati per pagina (page.sql) che contiene alcuni dettagli sulle pagine da page_id e l'ultimo che mi sembra rilevante è pagelinks.sql che contiene record di collegamento pagina-pagina. Il problema è che la tabella pagelinks ha i seguenti campi: pl_from, pl_namespace e pl_title.

Idea: Crea database temporaneo, importare page e pagelinks tabelle e creare questa matrice utilizzando pagelinks tavolo e recupero page_id s in base alla pl_title s. Possibile soluzione:

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 

o per ottenere la mappa di "ritroso" (to1 from1 from2 from3 ..., non 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 

Domanda:
C'è un posto dove trovare questo tipo di matrice collegamenti da pagina a pagina di page_id in modo che non sia necessario crearlo da solo? O se no, c'è un modo più veloce per ottenere questo tipo di matrice rispetto alla soluzione che ho indicato?

risposta

1

Penso che importare entrambe le tabelle in un database e utilizzarlo sia probabilmente il modo più semplice per farlo (e per questo non è necessario lo pages-articles.xml).

Un'altra opzione sarebbe quella di analizzare manualmente i due file sql senza importarli nel database. Ho effettivamente creato a library to do exactly that in .Net.

+0

Allora forse hai bisogno di alcuni indici? Non sono sicuro che i file sql li creino. – svick

+0

Ci sono già degli indici, penso sia limitato dalla velocità del mio disco ... peccato che 'page_id' non faccia già parte del tavolo' pagelinks' ... non importa, grazie comunque per l'aiuto :) – LihO

0

Ebbene, per analizzare i file XML Credo che si potrebbe provare questo link:

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

C'è un approccio, più un paio di .m pre-made file (MATLAB, ottava) che può pulire la tua discarica. Inoltre, c'è un dump pre-processo in un file .txt. Comunque, è piuttosto vecchio. 2009 o giù di lì.