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 !