Open main menu

GautierPoupeau

Joined 19 October 2013

Propriétés ajoutéesEdit

Voici la liste des propriétés que j'ai ajoutées à partir du script décrit ci-dessus :

Ajout des comptes Facebook et Twitter sur les muséesEdit

Suite à une demande sur twitter (cf [1]), la communauté Muzeonum sous l'impulsion d'Antoine Courtin a initié un tableur sur Google docs pour renseigner pour chaque institution patrimoniale le compte facebook et le compte Twitter.

Pour charger l'ensemble de ces données sur Wikidata, j'ai récupéré le fichier au format XLS et je l'ai au préalable retravaillé avec Open Refine (suppression des lignes sans équivalence sur Wikidata ou sans comptes Facebook/twitter et transformation en RDF). Puis, j'ai utilisé le fichier RDF généré et un script python utilisant la bibliothèque Python Pywikibot (branche Core) pour charger les données sur Wikidata. Le script python que j'ai développé est disponible sur GitHub (et certainement largement perfectible, n'hésitez pas à le forker...)

Opération réalisée pour la 1ère fois en Mars 2014

Ajout des identifiants Mérimée aux monuments historiques de WikidataEdit

Comme promis à User:Symac, voici quelques explications sur l'ajout automatique des identifiants Mérimée aux entrées correspondantes dans Wikidata. Cela s'est fait en deux temps :

  • Récupération des identifiants Mérimée et de leurs liens vers la Wikipedia francophone sur Wikimedia Commons
  • Chargement des identifiants Mérimée sur la ressource équivalente dans wikidata

Etape 1 : récupération des identifiants Mérimée et du WikiId de la Wikipedia francophoneEdit

A compléter....

Etape 2 : Alimentation de WikidataEdit

Un fichier XML contient pour chaque monument les liens vers la Wikipedia francophone ou anglophone et le code Mérimée. Un script bash utilisant les commandes curl et xmlstarlet récupère ces deux informations et les utilise pour créer l'assertion correspondante dans Wikidata.

Voici le code du script bash si ça intéresse quelqu'un, mais il faut savoir que ce script est vraiment horrible... (mais il fonctionne...)

#!/bin/bash

login="VOTRE_LOGIN"

password="VOTRE_MOT_DE_PASSE"

curl --silent --data "lgname=${login}&lgpassword=${password}&action=login&format=xml" -c cookie_wikidata -o login1.xml http://www.wikidata.org/w/api.php

token=$(xmlstarlet sel -T -t -m '/api/login/@token' -v '.' -n login1.xml)

curl --silent --data "lgname=${login}&lgpassword=${password}&action=login&format=xml&lgtoken=${token}" -b cookie_wikidata -o successLogin.xml http://www.wikidata.org/w/api.php

for file in pivot/*.xml
do 
  uriWikiFr=$(xmlstarlet sel -t -v 'substring-after(/Feature/links/link[@type="wikipediaFr"]/@href,"http://fr.wikipedia.org/wiki/")' -n $file)
  merimeeIdentifier=$(xmlstarlet sel -t -v 'substring-after(/Feature/@uri,"http://data.culture.fr/merimee/")' -n $file)
  uriCommons=$(xmlstarlet sel -t -v 'translate(substring-after(/Feature/links/link[@type="commons"]/@href,"http://commons.wikipedia.org/wiki/Category:"),"_"," ")' -n $file)
  if [[ ${uriWikiFr} && ${merimeeIdentifier} ]]
  then
    reply=$(curl -o tmp.xml --write-out %{http_code} --silent -b cookie_wikidata http://www.wikidata.org/w/api.php?action=wbgetentities\&titles=${uriWikiFr}\&format=xml\&sites=frwiki)
    if [ ${reply} == 200 ]
    then
        wikidataIdentifier=$(xmlstarlet sel -t -v '/api/entities/entity/@title' -n tmp.xml)
        tokenRequest=$(curl -o tmp2.xml --write-out %{http_code} --silent -b cookie_wikidata  --data "action=query&prop=info|revisions&intoken=edit&titles=${wikidataIdentifier}&format=xml" https://www.wikidata.org/w/api.php)
        edittoken=$(xmlstarlet sel -t -v 'substring-before(/api/query/pages/page/@edittoken,"+\")' -n tmp2.xml) 
        checkRequest=$(curl -o tmp4.xml --write-out %{http_code} --silent -b cookie_wikidata  --data "action=wbgetclaims&entity=${wikidataIdentifier}&format=xml" https://www.wikidata.org/w/api.php)
        checkResponse=$(xmlstarlet sel -t -v 'boolean(/api/claims/claim[@id="P380"])' -n tmp4.xml)
        if [[ $checkResponse == 'false' ]]
        then       
          editRequest=$(curl --write-out %{http_code} --silent -o tmp3.xml -b cookie_wikidata  --data "format=xml&action=wbcreateclaim&entity=${wikidataIdentifier}&property=P380&snaktype=value&value=\"${merimeeIdentifier}\"&token=${edittoken}%2B%5C" https://www.wikidata.org/w/api.php)
          if [ ${editRequest} == 200 ]
          then
           echo "Modification de ${wikidataIdentifier} avec identifiant Mérimée ${merimeeIdentifier}"
          fi
        else
          echo "L'identifiant Mérimée ${merimeeIdentifier} existe déjà pour la ressource ${wikidataIdentifier}"
        fi
        checkResponse2=$(xmlstarlet sel -t -v 'boolean(/api/claims/claim[@id="P373"])' -n tmp4.xml)
        if [[ $checkResponse2 == 'false' ]]
        then       
          editRequest=$(curl --write-out %{http_code} --silent -o tmp3.xml -b cookie_wikidata  --data "format=xml&action=wbcreateclaim&entity=${wikidataIdentifier}&property=P373&snaktype=value&value=\"${uriCommons}\"&token=${edittoken}%2B%5C" https://www.wikidata.org/w/api.php)
          if [ ${editRequest} == 200 ]
          then
           echo "Modification de ${wikidataIdentifier} avec categorie Commons ${uriCommons}"
          fi
        else
          echo "La catégorie Commons ${uriCommons} existe déjà pour la ressource ${wikidataIdentifier}"
        fi    
    fi
    rm -rf tmp.xml tmp2.xml tmp3.xml tmp4.xml
  fi
done
rm -rf login1.xml cookie_wikidata successLogin.xml

Alimenter Wikidata à partir de DbpediaEdit

Comme l'a montré User:Shonagon dans ce billet, il est possible d'alimenter Wikidata à partir des données de dbpedia. A la suite de User:Shonagon, je me suis appuyé sur Pywikibot pour ajouter des assertions dans wikidata. Mais, à la différence de User:Shonagon, mon script alimente Wikidata directement à partir d'une requête SPARQL grâce à la bibliothèque Python RDFLib.

Vous pouvez trouver le code sur GitHub.

Voici les instructions pour l'utiliser :

  • Récupérer et installer la bibliothèque RDFLib
  • Récupérer et installer Pywikibot
  • Récupérer le script feedWikidata.py et copier le dans le répertoire de Pywikibot
  • Dans le même répertoire, créer un fichier texte avec pour nom query.rq et contenant votre requête SPARQL.
  • Lancer le script et indiquez le numéro de la propriété que vous souhaitez ajouter.

Instructions pour la requête SPARQLEdit

La requête SPARQL doit contenir deux variables intitulés ?s et ?l. ?s correspondra à la page de Wikidata modifié et ?l correspondra à la page lié avec la propriété que vous souhaitez ajouter. Les variables ?s et ?l doivent être des ressources.

Exemple de requêtes SPARQL pour la propriété P6 (Chef de l'exécutif)

select distinct ?s ?l where { ?s <http://fr.dbpedia.org/property/maire> ?l; a <http://dbpedia.org/ontology/PopulatedPlace>. ?l a foaf:Person }


Alignement automatique des œuvres dans data.bnf.fr et dans WikidataEdit

Expliquer le processus de mise en relation...

Pour mémoire : Environ 1350 entités de Wikidata alignées automatiquement avec les œuvres équivalentes sur le site dataBNF

Ajout des identifiants BnFEdit

A partir des données du dump disponible sur le site de Viaf et de la récupération via WikidataQuery des entités possédant un identifiant ViaF mais pas d'identifiant BnF, alignement de l'identifiant BnF et de l'identifiant Wikidata.

Pour les plus curieux, l'alignement a été effectué par une requête SPARQL suite à la conversion en RDF des données de Viaf (le dump utilisé est un txt tabulé) et des données de Wikidata. Voici la requête SPARQL

CONSTRUCT {
  ?wikidata <http://www.w3.org/2002/07/owl#sameAs> ?bnf
}
WHERE {
 ?viaf <http://www.w3.org/2002/07/owl#sameAs> ?bnf.
 ?wikidata <http://www.w3.org/2002/07/owl#sameAs> ?viaf.
 FILTER regex(str(?viaf),"^http://viaf.org")
}

L'alignement obtenu est en cours de chargement dans Wikidata via la bibliothèque Python Pywikibot et libRDF