Installer et utiliser le framework d'extraction de DBpedia

Julien Plu

Nous allons, dans ce tutoriel, installer et utiliser le framework de DBpedia afin d'extraire les données de Wikipédia en RDF et installer notre propre version de DBpedia en local.

Commentez

- Titre : Installer et utiliser le framework d'extraction de DBpedia

- Auteur : Julien Plu

- Parution : 11 juillet 2013

- Mise à jour : 27 décembre 2015

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013-2016 Julien Plu. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Environnement

- II. Schéma

- III. Étape 1 : clonage du dépôt Git

- IV. Étape 2 : téléchargement des dumps

- V. Étape 3 : installation de PHP, MySQL et Apache

- V-A. Configuration de MySQL

- V-B. Installation de MediaWiki

- VI. Étape 4 : importation dans MySQL

- VII. Étape 5 : configuration de MediaWiki

- VIII. Étape 6 : extraction

- VIII-A. Extraction du dump Wikipédia

- VIII-B. Extraction du dump Wikidata

- IX. Extraction du Wiktionnaire français

- IX-A. Téléchargement du dump

- IX-B. Extraction

- X. Conclusion

- XI. Remerciements

I - Environnement

Cette installation s'est faite sous Ubuntu 14.04. Il est donc admis que vous utilisez la même distribution et que votre éditeur de texte par défaut est Vim.

Installez les prérequis avec la commande suivante :

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer maven git scala mysql-server apache2 php5 php-apc php5-mysql php5-gd

II - Schéma

III - Étape 1 : clonage du dépôt Git

Placez-vous à l'endroit où vous voulez cloner le dépôt. Ensuite faites :

git clone https://github.com/jplu/extraction-framework.git

Si vous ne précisez pas le dossier cible, un dossier nommé « extraction-framework » sera créé automatiquement. Pour la suite, je suppose que le dossier a ce nom par défaut dans votre home. Pour des raisons de simplicités, le dépôt est le mien. De cette façon, tout est déjà configuré pour l'extraction de la version française.

IV - Étape 2 : téléchargement des dumps

Une fois le dépôt cloné, il vous faut configurer le téléchargement des dumps. Pour cela, placez-vous dans le dossier ~/extraction-framework/dump, il sera supposé que vous restiez tout le temps placé dans ce dossier, et éditez le fichier download.minimal.properties pour qu'il ressemble à ceci :

base-url=http://dumps.wikimedia.org/
base-dir=/home/jplu/extraction-framework/dump/dumps
download=fr:pages-articles.xml.bz2
download=fr:@pages-articles\d+\.xml\.bz2
download=commons:pages-articles.xml.bz2
download=wikidata:pages-articles.xml.bz2
unzip=true
retry-max=5
retry-millis=10000

Pour base-dir, mettez le chemin qui vous convient. N'oubliez pas, par contre, de créer le dossier de destination que vous avez indiqué.

Une fois téléchargé, le dump sera placé dans ~/extraction-framework/dump/dumps/<nom_du_dump>/yyyymmdd/.

Dans le cas où vous utilisez un proxy pour vous connecter à Internet, il faut configurer Maven afin qu'il utilise votre proxy. Dans le fichier ~/.m2/settings.xml (s'il n'existe pas, créez-le) écrivez :

<settings>
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>XXXX</port>
<username>proxyuser</username>
<password>somepassword</password>
</proxy>
</proxies>
</settings>

Remplacez les valeurs des balises par les vôtres. Vous devrez aussi faire des modifications dans le fichier ~/extraction-framework/dump/pom.xml. Il faut décommenter les lignes suivantes :

<jvmArgs>
<jvmArg>-server</jvmArg>
<jvmArg>-Xmx1024m</jvmArg>
<jvmArg>-Dhttp.proxyHost=proxy.somewhere.com</jvmArg>
<jvmArg>-Dhttp.proxyPort=XXXX</jvmArg>
<jvmArg>-Dhttp.proxyUser=user</jvmArg>
<jvmArg>-Dhttp.proxyPassword=password</jvmArg>
<!--&lt;jvmArg>-Dhttp.nonProxyHosts="localhost|127.0.0.1"</jvmArg>-->
</jvmArgs>

Remplacez les valeurs par les vôtres et ne gardez en commentaire que la dernière ligne, vous devez faire cela deux fois dans ce fichier. Vous pouvez maintenant lancer la commande :

../clean-install-run download config=download.minimal.properties

Il ne vous reste plus qu'à attendre que tout se télécharge et se compile avant de passer à l'étape suivante. Une fois cela fait, il vous faut télécharger manuellement deux autres fichiers :

- un premier que vous placerez dans le dossier du dump Wikipédia ;

- un second que vous placerez dans le dossier du dump Wikidata.

V - Étape 3 : installation de PHP, MySQL et Apache

Cette partie est réservée à l'installation de PHP, MySQL (et sa configuration) ainsi qu'Apache.

V-A - Configuration de MySQL

Lancez la commande suivante :

mysql -u root -p

Écrivez le mot de passe que vous avez donné lors de l'installation de MySQL. Nous allons créer le même utilisateur que celui de votre session. Par exemple, moi je me connecte sur ma machine avec l'utilisateur jplu, je donne donc le même nom pour l'utilisateur de MySQL. Pour cela, il faut créer l'utilisateur :

create user "userSession"@"localhost";

Ensuite, il faut donner un mot de passe à cet utilisateur :

SET password FOR "userSession"@"localhost" = password('mot_de_passe');

Pour des questions de sécurité, je vous encourage fortement à supprimer le fichier d'historique de MySQL se trouvant dans votre home juste après cette opération, puisqu'il est en clair dans la commande. Le fichier se nomme .mysql_history. Par contre, si vous quittez tout de suite après cette commande, attention à bien vous reconnecter avec l'utilisateur root et pas celui que l'on vient de créer, car cet utilisateur n'est pas encore administrateur et vous ne pourriez pas faire ce qui suit. Il faut maintenant accorder les droits d'administrateur à ce nouvel utilisateur :

grant all privileges on *.* to "userSession"@"localhost";

Dorénavant, pour vous connecter, vous n'avez plus besoin de préciser -u root, mais juste :

mysql -p

pour vous connecter à MySQL. Maintenant, passez à la configuration interne de MySQL. Lancez donc la commande :

sudo vim /etc/mysql/my.cnf

et modifiez certains paramètres.

Modifiez :

key_buffer = 16M

par :

key_buffer = 1G

Modifiez :

max_allowed_packet =    16M

par :

max_allowed_packet = 1G

Modifiez :

query_cache_size = 16M

par :

query_cache_size = 1G

Et rajoutez dans la section [mysqld] ces deux lignes afin d'avoir MySQL en UTF-8 par défaut :

character-set-server=utf8
skip-character-set-client-handshake

Pour que MySQL prenne en compte tous ces changements, vous devez le redémarrer :

sudo service mysql restart

Voilà, c'est tout pour MySQL.

V-B - Installation de MediaWiki

Pour cela, cloner le dépôt Git en lançant les commandes suivantes :

chown jplu:jplu -R /var/www/
git clone https://gerrit.wikimedia.org/r/p/mediawiki/core.git /var/www/mediawiki

Appropriez-vous le dossier et tout son contenu afin de pouvoir y faire le commit tout en laissant les droits d'exécution et de lecture à tout le monde. Maintenant, placez-vous dans /var/www/mediawiki pour que l'on puisse choisir d'installer la version release la plus récente présente sur le dépôt. Pour cela, exécutez la commande suivante afin de la trouver :

git branch -r | sort -V

Ensuite, dites à Git de l'utiliser :

git checkout -b wmf/<numéro de version> origin/wmf/<numéro de version>

Prenez de préférence la même version que Wikipédia à la date où a été fait le dump, par exemple à l'écriture de ces lignes c'est la version 1.24wmf12. Vous trouverez l'indication de la version au tout début du dump téléchargé, dans la balise <generator>. Maintenant, il faut installer MediaWiki. Pour cela, rendez-vous sur la page d'accueil et suivez les instructions que vous verrez :

- 1re page : appuyez sur Continuer ;

- 2e page : si à l'écran vous voyez que l'environnement a été vérifié, vous pouvez installer MediaWiki. Alors vous pouvez cliquer sur Continuer. Dans le cas contraire, vous avez mal effectué une des étapes précédentes ;

- 3e page :

- Nom d'hôte de la base de données : localhost,

- Nom de la base de données : frwiki,

- Préfixe des tables de la base de données => laissez vide,

- Nom d'utilisateur de la base de données => laissez root,

- Mot de passe de la base de données : votre mot de passe d'un utilisateur root de MySQL,

- cliquez sur Continuer ;

- 4e page : appuyez sur Continuer ;

- 5e page :

- Nom du wiki : Wikipedia_fr,

- Espace de noms du projet : autre (préciser) => écrire Project,

- Votre nom : celui que vous voulez,

- Mot de passe : celui que vous voulez,

- Adresse de courriel : laissez vide,

- veillez bien à ce que le bouton radio Me poser davantage de questions soit bien coché,

- cliquez sur Continuer ;

- 6e page :

- Profil des droits utilisateurs : laissez wiki ouvert,

- Droits d'auteur et licence : laissez « Aucune licence en bas de page »,

- décochez : « Activer les courriers électroniques d'utilisateur à utilisateur »,

- décochez : « Activer l'authentification par courriel »,

- décochez : « Activer les courriels sortants »,

- cochez : « Mise en cache des objets PHP (APC, XCache ou WinCache) »,

- cliquez sur Continuer ;

- 7e page : cliquez sur Continuer.

Patientez durant le bref moment de l'installation. Une fois celle-ci terminée, il vous sera proposé un fichier LocalSettings.php en téléchargement. Téléchargez-le et placez-le dans /var/www/mediawiki. Vous pouvez maintenant vérifier que tout fonctionne bien en allant sur la page d'accueil du wiki.

VI - Étape 4 : importation dans MySQL

Il faut maintenant importer les résumés des articles contenus dans les dumps dans la base MySQL. Pour cela, replacez-vous dans ~/extraction-framework/dump, ouvrez le fichier pom.xml et modifiez juste la partie concernée pour qu'elle ressemble à ceci :

<launcher>
<id>import</id>
<mainClass>org.dbpedia.extraction.dump.sql.Import</mainClass>
<jvmArgs>
<jvmArg>-server</jvmArg>
</jvmArgs>
<args>
<arg>/home/jplu/extraction-framework/dump/dumps</arg>
<arg>/var/www/mediawiki/maintenance/tables.sql</arg>
<arg>jdbc:mysql://localhost:3306/?characterEncoding=UTF-8&amp;user=myuser&amp;password=mypass</arg>
<arg>true</arg>
<arg>pages-articles.xml</arg>
<arg>fr</arg>
</args>
</launcher>

Tout en faisant bien attention à ne remplacer que ce qui doit l'être comme le jplu dans le premier argument, ainsi que les myuser et mypass dans la ligne du 3e argument. Vous pouvez maintenant lancer l'importation :

../clean-install-run import

VII - Étape 5 : configuration de MediaWiki

Pour que le MediaWiki fonctionne bien avec l'outil d'extraction, il faut procéder à quelques changements dans son code source, mais rien de bien méchant. Ouvrez le fichier LocalSettings.php contenu à la racine de MediaWiki et ajoutez ce petit bout de code :

if ( !defined( 'MEDIAWIKI' ) ) {
exit;
}

$languageCode = "fr";
$underscoreLanguageCode = str_replace('-', '_', $languageCode);

Juste après.

Remplacez :

$wgSitename = "Wikipedia_fr";

par :

$wgSitename = "Wikipedia_".$underscoreLanguageCode;

Puis :

$wgDBname = "frwiki";

par :

$wgDBname = $underscoreLanguageCode."wiki";

Enfin, rajoutez ceci à la fin du fichier :

require_once("$IP/extensions/Babel/Babel.php");
require_once("$IP/extensions/CategoryTree/CategoryTree.php");
require_once("$IP/extensions/CharInsert/CharInsert.php");
require_once("$IP/extensions/Cite/Cite.php");
require_once("$IP/extensions/ExpandTemplates/ExpandTemplates.php");
require_once("$IP/extensions/ImageMap/ImageMap.php");
require_once("$IP/extensions/InputBox/InputBox.php");
require_once("$IP/extensions/Interwiki/Interwiki.php");
require_once("$IP/extensions/Math/Math.php");
require_once("$IP/extensions/MwEmbedSupport/MwEmbedSupport.php");
require_once("$IP/extensions/TimedMediaHandler/TimedMediaHandler.php");
require_once("$IP/extensions/GeoData/GeoData.php");
require_once("$IP/extensions/MobileFrontend/MobileFrontend.php");
require_once("$IP/extensions/ParserFunctions/ParserFunctions.php");
require_once("$IP/extensions/Poem/Poem.php");
require_once("$IP/extensions/StringFunctionsEscaped/StringFunctionsEscaped.php");
require_once("$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
require_once("$IP/extensions/TextExtracts/TextExtracts.php");
require_once("$IP/extensions/timeline/Timeline.php");
require_once("$IP/extensions/wikihiero/wikihiero.php");
require_once("$IP/extensions/Scribunto/Scribunto.php");

Voilà qui en finit avec le fichier LocalSettings.php, il ne reste plus qu'à télécharger toutes les extensions que nous avons listées dans le dernier morceau de code PHP. Cela se fait de manière très simple, placez-vous dans le dossier extensions de MediaWiki, puis faites le clone de chaque dépôt Git correspondant dedans via cette commande :

git clone https://gerrit.wikimedia.org/r/p/mediawiki/extensions/<nom_de_l'extension>.git

Par la même occasion, assurez-vous que les extensions ont la même version que mediawiki, toujours avec la même commande git :

git checkout -b wmf/<numéro de version> origin/wmf/<numéro de version>

Une fois que vous avez téléchargé toutes les extensions, assurez-vous que le site et l'API fonctionnent correctement (pour la page d'accueil du wiki et de l'API). Cette dernière doit vous afficher la documentation de l'API, si elle ne s'affiche pas, c'est que vous avez fait une fausse manipulation quelque part dans la modification de MediaWiki et je vous encourage donc à relire cette partie. N'oubliez pas que normalement, l'interface du wiki est totalement inutile, seul le bon fonctionnement de l'API est nécessaire.

VIII - Étape 6 : extraction

VIII-A - Extraction du dump Wikipédia

La première partie de la dernière étape consiste à faire l'extraction des données du dump Wikipédia. Pour cela, il faut éditer le fichier ~/extraction-framework/dump/extraction.default.properties et y appliquer quelques changements. Votre fichier doit donc ressembler à ceci :

base-dir=/home/jplu/extraction-framework/dump/dumps
source=@pages-articles\\d+\\.xml
require-download-complete=true
languages=fr
extractors=.ArticleCategoriesExtractor,.ArticleTemplatesExtractor,.CategoryLabelExtractor,\
ExternalLinksExtractor,.GeoExtractor,.InfoboxExtractor,.InterLanguageLinksExtractor,.LabelExtractor,.PageIdExtractor,\
PageLinksExtractor,.RedirectExtractor,.RevisionIdExtractor,.ProvenanceExtractor,.SkosCategoriesExtractor,\
ArticlePageExtractor
extractors.fr=.MappingExtractor,.DisambiguationExtractor,.HomepageExtractor,.ImageExtractor,\
PndExtractor,.TopicalConceptsExtractor,.fr.PopulationExtractor
uri-policy.uri=uri:en; generic:en; xml-safe-predicates:*; reject-long:*
uri-policy.iri=generic:en; xml-safe-predicates:*; reject-long:*
format.nt.gz=n-triples;uri-policy.uri

Ensuite, toujours pareil, n'oubliez pas de remplacer jplu par votre valeur. Pour finir, lancez la commande de compilation et d'extraction :

../clean-install-run extraction extraction.default.properties

Une fois toutes ces extractions finies, il ne reste plus qu'à récupérer les extractions au même endroit que celui où vous avez placé les dumps Wikipédia. Elles sont sous la forme d'archives.

VIII-B - Extraction du dump Wikidata

L'autre partie de cette dernière étape consiste à faire l'extraction des données du dump Wikidata. Pour cela, il faut éditer le fichier ~/extraction-framework/dump/extraction.wikidata.properties et y appliquer quelques changements, le créer s'il n'existe pas. Votre fichier doit donc ressembler à ceci :

base-dir=/home/jplu/extraction-framework/dump/dumps
source=pages-articles.xml
require-download-complete=true
languages=wikidata
extractors=.WikidataFactsExtractor,.WikidataLLExtractor,.WikidataLabelExtractor,.WikidataMappedFactsExtractor,\
WikidataNameSpaceSameAsExtractor,.WikidataSameAsExtractor
uri-policy.uri=uri:en; generic:en; xml-safe-predicates:*; reject-long:*
uri-policy.iri=generic:en; xml-safe-predicates:*; reject-long:*
format.nt.gz=n-triples;uri-policy.uri

Ensuite, toujours pareil, n'oubliez pas de remplacer jplu par votre valeur. Pour finir, lancez la commande de compilation et d'extraction :

../clean-install-run extraction extraction.wikidata.properties

Comme pour l'extraction précédente, il ne reste plus qu'à récupérer les extractions au même endroit que celui où vous avez placé le dump Wikidata. Elles sont sous la forme d'archives.

IX - Extraction du Wiktionnaire français

IX-A - Téléchargement du dump

Cet outil vous permet aussi d'effectuer le même procédé avec le Wiktionnaire, c'est-à-dire téléchargement du dump et extraction. Tout d'abord, l'étape de téléchargement, placez-vous dans le dossier wiktionary et ouvrez le fichier download.properties :

wikiName=wiktionary
base-url=http://dumps.wikimedia.org/
base-dir=/home/jplu/extraction-framework/wiktionary/dumps
download=fr:pages-articles.xml.bz2
unzip=true
retry-max=5
retry-millis=10000

Toujours pareil, n'oubliez pas de changer l'emplacement de la variable base-dir. Puis lancez le téléchargement :

../clean-install-run download config=download.properties

IX-B - Extraction

Maintenant, la dernière étape, l'extraction de ce Wiktionnaire. Pour cela, ouvrez le fichier config.properties et vérifiez qu'il ressemble bien à ceci :

base-dir=/var/tmp/dumps
wikiName=wiktionary
languages=fr
source=pages-articles.xml
extractors=.WiktionaryPageExtractor
parser=sweble
uri-policy.iri=xml-safe-predicates:*
uri-policy.uri=uri:en; generic:en; xml-safe-predicates:*
format.nt=n-triples;uri-policy.uri

Toujours la même petite vérification qui est celle de bien contrôler l'emplacement de la variable base-dir, puis lancer l'extraction :

mvn scala:run

X - Conclusion

Ceci a été réalisé sur un serveur Intel Xeon E5640 avec 64 Go RAM. Il y a environ 6 100 000 pages analysées soit à peu près 0-1 milliseconde par page. Il se peut aussi que quelques extractions de pages échouent, cela est dû à de trop nombreuses erreurs d'écriture contenues dans la page.

XI - Remerciements

Merci à Claude Leloup, Malick SECK et Jacques THÉRY pour leur relecture orthographique.