Ajutor: Analiza bazei de date

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Această pagină oferă informații utile pentru realizarea unei copii de lucru offline a bazei de date Wikipedia în limba italiană (it.wiki) pentru a efectua analize statistice, extrage liste de servicii etc. în formă semi-automată. Pentru un ghid pentru consultarea unei copii a Wikipedia offline , consultați Ajutor: Descărcarea Wikipedia .

Copia bazei de date se face începând cu actualizările periodice ale arhivelor (numite dumps ) puse la dispoziție de Wikimedia Foundation pe serverul de descărcare pentru toate proiectele pe care le gestionează. Cele mai recente depozite de date legate de it.wiki sunt întotdeauna situate în directorul / itwiki / latest .

Condiții prealabile

Conținutul textual al paginilor Wikipedia (atât ale intrărilor, cât și al tuturor paginilor de servicii, cum ar fi șabloane, categorii etc., cu sau fără versiunile anterioare) este disponibil sub formă de fișiere XML care conțin sursa fiecărei versiuni a pagina în marcarea wiki și informații despre autor; acestea pot fi analizate direct sau importate într-o bază de date MySQL cu o structură identică cu cea a Wikipedia.

O serie de metadate referitoare la pagini individuale (linkuri interne și externe, categorii etc.) sau mai general la activitatea site-ului (jurnalul acțiunilor efectuate, protecția paginilor etc.) sunt de asemenea disponibile sub formă de scripturi SQL.

Nu sunt disponibile date despre utilizatori care nu sunt considerate publice (consultați politica de confidențialitate a Fundației Wikimedia).

MySQL

Pentru a gestiona fișiere, este necesar să instalați cel puțin programul de gestionare a bazei de date MySQL , a cărui versiune open source (Community Server) poate fi descărcată de pe www.mysql.com pentru toate sistemele de operare majore. Este necesară versiunea 4.0.x sau o versiune ulterioară.

După instalarea MySQL urmând instrucțiunile de pe site, trebuie să creați o bază de date în care să importați datele și să reconstruiți structura bazei de date Wikipedia: rețineți că, dacă doriți să instalați MediaWiki, precum și MySQL, aceste operațiuni vor fi efectuate automat din scriptul de configurare MediaWiki (în acest caz, treceți la paragraful dedicat ).

În cazul în care , pe de altă parte, doriți doar să aibă o bază de date pe care să efectueze analize statistice (și nu doriți să instalați MediaWiki, de asemenea), aceste operațiuni trebuie să fie efectuate „manual“ , așa cum este descris mai jos:

  • Creați o bază de date în care să importați date, de ex. itwiki . La solicitarea sistemului dvs. de operare:


mysql -u <utilizator> -p

Introduceți parola: <parolă>

Bine ați venit la monitorul MySQL. Comenzile se termină cu; sau \ g.
ID-ul conexiunii MySQL este x
Versiunea serverului: 5.0.xxx MySQL Community Edition (GPL)

Tastați „ajutor;” sau „\ h” pentru ajutor. Tastați „\ c” pentru a goli tamponul.

mysql> SET storage_engine = Innodb;
Interogare OK, 0 rânduri afectate (0,00 sec)

mysql> CREATE DATABASE itwiki;
Interogare OK, 1 rând afectat (0,01 sec)

Notă: Înainte de a continua cu crearea bazei de date și pentru a efectua corect importul ulterior al dump-ului în baza de date, trebuie să vă asigurați că MySQL funcționează folosind standardul utf8 ca codificare a caracterelor (în loc de standardul implicit, latin1), astfel încât personaje accentuate. Pentru a realiza acest lucru, este necesar să modificați fișierul de configurare my.cnf (de obicei prezent în / etc / mysql în mediul Linux) prin inserarea următoarelor șiruri de caractere în acesta:

 [client]
set de caractere implicit = utf8
[mysql]
set de caractere implicit = utf8
[mysqld]
colație-server = utf8_unicode_ci
init-connect = 'SET NUME utf8'
set de caractere-server = utf8

(pentru MySQL 5.5 și versiuni ulterioare, eliminați șirul "default-character-set = utf8" din [mysqld])

Odată ce ați făcut acest lucru, reporniți serverul MySQL (cu sudo service mysql stop și sudo service mysql start ) și creați baza de date. Pentru a vă asigura că codificarea caracterelor este setată corect, executați următoarele comenzi în promptul MySQL:


mysql> USE itwiki;
Baza de date s-a schimbat

mysql> arată variabile precum „char%”;

(care ar trebui să producă :)

 + -------------------------- + ---------------------- ----------- +
 | Numele_variabil | Valoare |
 + -------------------------- + ---------------------- ----------- +
 | caracter_set_client | utf8 |
 | caracter_set_conectare | utf8 |
 | caracter_set_database | utf8 |
 | character_set_filesystem | binar |
 | caracter_set_rezultate | utf8 |
 | caracter_set_server | utf8 |
 | caracter_set_sistem | utf8 |
 | caracter_sets_dir | / usr / local / mysql / share / charsets / |
 + -------------------------- + ---------------------- ----------- +


mysql> USE itwiki;
Baza de date s-a schimbat

mysql> arată variabile precum „colație%”;

(care ar trebui să producă :)

 + ---------------------- + ----------------- +
| Numele_variabil | Valoare |
+ ---------------------- + ----------------- +
| colation_connection | utf8_general_ci |
| colation_database | utf8_unicode_ci |
| colation_server | utf8_unicode_ci |
+ ---------------------- + ----------------- +


  • Reconstruiți structura bazei de date Wikipedia:
    • Descărcați scriptul MediaWiki /maintenance/tables.sql care conține structura bazei de date ( versiunea curentă [1] )
    • Deschideți-l cu un editor de text și înlocuiți toate aparițiile din / * _ * / cu nimic
    • Încărcați-l în MySQL în baza de date itwiki . La solicitarea sistemului dvs. de operare:


mysql -u <utilizator> -p itwiki <tables.sql
sau
mysql> tabele sursă.sql

Introduceți parola: <parolă>

  • Verificați dacă crearea bazei de date a avut succes. La promptul MySQL:


mysql> USE itwiki;
Baza de date s-a schimbat

mysql> AFIȘAȚI MESE;
+ ------------------ +
| Tables_in_itwiki |
+ ------------------ +
...
+ ------------------ +
50 de rânduri în set (0,03 sec)

Apoi urmați instrucțiunile de mai jos pentru a importa fișierul XML cu MWDumper și pentru a importa direct fișierele SQL referitoare la tabelele auxiliare.

MediaWiki

Pentru o mai mare flexibilitate este posibil să instalați același software folosit de Wikipedia: MediaWiki , un produs open source disponibil gratuit pe site - ul www.mediawiki.org .

MediaWiki este o aplicație PHP care necesită următorul mediu de operare:

  • Sistem de operare: oricare (recomandat: GNU / Linux )
  • Server web: oricare (recomandat: apache2 , descărcabil de pe www.apache.org )
  • Interpret PHP: ≥ 5.0 pornind de la MediaWiki 1.7 (recomandat: PHP 5.1.2, descărcabil de pe www.php.net )
  • Server de baze de date: MySQL ≥ 4.0 (recomandat: MySQL 4.0.23 sau o versiune ulterioară, descărcabilă de pe www.mysql.com ).

În practică, majoritatea distribuțiilor GNU / Linux au integrat deja un mediu LAMP (Linux-Apache-MySQL-PHP); pe sistemele Windows există mai multe pachete gratuite pentru a instala un mediu WAMP (Windows-Apache-MySQL-PHP) într-un mod integrat și așa mai departe pe alte platforme. Pentru o prezentare generală a acestor soluții, consultați intrarea Listă pachete AMP de pe Wikipedia engleză.

Pentru a instala și configura MediaWiki:

Notă: Dacă aveți deja o instalare MediaWiki, dar nu doriți să deteriorați baza de date, puteți încerca să copiați structura paginii , textului și tabelelor de revizuire într-o nouă bază de date și să utilizați utilitarul xml2sql pentru a genera fișierele de importat.

Structura fișierului

Descrierea completă a fișierelor este disponibilă pe Meta în secțiunea Data dumps (în engleză).

  • În funcție de nevoile dvs., puteți alege care dintre principalele benzi de descărcare să descărcați. Conținutul este descris mai jos, începând cu cel mai compact. Rețineți că fișierele comprimate pot fi foarte mari atunci când se întorc la dimensiunea originală (chiar mai mult de 20 de ori dimensiunea comprimată); prin urmare, este necesar să aveți cantități mari de spațiu pe disc pentru a lucra cu ele.
pages-articles.xml
Arhivă XML a paginilor de enciclopedie, cu excepția spațiului de nume Discuție: (Discuție / discuții) și Utilizator: (Utilizator), numai cu textul versiunii curente. Util (dar nu suficient, singur) pentru generarea de copii locale ale Wikipedia.
pages-meta-current.xml
Arhivă XML a tuturor paginilor (intrări și pagini de servicii), numai cu textul versiunii actuale. Util pentru analiza și generarea listelor offline .
pages-meta-history.xml
Arhivă XML a tuturor paginilor (intrări și pagini de servicii), cu textul versiunii actuale și a tuturor versiunilor anterioare. Util pentru analize mai aprofundate.
  • Pe lângă dump-ul propriu-zis, serverul de descărcare conține și alte fișiere utile:
* .sql fișier
Copii ale principalelor tabele de asistență ale bazei de date utilizate de MediaWiki; nu este necesar să descărcați tabelele de linkuri * separat dacă reconstruiți linkurile conform instrucțiunilor din partea de jos a paginii.
fișierul all-titles-in-ns0.gz
Lista numai a titlurilor intrărilor în format text.
alte dump-uri XML
Depozit de servicii pentru nevoi speciale.

Notă: Descrierea completă a structurii bazei de date (schemă) este conținută în fișierul /maintenance/tables.sql ( versiunea curentă [1] )

Importul fișierelor XML

Există două moduri de a importa dumpurile XML în baza de date. În cazul instalării numai MySQL, este necesar să utilizați un program extern, cum ar fi MWDumper, în timp ce instalarea MediaWiki conține un script de import special, întreținere / importDump.php .

Fișierele XML sunt comprimate în format bzip2 [2] . Pentru o listă destul de completă de programe de compresie capabile să citească formatul bzip2 pe diferite sisteme de operare, vă rugăm să consultați această pagină de pe Wikipedia engleză.

Cu toate acestea, pentru importurile mari, recomandăm utilizarea MWDumper, care ar trebui să fie mai rapidă decât scriptul PHP inclus în MediaWiki și este capabil să gestioneze direct fișiere în format comprimat.

MySQL și MWDumper

Printre programele accesorii MediaWiki se află aplicația Java MWDumper (descriere și instrucțiuni, în limba engleză). Acest program este capabil să importe și să exporte dumpuri, cu posibilitatea de a limita conținutul procesat la un subset al celor prezenți.

MWDumper este o aplicație Java open source , al cărei executabil poate fi descărcat de aici (documentație și surse aici ). Pentru a utiliza MWDumper este necesar să aveți un mediu Java, care poate fi descărcat de pe www.java.com .

Presupunând că ați descărcat cea mai recentă versiune a bazei de date ( cea mai recentă ) și doriți să o importați în baza de date itwiki :

  • Dacă importați într-o bază de date existentă, goliți tabelele în care MWDumper va insera datele. La promptul MySQL:


mysql> USE itwiki;
Baza de date s-a schimbat

mysql> pagina TRUNCATE TABLE;
Baza de date s-a schimbat
Interogare OK, x rânduri afectate (x.xx sec)

mysql> TRUNCATE TABLE text;
Baza de date s-a schimbat
Interogare OK, x rânduri afectate (x.xx sec)

mysql> TRUNCATE TABLE revizuire;
Baza de date s-a schimbat
Interogare OK, x rânduri afectate (x.xx sec)

  • Importați noua descărcare. La solicitarea sistemului dvs. de operare:


java -jar mwdumper.jar --format = sql: 1.5 itwiki-latest-pages-meta-current.xml.bz2 | mysql -u <utilizator> -p itwiki

Introduceți parola: <parolă>
1.000 de pagini (x, x / sec), turații xxx (x, x / sec)
2.000 de pagini (x, x / sec), turații xxx (x, x / sec)
...
822.267 pagini (x, x / sec), 822.267 turații (x, x / sec)

Notă: Verificați cu atenție ieșirea comenzii, care nu se termină la erori. Pentru aceasta, poate fi util să verificați dacă numărul de rânduri din tabelul de pagini este în concordanță cu ceea ce este indicat la sfârșitul procesului de import. Din promptul MySQL:


mysql> USE itwiki;
Baza de date s-a schimbat

mysql> SELECT COUNT (*) DIN pagina;
+ ---------- +
| count (*) |
+ ---------- +
| 822267 |
+ ---------- +
1 rând în set (x.xx sec)

Notă: în cazul unor probleme la importul din cauza pachetelor care sunt prea mari (Ai un pachet mai mare decât „max_allowed_packet“ octeți), modificați fișierul de configurare MySQL (my.ini sau my.cnf) , prin introducerea liniei: max_allowed_packet = 32M în secțiunea [mysqld] .

Pentru a îmbunătăți performanța, puteți încerca, de asemenea, să adăugați liniile init_connect = 'set autocommit = 0' și innodb_flush_log_at_trx_commit = 0 , precum și să măriți (chiar și mult) valorile innodb_log_file_size , innodb_buffer_pool_size și innodb_log_buffer_size .

MediaWiki și importDump.php

În folderul unde a fost instalat MediaWiki, scriptul de import importDump.php este disponibil în subfolderul / maintenance . Următorul exemplu se află într-un mediu Linux: [3] [4]

 # Treceți la directorul MediaWiki / întreținere
 cd / var / www / htdocs / mediawiki / maintenance /

 # Descărcați cea mai recentă descărcare
 wget http://download.wikipedia.org/itwiki/latest/itwiki-latest-pages-meta-current.xml.bz2

 # Importați dump-ul în DB
 bunzip2 -c itwiki-latest-pages-meta-current.xml.bz2 | php importDump.php

Cu toate acestea, rețineți că aceasta este o procedură foarte lentă (de exemplu, operațiunea descrisă mai sus a durat 51 de ore pe un Intel i5 cu 4 GB RAM și un SSD ca hard disk, folosind dump-ul fără istoricul complet. Mai 2012).

Mese auxiliare

În plus față de tabelele care conțin textul și metadatele legate direct de pagini, MediaWiki folosește o serie de tabele auxiliare pentru funcționarea sa. Acestea sunt în principal tabele de legături (către alte pagini, imagini, șabloane, categorii etc.) care vă permit să evitați analiza costisitoare a textului paginilor pentru toate acele solicitări care trebuie procesate în timp real, precum și unele jurnale și statistici. Conținutul tuturor acestor tabele (cu excepția datelor utilizatorului, care este confidențial) este disponibil pe serverul de descărcare în format SQL, aliniat cu dump-ul principal.

După descărcarea fișierelor, comanda pentru a le importa arată astfel:

 gzip -dc itwiki-latest-site_stats.sql.gz | mysql -u <nume_utilizator> -p <DBName>

Reconstruirea legăturilor

Alternativ, puteți solicita software-ului MediaWiki să reconstruiască tabelele cu scriptul refreshLinks.php : [4]

 php refreshLinks.php

Puteți reporni scriptul după o întrerupere cu:

 php refreshLinks.php - - <număr>

unde <numero> este ultimul ID raportat de script înainte de întrerupere.

Nume spații de nume

În MediaWiki, numele spațiului de nume nu sunt prezente în baza de date, care conține doar valoarea numerică (de la 0 la 16 pentru cele implicite, de la 100 în sus pentru cele opționale). Numele complete, care sunt diferite în fiecare limbă, se găsesc într-un fișier de configurare.

Pentru o realizare mai convenabilă a listelor offline referitoare la paginile diferitelor spații de nume, a fost pregătit un tabel special de spații de nume, care arată corespondența dintre numărul stocat în DB și numele italian utilizat pe Wikipedia. Acest tabel poate fi importat în DB așa cum este descris mai sus pentru fișierele SQL.

Exemple

Notă: Unele dintre descrierile din listele generate offline sunt depășite. Începând cu versiunea 1.5 a MediaWiki, tabelul cur nu mai există, datele articolelor sunt distribuite în pagina celor trei tabele, revizuire și text .

Iată cum să obțineți, cu o serie de interogări MySQL , textul unui articol pornind de la titlul acestuia:

 SELECT page_id FROM page WHERE page_title = 'Zugzwang'; # Pentru a găsi id-ul intrării Zugzwang

 SELECTează rev_text_id FROM revizie WHERE rev_page = '25966'; # Pentru a găsi cea mai recentă revizuire

 SELECTA text_vechi DIN text UNDE vechi_id = '4079266'; # Pentru a obține textul

Iată cum puteți obține numele (deja active ca Wikilink) ale paginilor al căror conținut se potrivește cu o expresie obișnuită :

 Selectați CONCAT ("# [[", page_title, "]]") din pagina
  JOIN revision ON page_id = rev_page
  JOIN text ON rev_text_id = old_id
  WHERE text vechi REGEXP "^ [Ee] spress [_] [Rr] egular $"
  ORDINE BY page_title;

Exemplul de mai sus generează legături roșii atunci când paginile nu aparțin spațiului de nume principal, în schimb acest lucru evită eroarea:

 SELECT CONCAT ("# [[{{#if: {{ns:", page_namespace, "}} | {{ns:", page_namespace, "}}:}}", page_title, "]]") DIN pagina
  JOIN revision ON page_id = rev_page
  JOIN text ON rev_text_id = old_id
  WHERE text vechi REGEXP "^ [Ee] spress [_] [Rr] egular $"
  ORDINE BY page_title;

Notă

  1. ^ a b versiunea anterioară SVN
  2. ^ Unele fișiere, cum ar fi itwiki-latest-pages-meta-history.xml , există copii comprimate cu alte formate, în special 7zip , care ar trebui să ofere un nivel de compresie mai mare decât bzip2 .
  3. ^ Calea reală poate varia în funcție de distribuția utilizată și de configurația serverului. De exemplu, dacă alegeți instalarea implicită a serverului LAMP în Ubuntu Server 6.10, implicit subdirectorul htdocs nu este creat și calea va fi / var / www / mediawiki / maintenance /
  4. ^ a b Dacă primiți mesajul de eroare bash: php: command not found , este probabil ca instalarea implicită să instaleze PHP, dar nu utilitarul de linie de comandă , care trebuie instalat manual separat. Consultați documentația pentru mai multe detalii. În distribuții precum Debian și Ubuntu , instalați pachetul php5-cli .

Pagini conexe