Wikipedia:Download del database
Da Wikipedia, l'enciclopedia libera.
Questa pagina fornisce indicazioni utili per realizzare una copia di lavoro offline del database di Wikipedia in lingua italiana (it.wiki) allo scopo di effettuare analisi statistiche, estrarre elenchi di servizio, ecc. in forma semiautomatica. Per una guida alla consultazione offline di una copia di Wikipedia, vedere Aiuto:Download di Wikipedia.
La copia del database viene realizzata a partire dagli aggiornamenti periodici degli archivi (detti dump) messi a disposizione dalla Wikimedia Foundation sul server di download per tutti i progetti da essa gestiti. I dump più recenti relativi a it.wiki si trovano sempre nella cartella /itwiki/latest.
Indice |
[modifica] Prerequisiti
Il contenuto testuale delle pagine di Wikipedia (sia delle sole voci che di tutte le pagine di servizio quali template, categorie, ecc., con o senza le versioni precedenti) è disponibile sotto forma di file XML contenenti il sorgente di ciascuna versione della pagina in markup wiki e le indicazioni sull'autore; questi possono essere analizzati direttamente oppure importati all'interno di un database MySQL con struttura identica a quello di Wikipedia.
Sono inoltre disponibili sotto forma di script SQL una serie di metadati relativi alle singole pagine (link interni ed esterni, categorie, ecc.) o più in generale all'attività del sito (log delle azioni effettuate, protezione delle pagine, ecc.).
Non è disponibile alcun dato relativo agli utenti che non sia considerato pubblico (si veda la Privacy policy della Wikimedia Foundation).
[modifica] MySQL
Per la gestione dei file è necessario installare almeno il programma di gestione di database MySQL, la cui versione open source (Community Server) è scaricabile da www.mysql.com per tutti i principali sistemi operativi. È richiesta una versione 4.0.x o successiva.
Dopo aver installato MySQL seguendo le istruzioni riportate sul sito, è necessario creare un database in cui importare i dati e ricostruire la struttura del database di Wikipedia: si noti che, se si desidera installare, oltre a MySQL, anche MediaWiki, queste operazioni saranno svolte automaticamente dallo script di configurazione di MediaWiki (in questo caso, procedere al paragrafo dedicato).
Se invece si desidera solo avere un database su cui effettuare analisi statistiche (e non si desidera installare anche MediaWiki), tali operazioni vanno eseguite "a mano" come di seguito descritto:
- Creare un database in cui importare i dati, ad es. itwiki. Al prompt del proprio sistema operativo:
mysql -u<utente> -p
Enter password: <password>
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is x
Server version: 5.0.xxx MySQL Community Edition (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> SET table_type=Innodb;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> CREATE DATABASE itwiki;
Query OK, 1 row affected (0.01 sec)
- Ricostruire la struttura del database di Wikipedia:
- Scaricare lo script di MediaWiki /maintenance/tables.sql che contiene la struttura del database (versione corrente)
- Aprirlo con un editor di testo e sostituire tutte le occorrenze di /*$wgDBprefix*/ con nulla
- Caricarlo in MySQL nel database itwiki. Al prompt del proprio sistema operativo:
mysql -u<utente> -p itwiki < tables.sql
oppure
mysql> source tables.sql
Enter password: <password>
- Verificare che la creazione del database sia andata a buon fine. Al prompt di MySQL:
mysql> USE itwiki;
Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_itwiki |
+------------------+
...
+------------------+
38 rows in set (0.03 sec)
Seguire quindi le istruzioni riportate di seguito per l'importazione con MWDumper del file XML e per l'importazione diretta dei file SQL relativi alle tabelle ausiliarie.
[modifica] MediaWiki
Per una maggiore flessibilità è possibile installare lo stesso software usato da Wikipedia: MediaWiki, un prodotto open source disponibile gratuitamente sul sito www.mediawiki.org.
MediaWiki è un'applicazione PHP che richiede il seguente ambiente operativo:
- Sistema operativo: qualunque (consigliato: GNU/Linux)
- Server Web: qualunque (consigliato: apache2, scaricabile da www.apache.org)
- Interprete PHP: ≥ 5.0 a partire da MediaWiki 1.7 (consigliato: PHP 5.1.2, scaricabile da www.php.net)
- Server database: MySQL ≥ 4.0 (consigliato: MySQL 4.0.23 o superiore, scaricabile da www.mysql.com).
Nella pratica, la maggior parte delle distribuzioni GNU/Linux hanno già integrato un ambiente LAMP (Linux-Apache-MySQL-PHP); sui sistemi Windows esistono diversi pacchetti gratuiti per installare un ambiente WAMP (Windows-Apache-MySQL-PHP) in modo integrato, e così su altre piattaforme. Per una panoramica di tali soluzioni si veda la voce en:List of AMP Packages sulla Wikipedia in lingua inglese.
Per installare e configurare MediaWiki:
- Istruzioni di installazione in inglese (completo)
- Istruzioni di installazione in italiano (incompleto) (su Wikibooks)
Nota: Se si possiede già una installazione di MediaWiki ma non se ne vuole intaccare il database, si può provare a copiare la struttura delle tabelle page, text e revision in un nuovo database e usare l'utility xml2sql per generare i file da importare.
[modifica] Struttura dei file
La descrizione completa dei file è disponibile su Meta alla voce Data dumps (in inglese).
- In funzione delle proprie esigenze, si può scegliere quale dei dump principali scaricare. Di seguito ne vengono descritti i contenuti a partire dal più compatto. Si noti che i file compressi possono risultare molto grandi una volta riportati alle dimensioni originali (anche più di 20 volte le dimensioni compresse); è quindi necessario disporre di ingenti quantità di spazio su disco per lavorare con essi.
-
- pages-articles.xml
- Archivio XML delle sole voci dell'enciclopedia, con il testo della sola versione corrente. Utile (ma non sufficiente, da solo) per la generazione di copie locali di Wikipedia.
-
- pages-meta-current.xml
- Archivio XML di tutte le pagine (voci e pagine di servizio), con il testo della sola versione corrente. Utile per l'analisi e la generazione di elenchi offline.
-
- pages-meta-history.xml
- Archivio XML di tutte le pagine (voci e pagine di servizio), con il testo della versione corrente e di tutte le revisioni precedenti. Utile per le analisi più approfondite.
- Oltre al dump vero e proprio, il server di download contiene anche altri file utili:
-
- file *.sql
- Copie delle principali tabelle di appoggio del database usato da MediaWiki; non è necessario scaricare a parte le tabelle *link se si ricostruiscono i link secondo le istruzioni riportate a fondo pagina.
-
- file all-titles-in-ns0.gz
- Elenco dei soli titoli delle voci in formato testo.
-
- altri dump XML
- Dump di servizio per esigenze particolari.
Nota: La descrizione completa della struttura del database (schema) è contenuta nel file /maintenance/tables.sql (versione corrente)
[modifica] Importazione dei file XML
Vi sono due modi per importare i dump XML nel database. Nel caso di installazione del solo MySQL è necessario ricorrere a un programma esterno quale MWDumper, mentre l'installazione di MediaWiki contiene un apposito script di importazione, maintenance/importDump.php.
I file XML sono compressi in formato bzip2[1]. Per un elenco abbastanza completo dei programmi di compressione in grado di leggere il formato bzip2 sui diversi sistemi operativi, si rimanda a questa pagina sulla Wikipedia in lingua inglese.
Per importazioni corpose si consiglia comunque l'uso di MWDumper, che dovrebbe risultare più veloce dello script PHP compreso in MediaWiki ed è in grado di gestire direttamente i file in formato compresso.
[modifica] MySQL e MWDumper
Tra i programmi accessori di MediaWiki è presente l'applicazione Java (descrizione e istruzioni, in inglese). Tale programma è in grado di effettuare operazioni di importazione ed esportazione dei dump, con la possibilità di limitare i contenuti elaborati a un sottoinsieme di quelli presenti.
MWDumper è un'aplicazione Java open source, il cui eseguibile è scaricabile qui (documentazione e sorgenti qui). Per l'uso di MWDumper è necessario disporre dell'ambiente Java, scaricabile da www.java.com.
Supponendo di aver scaricato l'ultima versione del database (latest) e di volerla importare nel database itwiki:
- Se si sta importando su un database esistente, svuotare le tabelle in cui MWDumper inserirà i dati. Al prompt di MySQL:
mysql> USE itwiki;
Database changed
mysql> TRUNCATE TABLE page;
Database changed
Query OK, x rows affected (x.xx sec)
mysql> TRUNCATE TABLE text;
Database changed
Query OK, x rows affected (x.xx sec)
mysql> TRUNCATE TABLE revision;
Database changed
Query OK, x rows affected (x.xx sec)
- Importare il nuovo dump. Al prompt del proprio sistema operativo:
java -jar mwdumper.jar --format=sql:1.5 itwiki-latest-pages-meta-current.xml.bz2 | mysql -u<utente> -p itwiki
Enter password: <password>
1.000 pages (x,x/sec), xxx revs (x,x/sec)
2.000 pages (x,x/sec), xxx revs (x,x/sec)
...
822.267 pages (x,x/sec), 822.267 revs (x,x/sec)
Nota: Verificare con attenzione l'output del comando, che non termina in caso di errori. Per questo può essere utile verificare che il numero di righe della tabella page sia coerente con quanto indicato alla fine del processo di importazione. Dal prompt di MySQL:
mysql> USE itwiki;
Database changed
mysql> SELECT COUNT(*) FROM page;
+----------+
| count(*) |
+----------+
| 822267 |
+----------+
1 row in set (x.xx sec)
Nota: in caso di problemi nell'importazione dovuti a pacchetti troppo grandi (Got a packet bigger than 'max_allowed_packet' bytes), modificare il file di configurazione di MySQL (my.ini o my.cnf) inserendovi la riga: max_allowed_packet=32M nella sezione [mysqld].
Per migliorare le prestazioni si può anche provare ad aggiungere le righe init_connect='set autocommit=0' e innodb_flush_log_at_trx_commit=0, nonché a incrementare (anche di molto) i valori di innodb_log_file_size, innodb_buffer_pool_size e innodb_log_buffer_size.
[modifica] MediaWiki e importDump.php
All'interno della cartella in cui è stato installato MediaWiki, nella sottocartella /maintenance è disponibile lo script di importazione importDump.php. L'esempio che segue è in ambiente Linux:[2][3]
# Portarsi nella cartella /maintenance di MediaWiki cd /var/www/htdocs/mediawiki/maintenance/ # Scaricare l'ultimo dump wget http://download.wikipedia.org/itwiki/latest/itwiki-latest-pages-meta-current.xml.bz2 # Importare il dump nel DB bunzip2 -c itwiki-latest-pages-meta-current.xml.bz2 | php importDump.php
Si noti però che si tratta però di una procedura molto lenta (ad es. l'operazione sopra descritta è durata 2,5 ore su un Pentium 3 a 600 MHz con 512 MB di RAM).
[modifica] Tabelle ausiliarie
Oltre alle tabelle che contengono il testo e i metadati direttamente legati alle pagine, MediaWiki si serve di un certo numero di tabelle ausiliarie per il suo funzionamento. Si tratta principalmente di tabelle dei collegamenti (verso altre pagine, immagini, template, categorie, ecc.) che consentono di evitare la dispendiosa analisi del testo delle pagine per tutte quelle richieste che devono essere evase in tempo reale, nonché di alcuni log e statistiche. Il contenuto di tutte queste tabelle (con l'esclusione dei dati relativi agli utenti, che sono riservati) è disponibile sul server di download in formato SQL, allineato al dump principale.
Dopo avere scaricato i file, per importarli il comando è simile al seguente:
gzip -dc itwiki-latest-site_stats.sql.gz | mysql -u<nomeutente> -p <nomeDB>
[modifica] Ricostruzione dei link
In alternativa, si può far ricostruire le tabelle al software MediaWiki con lo script refreshLinks.php:[3]
php refreshLinks.php
Si può riavviare lo script dopo un'interruzione con:
php refreshLinks.php - - <numero>
dove <numero>
è l'ultima ID segnalata dallo script prima dell'interruzione.
[modifica] Nomi dei namespace
In MediaWiki, i nomi dei namespace non sono presenti nel database, che ne contiene solo il valore numerico (da 0 a 16 per quelli predefiniti, da 100 in su per quelli opzionali). I nomi per esteso, che sono differenti in ciascuna lingua, si trovano in un file di configurazione.
Per una realizzazione più comoda degli elenchi offline che riguardano pagine dei vari namespace è stata approntata una apposita tabella dei namespace, che riporta la corrispondenza tra il numero memorizzato nel DB e il nome italiano utilizzato su Wikipedia. Questa tabella può essere importata nel DB come descritto qui sopra per i file SQL.
[modifica] Esempi
Nota: Alcune delle descrizioni riportate negli elenchi generati offline sono obsolete. A partire dalla versione 1.5 di MediaWiki la tabella cur non esiste più, i dati delle voci sono distribuiti nelle tre tabelle page, revision e text.
Ecco come ottenere, con una serie di query MySQL, il testo di una voce partendo dal titolo della stessa:
SELECT page_id FROM page WHERE page_title='Zugzwang'; # Per trovare l'id della voce Zugzwang SELECT rev_text_id FROM revision WHERE rev_page='25966'; # Per trovare l'ultima revisione SELECT old_text FROM text WHERE old_id='4079266'; # Per ottenere il testo
Ecco invece come ottenere i nomi (già attivi come Wikilink) delle pagine il cui contenuto corrisponde a una espressione regolare:
SELECT CONCAT("# [[", page_title, "]]") FROM page JOIN revision ON page_id=rev_page JOIN text ON rev_text_id=old_id WHERE old_text REGEXP "^[Ee]spressione[_ ][Rr]egolare$" ORDER BY page_title;
L'esempio di prima genera dei link rossi quando le pagine non appartengono al namespace principale, invece questo evita l'errore:
SELECT CONCAT("# [[{{#if:{{ns:", page_namespace, "}}|{{ns:", page_namespace, "}}:}}", page_title, "]]") FROM page JOIN revision ON page_id=rev_page JOIN text ON rev_text_id=old_id WHERE old_text REGEXP "^[Ee]spressione[_ ][Rr]egolare$" ORDER BY page_title;
[modifica] Note
- ^ Di alcuni file, come ad esempio itwiki-latest-pages-meta-history.xml, esistono copie compresse con altri formati, in particolare 7zip, che dovrebbe fornire un maggior livello di compressione rispetto a bzip2.
- ^ Il percorso effettivo può variare a seconda della distribuzione utilizzata e della configurazione del server. Ad esempio se si sceglie l'installazione di default del server LAMP in Ubuntu Server 6.10, per default la sottodirectory htdocs non viene creata, e il percorso sarà /var/www/mediawiki/maintenance/
- ^ a b Se si riceve il messaggio d'errore bash: php: command not found, è probabile che l'installazione di default abbia installato PHP, ma non l'utilità a riga di comando, che va installata manualmente a parte. Fare riferimento alla documentazione per ulteriori dettagli. Nelle distribuzioni come Debian e Ubuntu, installare il pacchetto php5-cli.