Skip to content

Ce qui ne va pas dans data.bnf.fr

08/12/2016

Résumé : ne sont versées dans data.bnf.fr que les notices d’autorité identifiées dans le catalogue comme « validées », et leurs notices bibliographiques associées. Cela induit-il un biais sur la constitution du corpus que constitue data.bnf.fr, comme représentatif ou non du catalogue de la BnF ?


Autant le dire tout de suite : le titre est un mauvais jeu de mots pour être le plus accrocheur possible. Son sens est très certainement autre que ce que vous pensiez en cliquant dessus1.

En fait, data.bnf.fr est constitué, pour 99% de son contenu, par des données issues du catalogue général de la BnF.

Pourtant, il n’y a que ~80% du contenu du catalogue qui arrive dans data.bnf.fr. Qu’est-ce qui fait que certaines choses n’y sont pas ?

Il me semble utile quel mécanisme génère cela (quel est le système de « sélection »), et prendre surtout ensuite le temps d’insister sur les conséquences quand on manipule les données de data.bnf.fr.

Le principe des biais

De manière plus générale, je vais essayer de publier une série de billets sur les biais dans data.bnf.fr : j’ai tendance à vouloir utiliser cette base comme un reflet suffisamment complet de la production éditoriale, au point que quand on veut avoir une approche statistique, les résultats sont représentatifs.

Je veux dire par là que même s’il manque un cinquième du catalogue, les informations qu’on pourrait tirer de data.bnf.fr (comme « les livres sur le sujet ‘laïcité’ progressent dans les années 2000 de x% ») resteraient vrais si on observait la totalité du catalogue, parce que la manière dont le « tri » technique s’effectue n’a rien à voir avec l’indexation sujet, donc la proportion d’ouvrages sur la laïcité par année devrait être la même dans le catalogue et dans data.bnf.fr.

Logiquement oui. Pourtant c’est à nuancer. Mais commençons par le commencement : qu’est-ce qui ne va pas dans data.bnf.fr ?

Le transfert des données, du catalogue à data.bnf.fr

Le catalogue est — sans étonner personne — constitué de deux grosses bases :

  • les notices bibliographiques
    ce qui inclut les notices de monographies et de périodiques, bien sûr, mais aussi les notices de spectacles, de collections, et d’ensembles éditoriaux (comme ce dernier concept n’est pas forcément familier à tous, voici un exemple : cet ensemble regroupe la série de enquêtes de Harry Bosch par Michaël Connelly, chez Calmann-Lévy à partir de 2012)
  • les notices d’autorité
    notices d’auteurs et de collectivités, notices Rameau et Dewey, notices d’œuvres (créées pour les besoins d’indexation, lorsqu’elles servent d’entrée sujet à d’autres ouvrages), etc.

Il existe évidemment de nombreux liens entre notices d’autorité et notices bibliographiques.

nnb_nna

Or la longue, complexe (et douloureuse ?) histoire du catalogue à la BnF explique qu’il y a naturellement eu des périodes de catalogage à la chaîne, pour rétroconvertir sur ordinateur des millions de fiches bibliographiques, en créant à la volée des notices d’autorité. Sans forcément s’assurer d’abord que l’auteur n’existait pas déjà. Ou sans disposer d’éléments biographiques (autre que « Nom, Prénom », mentionnés dans la notice bibliographique).

Donc face à un livre d’un certain Jean Martin :

  • dans certains cas, dans le doute, on rattachait l’ouvrage à une notice d’autorité déjà existante
  • dans d’autres cas, dans le doute, on créait une nouvelle notice d’autorité, sans beaucoup d’informations

Donc on se retrouve aujourd’hui avec des notices d’autorité qui sont déclarées comme auteurs d’ouvrages écrits en réalité par plusieurs homonymes ; et des notices d’autorité qui doublonnent inutilement avec d’autres.

Mais rassurez-vous : la BnF consacre beaucoup de temps et d’ETP à corriger le problème (on s’est même doté d’un tout nouvel outil, qui s’appuie sur les algorithmes déjà utilisés dans data.bnf.fr, pour conduire des chantiers de manière automatisée ou semi-automatisée). Mais comme il y a 5 millions de notices d’autorité…

Actuellement, il y a :

Or dans data.bnf.fr, on ne veut exposer que les informations « validées ». Donc on prend toutes les notices d’autorité validées, toutes les notices bibliographiques qui leurs sont associées, et on envoie tout ça dans data.bnf.fr.

C’est ainsi qu’on a dans data.bnf.fr 50% des notices d’autorité, et 80% des notices du catalogue.

Est-ce que c’est grave ?

La question que je me pose n’est pas tant : est-ce le bon choix de laisser le côté des notices d’autorité élémentaires avec toutes leurs notices bibliographiques (qui, elles, sont potentiellement correctes) ? Celle-là, j’y reviendrai peut-être un autre jour mais pour l’instant je la laisse de côté.

Non, la question pour aujourd’hui, c’est : est-ce que ça empêche de faire comme si data.bnf.fr était représentatif (statistiquement parlant) du contenu du catalogue, donc du dépôt légal, donc grosso modo de la production éditoriale française (je laisse de côté, faute de compétences, la question de l’écart entre dépôt légal et production réelle) ? Est-ce que ça empêche d’exploiter data.bnf.fr comme source bibliographique pour une analyse historique et statistique de la société française ?

A vue de nez, il me semble que c’est relativement neutre.

  • Sauf que, par exemple, en l’état, ça surreprésente les grands auteurs par rapport à ceux qui n’ont écrit qu’un seul livre : parce que les grands auteurs sont les premiers qu’on aura pris la peine de corriger et d’en faire des notices d’autorité « validées ».
  • De même, ça surreprésente les auteurs récents, parce que de combler les vides biographiques d’auteurs du XIXe siècle dont on ignore tout (sauf qu’ils ont écrit le livre qu’on a entre les mains), c’est plus compliqué

Pour le vérifier de manière un peu plus satisfaisante, on pourrait tenter une approche comparative sujet : par exemple en comparant l’évolution du sujet « laïcité » dans le catalogue et dans data.bnf.fr, au fil des années. Mais l’approche sujet est tributaire de la politique d’indexation, et Rameau n’apparaît que dans les années 1980.

Comparaison concrète : titre contient « science »

Voici tout de même une évolution comparée de la présence du terme « science » dans les titres dans le catalogue et dans data.bnf.fr.

Requête dans le SRU du catalogue, en Python(non accessible hors BnF pour le moment)

# -*- coding: utf-8 -*-
from lxml import etree

ns = {"srw":"http://www.loc.gov/zing/srw/", "m":"http://catalogue.bnf.fr/namespaces/InterXMarc","mn":"http://catalogue.bnf.fr/namespaces/motsnotices"}
url = "http://xxx.bnf.fr/SRU?version=1.2&operation=searchRetrieve&query=Title%20any%20%22science%20sciences%22&recordSchema=InterXMarc_Complet"
resultats = open("D:/resultatsSciencecatalogue.txt","w")
url = (url+"&").replace("&&","&")
firstPage = etree.parse(url)
nbResultats = int(firstPage.find("//srw:numberOfRecords",namespaces=ns).text)
nbPagesResultats = round(nbResultats/20)
i = 1
while (i < nbResultats):
    urlPage = url + "startRecord=" + str(i)
    page = etree.parse(urlPage)
    for record in page.xpath("//m:record",namespaces=ns):
        nnb = record.get("Numero")
        date = ""
        if (record.find("m:controlfield[@tag='008']",namespaces=ns) is not None):
            date = record.find("m:controlfield[@tag='008']",namespaces=ns).text[8:12]
        resultats.write(nnb + "\t" + date + "\n")
    i = i+20

Requête SPARQL pour « titre contient science »

PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX bnf-onto: <http://data.bnf.fr/ontology/bnf-onto/>
select ?decennie (count(?manif) as ?nbManif) where {
  ?manif a <http://rdvocab.info/uri/schema/FRBRentitiesRDA/Manifestation>.
  ?manif dcterms:title ?titre.
  ?manif bnf-onto:firstYear ?date.
  BIND (concat(substr(str(?date),1,3), "0") as ?decennie)
  FILTER (regex(?titre, "science")).
  FILTER (?date > 1599)
}
ORDER BY ?decennie

Arrondi à la décennie près, voici la proportion de notices bibliographiques du catalogue versées dans data.bnf.fr comme manifestations :

part_du_cg_dans_databnf

J’ai fourni le code des requêtes pour que ceux qui s’en sentent le courage puissent m’indiquer les éventuelles erreurs de méthode que j’aurais pu faire : car je ne trouve pas d’explication à ce graphique. Notamment le fait que pour les années 2000-2015, il n’y aurait que 30% du catalogue dans data.bnf.fr.

Il est clair que les 2 requêtes ne sont pas équivalentes :

  • dans le catalogue, on cherche les titres contenant les mots « science » ou « sciences »
  • dans data, on filtre sur les manifestations dont le titre contient la chaîne de caractère « science »

Mais même dans l’hypothèse où une requête différemment formulée permettrait de retrouver une plus grande partie du catalogue dans data.bnf.fr, l’évolution chaotique de cette courbe me laisse très perplexe.

Au passage, il me semble que l’interprétation d’un pourcentage ne sera pas la même si « 100% » correspond à 100, ou  à 100.000 notices. Du coup voici le même graphique, enrichi de 2 courbes secondaires permettant de voir de quelle volumétrie on parle, à chaque décennie :

sciences-dans-catalogue-et-data

L’info principale reste la courbe bleue, qui se cale sur l’axe vertical gauche (en pourcentages). Mais pour qu’on sache de quelle volumétrie il est question, j’ai ajouté les 2 courbes correspondant à la volumétrie stricte des notices concernées (en rouge pour le catalogue, en vert pour data.bnf.fr) ; et ces 2 courbes fines sont tracées en fonction de l’axe de droite.

Comparaison concrète : Strasbourg

Voici un tout autre angle d’approche : la mention éditoriale qui contient le mot « Strasbourg » (pour les textes imprimés uniquement, en évacuant les objets signalés dans le catalogue pour les besoins de Gallica, mais pas dans data.bnf.fr pour le moment) dans le catalogue et dans data.bnf.fr.

 

strasbourg_cg_data

Le graphique me semble plus facile à expliquer : les notices récentes, de meilleure qualité, sont plus souvent présentes dans data.bnf.fr.

Nombre de notices, par année

Et pour comparer le tout, voici le nombre de notices (ou, dans data.bnf.fr, de « manifestations ») par décennie : % des notices du catalogue dans data.bnf.fr, nombre total de notices dans le catalogue, nombre total de notices dans data.bnf.fr

pourcentagecataloguedansdata

Quelle question on se pose, déjà ?

Ma question de départ, c’est : pour avoir une approche globale, statistique, puis-je considérer que data.bnf.fr réagit (en proportions) comme le catalogue, et que je peux donc interpréter les grandes masses que je trouve dans data.bnf.fr comme s’il s’agissait du catalogue ?

J’avoue avoir du mal à interpréter les 3 courbes ci-dessus (mais sans doute n’ai-je pas posé les bonnes questions), mais selon que je cherche un lieu d’édition, ou la présence d’un mot (assez générique) dans un titre, la proportion des notices trouvées, par année, n’a pas la même allure que la proportion globale des notices.

Le dernier graphique m’indique que pour la période 1400-1950, environ 50% du catalogue est dans data.bnf.fr. Et ensuite on passe à 80%.

Mais les 2 graphiques précédents n’ont pas vraiment les mêmes caractéristiques. Donc « l’échantillon » que je peux exploiter dans data.bnf.fr, comme export du catalogue, ne peut pas être considérer comme uniformément représentatif du corpus global.

Je vous laisse réagir et me suggérer quelles questions poser, ou quelles réponses apporter à mes égarements ?

——————
↑↑ 1. je suis lucide : espérer être raccoleur en parlant de data.bnf.fr est voué à l’échec]

Publicités
5 commentaires
  1. B. Majour permalink
    14/12/2016 17:50

    Bonjour Lully

    Ce qui me semble bizarre, c’est que d’un côté tu calcules le nombre de titres avec le mot exact « science ».
    Et de l’autre, les deux mots « science » et « sciences ».

    Ce que je peux conclure de ta mesure, c’est que tu as regardé le pourcentage du mot
    « science » / (« science » + « sciences »)

    Donc, en 2000-2015, tu as seulement 30 % des titres avec « science »… donc, potentiellement 70 % des titres avec « sciences ». (ce qui se passerait si tu exécutais ta requête sur la même base)

    A moins que regex ne recherche à l’intérieur du titre. (je ne sais pas ce que retourne regex)
    hum…

    Quand je regarde ici
    http://www.w3.org/TR/rdf-sparql-query/#funcex-regex

    @prefix foaf: .

    _:a foaf:name « Alice ».
    _:b foaf:name « Bob » .

    PREFIX foaf:
    SELECT ?name
    WHERE { ?x foaf:name ?name
    FILTER regex(?name, « ^ali », « i ») }

    Query result:name
    « Alice »

    je note une différence d’un ^ devant ali

    Est-ce pour mentionner qu’il faut dé-spécialiser le A majuscule ?
    Ce qui fait que, dans ton cas, le mot Science (S majuscule) ne serait peut-être pas pris en compte dans ta recherche ?
    les sciences de l’information = sélectionné
    Science de l’information = non sélectionné

    Relance ta requête Sparql avec juste « cience », et tu verras la différence, ou alors avec le ^ si c’est bien ce qu’il faut pour éliminer les majuscules.

    Parce que 30 % ce n’est pas normal.
    Sauf si on est sur un problème Case sensitive (distinction majuscules minuscules).
    B. Majour

  2. B. Majour permalink
    14/12/2016 18:00

    Oui, ça se confirme bien.

    « Mysql: Case-insensitive matching is probably more efficient than the SPARQL default case-sensitive search. »

    https://github.com/ontop/ontop/wiki/Regex-SPARQL-filter

    B. Majour

  3. 12/01/2017 17:17

    Bonjour,

    Votre article m’intéresse beaucoup, et me préoccupe, car j’explore assidûment databnf.
    https://resultats.hypotheses.org/795 http://obvil.lip6.fr/cataviz/chrono.php

    Je n’ai pas accès au catalogue général, malheureusement, mais je me suis corrigé pour ne plus laisser entendre que databnf était complet.

    Merci d’avance pour tout éclairage supplémentaire permettant de mesurer les biais.

    Frédéric Glorieux

Trackbacks

  1. Ce qui ne va pas dans data.bnf.fr | Vers le Web...
  2. Data.bnf.fr, les documents – J’attends des résultats

Commentaires fermés

%d blogueurs aiment cette page :