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:
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.
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.
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 :
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.
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.
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.
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é.
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.
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.
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.