Outils pour utilisateurs

Outils du site


symogih_manuel:principes_pour_le_balisage_semantique

Principes pour le balisage sémantique

Retour à : Editions de textes codés en XML selon la sémantique de la "Text encoding initiative" (TEI)

Licence Creative Commons Cette page, rédigée par Francesco Beretta, est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Le balisage sémantique en lien avec la BHP s'effectue à différents niveaux:

  • indexation d'entités nommées dans les textes;
  • association de balises structurelles et de segments de texte à des objets abstraits qui indiquent le sens général de ces portions de texte;
  • association de balises structurelles et de segments de texte à des Informations et Contenus stockés dans la BHP et extraits par le chercheur des portions de texte balisées.
  • annotation de 'contenus' dans un document XML-TEI, reliés directement au texte original


Indexation des entités nommées

Un premier niveau du balisage sémantique est représenté par l'indexation (dite aussi annotation) d'entités nommées dans le texte. On identifie une chaîne de caractères dans le texte qui se réfère à un acteur, à un lieu, à un concept, etc. et on l'associe à l'identifiant que possède ce même objet dans le système d'information du projet symogih.org. Pour ce faire, on utilise une balise qui enveloppe la chaîne de caractères qui permet d'identifier l'objet, qu'il s'agisse du nom de l'objet ou de quelques mots qui le décrivent, et on ajoute un attribut qui contient l'identifiant.

En règle générale il est préférable de ne pas inclure dans les chaînes de caractères encodées les articles, prépositions, etc. mais seulement la partie qui concerne spécifiquement l'entité nommée.

Encoder le nom d'un objet (éléments 'name' et 'rs')

  • si le texte se réfère nommément aux entités et qu'il s'agit d'un nom propre, on utilisera la balise name
    • Par ex. : <name ref="Actr161">Galileo Galilei</name>
    • l'attribut @ref, qui appartient au type des “data.pointer”, contient la clé (sous forme d'URI) avec laquelle l'objet est identifié dans le système de notices d'autorités du projet symogih.org: http://symogih.org/resource/Actr161
    • L'attribut xml:base="http://symogih.org/resource/", inséré dans l'élément 'text' ancètre, fournit l'URL nécessaire à l'identification complète de la ressource. Il est hérité par toutes les balises que contient l'élément 'text' à n'importe quelle profondeur de l'arborescence. Voir à ce sujet la partie des Guidelines sur les pointeurs.
    • Les objets auxquels se réfère le nom propre encodé sont uniquement des entités identifiables individuellement: acteurs, acteurs collectifs, lieux, immeubles
  • si le texte se réfère nommément aux entités et qu'il s'agit d'un nom commun, on utilisera la balise rs et on ajoutera l'attribut @type avec la valeur 'commonNoun'
    • Par ex. : <rs type="commonNoun" ref="SoCh1468">mathématicien</rs>
    • Le lien avec l'ontologie du projet symogih.org s'effectue de la même manière que pour les éléments 'name', c'est-à-dire en utilisant l'attribut @ref
    • Les objets auxquels se réfère le nom commun encodé sont uniquement des concepts abstraits et classes d'objets, non identifiables individuellement.

Encoder la référence à un objet (élément 'rs')

  • si le texte se réfère à l'entité sans la nommer explicitement on utilisera la balise rs
    • Par ex. : le <rs ref="Actr161">mathématicien du grand-duc de Toscane</rs>
    • Dans ce cas, la balise 'rs' est utilisée au sens de 'referring string'. Afin d'expliciter la différence de sens par rapport à l'encodage du nom commun d'un objet (voir ci-dessus), on pourra ajouter l'attribut @type avec la valeur 'referringString', par ex. <rs type="referringString" ref="Actr161">mathématicien du grand-duc de Toscane</rs>.
      • Afin de simplifier l'encodage, nous proposons de considérer qu'il s'agit du cas par défaut de l'utilisation de la balise 'rs' dans le contexte du projet symogih.org et que donc, dans ce cas, l'attribut @type peut être omis.
    • On se servira dans ce cas également de l'attribut @ref pour pointer vers la ressource disponible sur le site symogih.org
    • L'attribut @ref sera également utilisé pour pointer vers des informations, tel un événement, une bataille, etc. auxquelles se réfère l'élément rs ou name à condition que l'information prenne le sens, dans ce contexte, d'un objet abstrait, d'une assertion de l'historien qui devient un objet, et que donc la chaîne de caractères enveloppée par la balise est le nom ou une référence à cet objet. En revanche, pour indiquer que telle portion de texte contient telle assertion, on n'utilisera pas les balises 'rs' ou 'name', mais le procédé indiqué ci-dessous.
      • On utilisera la clé de l'Info comme valeur de l'attribut.
      • Par exemple “Il participa aux <rs ref="Info93940">combats du 24 novembre 1587</rs>” ou “Il participa à la <name ref=“Info93940”>bataille d'Auneau</name>”. ATTENTION: il est toutefois à relever que si l'objet abstrait correspondant à l'unité de connaissance, par exemple le concept de la bataille d'Auneau, a été crée, il est préférable d'utiliser la clé de l'objet et non celle de l'unité de connaissance.

Emboîtement des éléments 'name' et 'rs'

  • La balise rs peut contenir un syntagme assez long se référant à une personne ou à un autre objet et, éventuellement, contenir également une balise name se référant nommément à cette personne. Le reste du syntagme contiendra alors des titres nobiliaires, ecclésiastiques, etc.
    • Dans ces cas, la balise rs ne contient pas nécessairement d'attribut @ref. Elle peut toutefois le contenir si on le souhaite.
    • Par ex. : <rs><name ref="AbOb895">service</name> du <name ref="SoCh718">roy</name></rs>
    • On pourra ainsi rechercher tous les syntagmes (balises rs) contenant des noms ou éléments name d'un certain type et étudier la manière utilisée par l'auteur du texte pour composer les dénominations des objets
    • Cette méthode a été préférée à l'utilisation de balises plus spécifiques, telle 'persName', appartenant au module 'namesdates' pour garder une approche plus générique et ouverte
      • Dans le système d'information du projet symogih.org, des connaissances telles que l'appartenance sociale ou la profession sont traitées avec des objets spécifiques (AbOb ou SoCh) et avec des informations.
      • Par conséquent il est préférable d'utiliser les balises 'rs' et 'name', plus neutres sémantiquement, en pointant vers les objets respectifs
      • Le module 'namesdates' n'est donc pas activé dans le schéma d'encodage proposé par défaut.
  • Si le syntagme tel qu'il est défini au point précédent contient l'appellation précise d'un objet, composée de plusieurs noms ou titres, on utilisera la balise name à la place de la balise rs en appliquant le même procédé décrit ci-dessus. Dans ce cas, le nom sera composé de sous-éléments name.
  • Attention: pour des raisons pratiques, le nombre maximal de niveaux de ces imbrications est limité à 3, par ex.: “rs > rs > name”
  • Pour traiter les références bibliographiques mentionnées dans le texte, on peut utiliser la balise rs avec l'attribut @ref pointant vers l'identifiant de la référence bibliographique.
    • Si souhaité, on précisera grâce à la balise title quelle partie du texte se trouvant dans l'élément rs correspond au titre.
    • Le traitement de références bibliographiques complètes, utilisant les élements bibl ou biblStruct, est à distinguer de l'annotation dans le texte de références à des ouvrages ou à d'autres entités bibliographiques. L'encodage de bibliographies relève d'un autre cas de figure et ne sera pas traité ici car dans le système d'information du projet symogih.org il existe un traitement spécifique pour les objets bibliographiques (Bibl, MaOb, DoUn, DiOb) au sein de la base de données collaborative (BHP), auquel se référera l'encodage en utilisant l'attribut @ref.
    • Pour indiquer le ou les auteurs, on pourra ajouter une balise @ana qui indique que la fonction dans ce contexte de l'entité nommée est d'être l'auteur: <name ana="SoCh1188">. L'attribut @ref permet d'identifier l'acteur correspondant. On aura donc, par exemple : <p>Le <rs ref="Bibl3391"><title>Dialogue sur les deux plus grands systèmes du monde</title> de <name ref="Actr161" ana="SoCh1188">Galilée</name></rs> est considéré par certains comme l'un des chefs d'oeuvre de la littérature italienne.</p>
  • Plus en général, on peut utiliser l'attribut @ana dans les balises 'name' et 'rs' pour indiquer quelle est la fonction de l'objet visé par l'entité nommée dans le contexte en question. La valeur de l'attribut @ana sera dans ce cas la clé d'un objet abstrait ou d'un caractère social. Cette annotation générique n'est toutefois pas très précise et il est souvent préférable de créer des unités de connaissance (contenus ou informations) comme on le verra ci-dessous.

Indexation de passages entiers de texte

L'indexation des entités nommées présentée ci-dessus permet d'annoter la mention d'objets se trouvant dans un texte (élément text), dans les éléments structurels qui articulent le texte en parties (élément div), en paragraphes (élément p) ou en blocks du texte (élément ab). On peut ainsi retrouver tous les éléments regroupés à ces différents niveaux. Toutefois, même dans le cas des paragraphes, notamment si ces derniers ont une certaine longueur, ce regroupement risque de rester trop générique et sans intérêt.

Eléments 's' et 'cl'

On peut ajouter un balisage qui identifie les phrases ou les propositions (principales, relatives, etc.) au sein des phrases. A cette fin on utilisera les balises suivantes :

  • s ( guidelines <s>) : sous-ensemble autonome correspondant à une phrase dans un paragraphe, commençant en règle générale par une majuscule et terminant par un point. Ce dernier sera compris dans la balise 's'.
  • cl (guidelines <cl>) : proposition grammaticale

Ce balisage des textes permettra de retrouver toutes les entités nommées regroupées dans des parties de texte ayant un sens plus précis, tel une phrase ou une proposition.

Element 'seg'

Parfois, le passage muni de sens qu'on reconnaît dans le texte englobe plusieurs phrases, s, ou alors se situe en dessous du niveau des phrases mais avec une configuration qu'on ne peut pas ramener à une proposition.

Dans ces cas on peut utiliser l'élément 'seg', “un segment quelconque, contenant une unité de texte quelconque de niveau ‘segment’” (seg) afin de regrouper plusieurs éléments de même niveau (par ex. des 's') ou pour 'découper' une portion à l'intérieur d'un élément 's' qui ne correspond pas à un élément 'cl'.

Il est à relever que l'élément seg doit se situer en dessous du niveau 'p' ou 'ab' (ce que les Guidelines appellent 'below the ‘chunk’ level'). En d'autres termes, l'élément seg ne peut pas envelopper plusieurs éléments 'p'. De plus, on doit respecter la cohérence de l’arborescence XML (pas de balise fermée au sein d'une autre, si l'ouverture la précède).

Enfin, contrairement aux éléments évoquées précédemment ('p', 's', 'cl', …), l'élément 'seg' a une connotation proprement sémantique, étant donné que le découpage d'un segment est souvent déterminé par une problématique de recherche. Pour cette raison, dans le cas d'un encodage collaboratif il est préférable d'utiliser une méthode d'encodage qui évite d'utiliser l'élément 'seg', soit selon les indications qui suivent, soit en utilisant un encodage stand-off, c'est-à-dire créant un lien entre le texte annoté et un texte externe dans lequel on annote les structures sémantiques, comme on le verra plus loin.

Regroupement de plusieurs paragraphes

Comme l'élément 'seg' ne permet pas de regrouper plusieurs éléments de type 'p' ou 'ab', il faut avoir recours à d'autres méthodes pour indiquer que plusieurs paragraphes ou blocs anonymes ('ab') appartiennent à un même récit.

Voici, parmi d'autres, deux méthodes possibles:


1. l'une est celle d'utiliser des éléments 'anchor', de cette manière:

<anchor subtype="partStart" type="delimiter" ana="#voyage"/>
<p>Et il se rendit ensuite [...].</p>
<p>Enfin il arriva à Lyon [...]. </p>
<anchor subtype="partEnd" type="delimiter"/>

Dans cet exemple, l'utilisation de l'élément 'anchor', qui respecte l'arboréscence de l'imbrication, est équivalente à celle de l'élément 'div'. L'utilisation de l'élément 'anchor' permettrait de souligner la dimension sémantique de cet encodage, alors qu'un élément 'div' pourrait être réservé aux éléments structurels du texte.

En revanche, grâce à l'utilisation d'identifiants xml:id, on peut proposer plusieurs regroupements qui se croisent, de cette manière:

<anchor subtype="partStart" type="delimiter" ana="#voyage" xml:id="DiOb9999_1"/>
<p>Et il se rendit ensuite [...].</p>
<anchor subtype="partStart" type="delimiter" ana="#séjour" xml:id="DiOb9999_2"/>
<p>Enfin il arriva à Lyon [...]. </p>
<anchor subtype="partEnd" type="delimiter" corresp="#DiOb9999_1"/>
<p>Il y resta quinze jours aux cours desquels [...].</p>
<anchor subtype="partEnd" type="delimiter" corresp="#DiOb9999_2"/>

Cf. Guidelines 20.2 Boundary Marking with Empty Elements.

Cette méthode peut s'appliquer à toute autre type de balise.


2. on peut marquer des balises avec un identifiant et les relier ensuite avec un élément 'join':

<p xml:id="DiOb9999_1">Et il se rendit ensuite [...].</p>
<p xml:id="DiOb9999_2">Enfin il arriva à Lyon [...]. </p>
<p xml:id="DiOb9999_3">Il y resta quinze jours aux cours desquels [...].</p>
  <join target="#DiOb9999_1 #DiOb9999_2" result="list" ana="#voyage">
     <desc>Récit du voyage de ...</desc>
  </join>
 
  <join target="#DiOb9999_2 #DiOb9999_3" result="list" ana="#séjour">
     <desc>Récit du séjour de ... à Lyon </desc>
  </join>
 

Cf. Guidelines 16.7 Aggregation
L'avantage de cette méthode est qu'elle permet de regrouper des éléments qui seraient séparés l'un de l'autre par d'autres éléments intercalés mais qui ne font pas partie du récit. Elle est aussi plus explicite et lisible que celle évoquée au point 1 et généralement préférable.

Remplacement de l'élément 'seg'

La méthode d'encodage qui vient d'être proposée peut également être appliquée dans les cas d'encodage collaboratif lorsqu'on souhaite éviter l'élément 'seg' pour séparer l'encodage structurel de l'encodage sémantique, selon ce qui a été exposé ci-dessus.

<p><s xml:id="DiOb9999_1">Enfin il arriva à Lyon.</s><s xml:id="DiOb9999_2">Il y resta quinze jours aux cours desquels [...].</s> 
[...]</p>
 
<join target="#DiOb9999_1 #DiOb9999_2" result="list" ana="#séjour">
     <desc>Récit du séjour de ... à Lyon </desc>
  </join>
 
 

Les contenus sémantiques analysés pourront être stockés grâce à un élément 'join' se référant aux différentes portions de texte délimitées par le balisage de la structure de la phrase. L'élément 'join' qui explicite l'analyse pourra être inséré à proximité des éléments analysés ou dans un document séparé.

Ajout d'une typologie grâce à l'attribut @ana

Une fois qu'on a défini une portion de texte avec la granularité souhaitée (en utilisant les balises 'div', 'p', 's', 'seg' ou 'join'), on peut, si souhaité, préciser la typologie du passage de texte. Ceci permettra soit de retrouver tous les textes appartenant à une typologie spécifique, même s'ils relèvent de granularités différentes, soit de chercher toutes les entités nommées que contiennent certains types de portions de texte, afin de découvrir les relations qui subsistent entre elles dans le texte.

  • A cette fin, on utilisera l'attribut @ana (analyse), inséré dans les balises précédemment indiquées.
  • L'attribut @ana, qui appartient à la classe 'global.analytic' et au type des 'data.pointer', pointera vers un ou plusieurs objets abstrait (AbOb) indiquant quel est le sens du passage de texte en question
  • On introduira ainsi une sorte de classement des passages de texte et on associera donc, dans la BHP, les AbOb utilisés pour ce typage à la classe 'Objet qui type une portion de texte'(AbOb993)
  • Par ex. : <s>Comme dot 9 cent à mille francs de rente et <seg ana="AbOb876">36 à 40 mille francs d'avenir</seg>, en tout.</s> [AbOb876 = “Patrimoine”]
  • Comme l'attribut @ana admet plusieurs valeurs, séparées par espace, on peut rattacher un même passage de texte à plusieurs classes, en indiquant comme valeur de l'attribut @ana les clés de plusieurs objets abstraits tout en les séparant par un espace.
  • IMPORTANT : on relèvera toutefois que cette méthode est uniquement destinée à un classement générique; les AbOb utilisés correspondront donc à des concepts simples. On évitera des concepts composés qui cachent en réalité des informations, pour lesquelles on adoptera la méthode d'association des textes aux unités de connaissance exposée ci-dessous.

Grâce à ce codage par types génériques on pourra retrouver toutes les entités nommées réunies à l'intérieur d'un passage de texte selon une granularité données (par ex. p, s ou seg) tout en retenant uniquement les passages classé par un objet abstrait particulier.

Ne pas utiliser l'attribut @ana pour se référer aux identifiants des entités nommées ('name', 'rs') mais uniquement pour l'analyse sémantique de portions de textes. En règle générale, il est souhaitable d'utiliser l'attribut @ana pour typer les parties structurelles du texte en indiquant la typologie du passage retenu. En revanche, l'attribut @ref permet d'identifier les entités nommées.

Annotation de Contenus et Informations présents dans les textes

La méthode de classement des portions de texte par types génériques permet un découpage du texte en fonction d'une typologie mais elle n'est par très précise car le rôle respectif de chaque entité nommée présente dans le texte n'est pas indiqué, ni la date de l'événement en questions, ou de tout autre type de connaissance mentionnée par le texte. Si on souhaite annoter des unités de connaissance dans le textes, et établir ainsi un lien entre une portion du texte et l'unité de connaissance qui en ont été tirée, on trouvera sur cette page les indications concernant la méthode à suivre.

symogih_manuel/principes_pour_le_balisage_semantique.txt · Dernière modification : 08/07/2016 22:57 de francesco.beretta@ish-lyon.cnrs.fr