Revenir à la [[:td_histoire_numerique:accueil|page d'accueil]].
Licence Creative Commons Le cours "Outils numériques pour les historiens" de Francesco Beretta, avec tous les documents, fichiers et scripts associés, est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.
====== Annotation sémantique de textes ====== \\ Fichier{{ {{:td_histoire_numerique:textes_tei_20191007.zip|}}| mis-à-jour}} {{:td_histoire_numerique:migration_0.zip|Migration 0 de la base de données}} \\ ===== Documents à annoter ===== Concernant le premier document à annoter [[td_histoire_numerique:premier_exercice&#reconnaissance_et_classement_d_entites_nommees_dans_un_texte|voir cette page]]. \\ ==== Création du deuxième document à annoter ==== Document à télécharger pour l'exercice de mardi 29 septembre: {{:td_histoire_numerique:liste_notices_bnf.ods|liste_notices_BNF.ods}} Les **indications concernant la production** du document se trouvent sur **[[td_histoire_numerique:creation_liste_notices_bnf|cette page]]**. Il s'agit maintenant le créer le document en format texte que nous allons annoter en introduisant une indexation sémantique. * ouvrez le document 'liste_notices_BNF.ods' * sélectionnez toutes les cellules de la colonne 'notice' sauf la première (qui contient le nom de la colonne). Pour sélectionner les cellules sélectionnez la première, appuyez sur la touche majuscule puis sélectionnez la dernière. * collez le contenu du presse-papier dans un document texte vide (Writer) * sauvegardez ce document sous le nom '**liste_notices_BNF.odt**' \\ Nous disposons donc de deux documents à annoter : {{:td_histoire_numerique:liste_notices_bnf.odt|celui que nous venons de produire}} et celui que nous avons téléchargé pour le premier exercice (il est {{:td_histoire_numerique:notices_wikipedia_texte_brut.zip|téléchargeable ici}}). \\ ===== Principes d'annotation ===== L'annotation sémantique des textes utilise les principes de l'[[https://fr.wikipedia.org/wiki/Extensible_Markup_Language|encodage en format XML]], selon les recommandations de la [[http://www.tei-c.org/|Text encoding initiative]], en les appliquant de manière simplifiée. Voir sur [[td_histoire_numerique:descriptif_exercice_4&#principes_du_xmlla_grammaire_de_l_encodage|cette page]] une présentation synthétique des principe de l'encodage d'un texte en XML. ==== Balises ==== TTT = n'importe quelle chaîne de caractères ^ Balise ^ Définition ^ Explication ^ Balise TEI ^ Exemple complet ^ Transformé en XML ^ |{ud0}TTT{/ud} | unité documentaire | Au dessus du niveau paragraphe, enveloppe un paragraphe | tei:div | {ud0_8}TTT{/ud} | TTT | | {eud}TTT{/eud} | en-tête d'unité documentaire | A placer toujours au début d'une unité documentaire pour disposer d'un titre | tei:head | {eud_9}TTT{/eud} | TTT | | {en0}TTT{/en} | entité nommée | Identifie dans le texte une chaîne de caractères qui représente le nom d'un objet | tei:name | {en2ai_10}TTT{/en} | TTT | | {ro0}TTT{/ro} | référence à un objet | Identifie dans le texte une chaîne de caractères qui se réfère à un objet sans être son nom | tei:rs | {ro0ai_10}TTT{/ro} | TTT | | {dat}TTT{/dat} | date |Une chaîne de caractéres qui représente une date dans n'importe quel format | tei:date | {dat1576r_df} | TTT | | {seg}TTT{/seg} | segment | Au dessous du niveau paragraphe, toujours à l'intérieur d'un paragraphe, regroupe en règle générale plusieurs propositions. | tei:seg | {seg_8}TTT{/seg} | TTT | | {co0}TTT{/co} | contenu | Identifie dans le texte une unité de connaissance de type 'contenu' | tei:seg | {co0_11}TTT{/co} | TTT | | {in0}TTT{/in} | information | Identifie dans le texte une unité de connaissance de type 'information' | tei:seg | {in13_12}TTT{/in} | TTT | Dans l'espace de noms du TD, le nom des balises possède deux caractères si la balise est susceptible d'être associée à un objet de la base de données, trois si cette possibilité est exclue. \\ Pour les balises à deux lettres, un 0 est ajouté si la référence à un objet dans la base de données est omise. Au cas contraire, on remplace le 0 par l'identifiant de l'objet dans la base de données. ==== Types ==== === Types d'objets === On peut ajouter un sigle sur deux caractères aux balises 'en' et 'ro', après le 0 ou l'identifiant numérique de l'objet, qui indique quel est le type de l'objet visé. | ai | Acteur [individuel] | | ac | Acteur collectif | | oa | Objet abstrait | | cs | Caractère social | | om | Objet matériel | | bi | Bibliographie | | ud | Unité documentaire | | od | Objet digital | | li | Lieu | | im | Immeuble | Par exemple: {en0cs}mathématicien{/en} Cette possibilité n'est vraiment utile que si on renonce à créer les objets dans la base de données et que la valeur de l'identifiant sera donc '0'. Grâce au sigle on pourra ainsi indiquer dans le texte de quel type d'objet il s'agit. Si on a créé l'objet dans la base de données, et donc obligatoirement renseigné un type, celui-ci pourra être récupéré par une requête. \\ === Typologie supplémentaire === Pour toutes les balises, sauf la balise 'dat' (pour la date), on peut ajouter un type sous forme d'un objet abstrait qu'on crée dans la base de données et dont on ajoutera l'identifiant numérique après un tiret bas. Par ex.:\\ * {seg_23}Érudit et collectionneur français{/seg} * dans la base de données, l'objet 23 aura été préalablement défini, par exemple, en tant que 'notice biographique succincte'. * Avec ce procédé on peut indexer et qualifier au point de vue sémantique toute portion de texte. * {en2ai_10}Johannes Kepler{/en} * Cette entité nommée correspond à un acteur individuel (ai) qui a le numéro 2 dans la base de données. Le sigle 'ai' n'est pas vraiment indispensable car le type de l'objet est obligatoirement renseigné dans la base de données * De plus il s'agit de l'objet concerné par le texte qui entoure la balise (identifiant 10 de la base de données). * {ro18|19cs_10|999}Philosophe et savant français{/ro} * si on identifie plusieurs objets dans une même portion de texte, enveloppée par une balise, on peut lui associer plusieurs clés d'objets de la base de données (18 et 19 dans l'exemple) séparées par un trait vertical "|". Dans ce cas, il est toutefois interdit d'ajouter le type d'objet. * de la même manière on peut associer une ou plusieurs typologies à un texte, après le tiret sous la ligne, en les séparant par un "|". \\ ==== Dates ==== Nous utilisons pour les dates le [[https://fr.wikipedia.org/wiki/ISO_8601|format ISO 8601]]. \\ En s'inspirant du format ISO 8601, on saisira les dates sous forme de //chiffres// assemblées dans un //texte//, ce qui permet de traiter les dates tronquées (seulement l'année, ou seulement l'année et le mois, etc.). Le nombre obligatoire de chiffres est égal au nombre de lettres dans le modèle. Le nombre manquant de chiffres sera remplacé par 0 au début de la date. ^Forme ^ Signification ^ Exemples ^ | AAAA | Année | 0078; 0344; 1564 | | AAAAMM | Année, mois | 156403 | | AAAAMMJJ | Année, mois, jour | 15640309 | | AAAAMMJJHH | Année, mois, jour, heures | 1564030918 | | AAAAMMJJHHMM | Année, mois, jour, heures, minutes | 156403091830 | | AAAAMMJJHHMMSS | Année, mois, jour, heures, minutes, segondes | 15640309183022 | \\ Mise en forme des dates : \\ \\ {dat20001101} le premier novembre de la dernière année du siècle précédent{/dat} \\ === Types de dates === On peut ajouter après la date, en la séparant par un tiret bas, une précision sous forme de sigle à deux caractères qui indique quel est le type de date: | dd | Date de début | | df | Date de fin | | di | Date intermédiaire | | du | Date unique | \\ === Incertitude concernant les dates === On peut ajouter également, à la suite de la date, un caractère qui indique le degré de précision de la date | [e] | Date exacte | Ce caractère est omis car il s'agit de degré de précision par défaut | | r | Date reconstituée |Date qu'on a pu reconstituer à partir du contexte | | p | Date postulée | Date qu'on fixe pour disposer d'un point d'ancrage dans le temps à défaut d'en savoir plus | Il était en fonction au {dat20001115r_di} milieu du mois de novembre de la dernière année du siècle précédent{/dat}. \\ \\ ===== Techniques d'annotation ===== \\ ==== Fonctionnalité 'Rechercher et remplacer' ==== La manière la plus efficace d'annoter un texte consiste à utiliser la fonctionnalité 'Rechercher et remplacer' de Writer ou de l'éditeur de texte de son propre choix (Word, R, etc.). Aussi il est indispensable de se familiariser et d'utiliser les expressions rationnelles ou régulières. === Expressions régulières === Une [[https://fr.wikipedia.org/wiki/Expression_rationnelle|introduction]] aux expressions régulières. De nombreux tutoriels et sites proposant des exercices existent sur le web pour apprendre à les utiliser. Documentation de LibreOffice (traduction en français): * [[https://help.libreoffice.org/Common/Find_and_Replace/fr|Rechercher & remplacer]] * [[https://help.libreoffice.org/Common/List_of_Regular_Expressions/fr|Liste des expressions régulières]] === Recherche de similarités === * L'exemple de 'Jacob' * [[https://fr.wikipedia.org/wiki/N-gramme|N-Gram]] * [[https://books.google.com/ngrams/graph?content=Galileo+Galilei,Cartesio,Descartes,Copernico,Copernicus,Kopernik&year_start=1800&year_end=2000&corpus=22&smoothing=3&share=&direct_url=t1;,Galileo Galilei;,c0;.t1;,Cartesio;,c0;.t1;,Descartes;,c0;.t1;,Copernico;,c0;.t1;,Copernicus;,c0;.t1;,Kopernik;,c0|Google NGram viewer]] – explication : [[https://fr.wikipedia.org/wiki/Ngram_Viewer|Ngram Viewer]] \\ ==== Annotation manuelle ==== Une pratique efficace : * sélectionner le texte à annoter, par ex. une entitée nommée * ouvrir la boîte de dialogue Chercher/Remplacer et activer les expressions régulières * entourer la chaîne recherchée avec une parenthèse ronde : ( ) * dans la zone 'Remplacer' introduire le symbole $1 (qui se réfère aux parenthèses rondes de la recherche dans l'ordre de leur apparition: 1,2,3, etc.) en l'entourant de la balise appropriée, par ex. {en0}$1{/en} * pour aller plus vite, utiliser les chaînes de remplacement des recherches précédentes, tout en remplaçant l'identifiant précédent par celui de l'objet en question et en ajoutant, le cas échéant les bons paramètres, par ex. {en789}$1{/en} === Chercher toutes les annotations afin de les mettre en couleur ou de les supprimer === * Rechercher: %%\%%{[a-zA-Z_/0-9\|]%%*%%%%\%%} – Remplacer par un champs vide: supprime toutes les annotations. * Rechercher: (%%\%%{[a-zA-Z0-9_/\|]%%*%%%%\%%}) – Remplacer: $1 [avec indication du format dans le champs remplacer: par ex. une couleur]. ==== Annotation semi-automatique ==== * Créer des unités documentaires, une par notice * Chercher : $ Remplacer : \n{/ud}\n{ud0}\n * Ajouter la première et la dernière balise * Annoter les dates de naissance * Chercher : (,\s|\()(\d{4})(\)) Remplacer : $1{dat$2}$2{/dat}$3 * Avec cette expression on devrait trouver presque exclusivement les dates de naissance * Chercher les lieux de naissance * Chercher : (\s\()([\w\s\(\),'\?]*)(,\s\{) Remplacer : $1{en0li}$2{/en}$3