Allez vers la page précédente - étapes

Sondage des données

La première étape est de connaître l'état des jeux de données de DBpedia et BnF Data afin de voir le nombre de personnes dont on peut considérer qu'elles font parties de la “population” des Économistes et des juristes.

Pour cela il faut réaliser des requêtes SPARQL afin de connaître indépendamment sur les deux bases de données le nombre de personnes qui répondre à ce critère. Pour cela, il ne faut faire les requêtes avec le moins grande nombre de critère de sélection afin de ne réduire la population si une personne ne correspond pas à une des critères. Les seuls critères qui sont conservés sont l'URI de la personne, sans quoi on ne peut pas l'identifier et l'année de naissance.

Il est ensuite possible de rajouter des critères optionnels comme le nom (toutes les personnes n'ont pas systématiquement un nom inscrit), la nationalité, etc.

Il est aussi parfois essentiel de conserver le résumé/la biographie de la personne, car c'est cet élément qui l'identifie en tant qu'économiste ou juriste. Il est possible dans le langage SPARQL d'aller chercher des chaînes de caractères avec la clause REGEX. C'est avec cette dernière que nous pouvons aller chercher dans les biographies et les résumées les mentions d'économistes, professeur d'économie, jurist, etc. Pour BnF Data, il y n'a besoin de chercher ces chaînes de caractère qu'en français, car toutes les biographies sont écrites en français. Par contre, pour DBpedia, il faut avant tout les faire en anglais, car c'est la langue qui est privilégiée.

Voici un exemple d'interrogation possible pour obtenir les économistes sur le point de terminaison SPARQL BnF Data:

PREFIX egr: <http://rdvocab.info/ElementsGr2/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?s ?name ?sName ?uri_viaf ?bio ?date
WHERE
{ { ?s egr:biographicalInformation ?bio ;
egr:dateOfBirth ?bd
BIND(STRBEFORE(STRAFTER(STR(?bd), "http://data.bnf.fr/date/"), "/") AS ?date)
# La clause "BIND" est utilisé afin de ne garder dans l'URL que la date.
FILTER ( ?date > "1800" )
FILTER ( ( REGEX(?bio, "juriste", "i") || REGEX(?bio, "professeur de droit", "i") ) || REGEX(?bio, "docteur en droit", "i") )
# Ce filtre est nécessaire pour obtenir la population que nous avons défini.
OPTIONAL
{ ?s foaf:name ?name }
OPTIONAL
{ ?s skos:prefLabel ?sName }
OPTIONAL
{ ?s owl:sameAs ?uri_viaf
FILTER REGEX(?uri_viaf, "viaf.org", "i")
# Ce filtre est utilisé pour fusionner les données issues de
# BnF Data et de DBpedia by l'URI VIAF.
}
}
UNION
{ ?s egr:biographicalInformation ?bio ;
egr:dateOfBirth ?bd
BIND(STRBEFORE(STRAFTER(STR(?bd), "http://data.bnf.fr/date/"), "/") AS ?date)
FILTER ( ?date > "1800" )
FILTER ( ( ( REGEX(?bio, "économiste") || REGEX(?bio, "Economiste") ) || REGEX(?bio, "professeur d'économie", "i") ) || REGEX(?bio, "docteur en économie", "i") )
OPTIONAL
{ ?s foaf:name ?name }
OPTIONAL
{ ?s skos:prefLabel ?sName }
OPTIONAL
{ ?s owl:sameAs ?uri_viaf
FILTER REGEX(?uri_viaf, "viaf.org", "i")
}
}
}
ORDER BY DESC(?uri_viaf)

Cette requête est exécuté sur Python est permet d'aller chercher à la fois les économistes et à la fois les juristes BnF Data. (cf. documentation SPARQL pour comprendre davantage comment se construit la requête).

Nous ajoutons de façon optionnelle les personnes qui aurait un URI VIAF. Il est important, car il nous permet de faire une jointure entre les données BnF Data et DBpedia pour les personnes qui ont le même URI VIAF sur les bases de données.

Il est possible de retrouver sur ce carnet la requête pour BnF Data et DBpedia, ainsi que les démarches pour aligner les deux bases de données.