TextUID : Propositions pour un identifiant unique d’un livre, commun Ă  ses diffĂ©rentes Ă©ditions, gĂ©nĂ©rable automatiquement

Dans cet article, je propose des pistes pour une mĂ©thode facilement reproductible permettant de gĂ©nĂ©rer automatiquement un identifiant de texte. Ce n’est pas une mĂ©thode parfaite, mais plutĂŽt la « moins mauvaise » mĂ©thode, aussi je suis ouvert Ă  toute suggestion permettant de l’amĂ©liorer.

MAJ 08/06/2014 : ajout des rÚgles 6 et 7 et de deux nouveaux exemples. Merci à @edasfr pour ces remarques.

Pourquoi ?

Lorsque je dĂ©veloppe un site ou un outil pour les libraires, un besoin rĂ©curent celui est de pouvoir identifier les diffĂ©rents livres correspondant Ă  un mĂȘme texte (nouvelle Ă©dition, rĂ©Ă©dition en poche, version numĂ©rique ou audio, etc.).

Par exemple, le site de la librairie Scylla, sur chaque fiche livre, propose le mĂȘme livre dans d’autres formats ou d’anciennes Ă©ditions Ă©puisĂ©s disponibles d’occasion. Autre exemple, la librairie Charybde, pour le calcul de ses meilleures ventes, souhaite que les ventes d’un mĂȘme texte chez diffĂ©rents Ă©diteurs soient additionnĂ©s et pas considĂ©rĂ©s comme des livres diffĂ©rents.

Aujourd’hui, ce recoupement demande que les librairies (ou autres utilisateurs de Biblys) crĂ©ent manuellement ces relations, opĂ©ration fastidieuse qui peut ĂȘtre source d’erreur.

Cahiers des charges

La mĂ©thode de gĂ©nĂ©ration de l’identifiant doit :

  • ĂȘtre facilement Ă  mettre en Ɠuvre afin que n’importe qui puisse gĂ©nĂ©rer un identifiant sans passer par une autoritĂ© centrale ;
  • ĂȘtre suffisamment dĂ©taillĂ©e et prĂ©voir tous les piĂšges possibles : deux acteurs gĂ©nĂ©rant un identifiant pour le mĂȘme texte doivent parvenir systĂ©matiquement au mĂȘme rĂ©sultat.

D’autres (mauvaises) solutions

  • Le titre du livre, de toute Ă©vidence, ne peut convenir puisque que, si deux editions d’un livre ont a priori le mĂȘme titre, il n’est pas rare que deux livres sans aucun rapport ait Ă©galement le mĂȘme titre. Par exemple, dans la base Biblys (qui est loin d’ĂȘtre exhaustive), il y a pas moins de cinq titres d’auteurs diffĂ©rents intitulĂ© « Les Insoumis« …
  • Les ISBN sont propres Ă  chaque Ă©dition d’un livre, il arrive parfois qu’un mĂȘme livre chez un mĂȘme Ă©diteur puisse obtenir des ISBN diffĂ©rents au fil des rĂ©impressions, ils ne peuvent donc convenir Ă  cet usage.
  • La norme ISTC (pour International Standard Text Code) se rapproche de nos besoins, mais elle a deux dĂ©savantages. D’abord, elle ne nĂ©cessite de passer par une autoritĂ© centrale, une agence (en France, Électre) qui ne peut crĂ©er de nouveaux codes qu’Ă  la demande d’un Ă©diteur ou d’un ayant droit. De plus, elle semble peu utilisĂ©e aujourd’hui.

Description de la norme TextUID

Elle se prĂ©sente sous la forme un ensemble de rĂšgles, dont le but est de dĂ©crire la mĂ©thode de gĂ©nĂ©ration de l’identifiant en tentant de prĂ©voir un maximum de cas particuliers pour indiquer la marche Ă  suivre le cas Ă©chĂ©ant. De nouvelles rĂšgles pourront donc ĂȘtre ajoutĂ©es si de nouveaux cas particuliers problĂ©matique sont dĂ©couverts.

RĂšgle 1

Le TextUID est une empreinte MD5 gĂ©nĂ©rĂ© d’aprĂšs une chaĂźne de caractĂšres prĂ©cises, encodĂ© en UTF-8, en majuscules, contenant :
TITRE ORIGINAL du livre
barre oblique entourĂ© d’espaces : ‘ / ‘
NOM PRÉNOM de l’auteur (ou NOM uniquement le cas Ă©chĂ©ant)

Soit : TITRE ORIGINAL / NOM PRÉNOM

RĂšgle 2

Le titre du livre doit ĂȘtre dans la langue de publication originale, afin que les diffĂ©rentes traductions d’une oeuvre possĂšdent bien le mĂȘme identifiant que l’original.

RĂšgle 3

Si le livre a plusieurs auteurs, on les ajoute dans l’ordre alphabĂ©tique, l’un aprĂšs l’autre, sĂ©parĂ©s par une virgule et une espace : NOM PRÉNOM, NOM PRÉNOM (ou NOM uniquement le cas Ă©chĂ©ant)

Soit : TITRE ORIGINAL / NOM PRÉNOM, NOM, NOM PRÉNOM

RĂšgle 4

S’il existe plusieurs graphies pour un titre de livre, on utilise celui mentionnĂ© sur la couverture de la premiĂšre Ă©dition.

RĂšgle 5

S’il existe plusieurs graphies pour un nom d’auteur, on utilise celui mentionnĂ© sur la couverture de la premiĂšre Ă©dition de son premier livre publiĂ©.

RĂšgle 6

Si le livre fait partie d’une sĂ©rie, on utilise le titre du tome uniquement. Si le tome n’a pas de titre, on utilise le nom de la sĂ©rie, suivi d’un tiret et du numĂ©ro du tome.

RĂšgle 7

Si le livre est un ouvrage collectif et qu’un ou plusieurs directeurs d’ouvrage sont mentionnĂ©s (« Sous la direction de… »), ce sont ces noms qui seront utilisĂ©s au lieu du nom des auteurs.

Quelques exemples :

Le Petit Prince

Chaüne : LE PETIT PRINCE / DE SAINT-EXUPÉRY ANTOINE
Empreinte MD5 : 31943e821c39ccd479441a2b0bdcf2b7

L’Attrape-coeurs

Chaßne : THE CATCHER IN THE RYE / SALINGER J. D.
Empreinte MD5 : 9c93c0d32ee994bddf65bb6f3bcfa421

Les Soldats de la mer

Chaüne : LES SOLDATS DE LA MER / RÉMY ADA, RÉMY YVES
Empreinte MD5 : d44c3bf585ee56cf1ae02f043492de81

À la recherche du temps perdu, tome 2

ChaĂźne : À L’OMBRE DES JEUNES FILLES EN FLEURS / PROUST MARCEL
Empreinte MD5 : 736ac35cc4ce8b67dfbaaa901c03f398

L’Ă©nergie Ă  dĂ©couvert, sous la direction de…

ChaĂźne : L’ÉNERGIE À DÉCOUVERT / JEANDEL CATHERINE, MOSSERI REMY
Empreinte MD5 : 97ff30f497e277265045e3cbdf08a37c

Exemples de code

PHP

<?php

function textuid($title, $authors)
{
    foreach ($authors as $author)
    {
        if (!isset($authors_string)) $authors_string = NULL;
        else $authors_string .= ', ';
        $authors_string .= trim($author['last_name'].' '.$author['first_name']);
    }
    $string = mb_strtoupper($title.' / '.$authors_string, 'UTF-8');
    $hash = md5($string);
    return array('string' => $string, 'hash' => $hash);
}

$book_title = "Les Soldats de la mer";
$book_authors = array(
    array('first_name' => 'Ada', 'last_name' => 'RĂ©my'),
    array('first_name' => 'Yves', 'last_name' => 'RĂ©my')
);

var_dump(textuid($book_title, $book_authors));

Voir aussi ici le code en action.

Conclusion

J’utilise dĂ©jĂ  cette mĂ©thode, Ă  des fins de test, pour la base Biblys. Je la partage ici car je pense qu’elle pourrait ĂȘtre utile Ă  d’autres en interne, mais aussi parce qu’elle prendrait un tout autre intĂ©rĂȘt dans le cadre d’un Ă©change de donnĂ©es entre des bases diffĂ©rentes.

Je suis conscient que cette mĂ©thode ne pourra jamais fonctionner Ă  100%, mais je pense que la premiĂšre rĂšgle doit pouvoir couvrir 99% des cas et que les suivantes doivent pouvoir permettre de se rapprocher au maximum de la perfection… tout en sachant qu’on ne pourra jamais l’atteindre ! Mais c’est sans doute le prix Ă  payer pour une gĂ©nĂ©ration automatique, sans vĂ©rification humaine.

Je suis donc bien entendu ouvert Ă  toute question, remarque ou proposition de rĂšgles qui pourrait permettrait d’amĂ©liorer la mĂ©thode !