Outils pour utilisateurs

Outils du site


td_histoire_numerique:exercice_5

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
td_histoire_numerique:exercice_5 [2016/01/05 22:17]
Francesco Beretta [Transformation d'unités de connaissance en données]
td_histoire_numerique:exercice_5 [2016/01/05 23:12]
Francesco Beretta [Extraction des naissances]
Ligne 18: Ligne 18:
 ===== Encodage des unités de connaissance dans les textes ===== ===== Encodage des unités de connaissance dans les textes =====
  
-Une première démarche consiste à produire des données structurées en les encodant dans les textes eux-mêmes. Pour ce faire, il faut d'​abord définir dans la base de données les types d'unité ​de connaissance en créant les objets respectifs: Naissance (objet 11) et Enseignement (objet 1621). Les objets participent aux unités de connaissance en ayant un rôle spécifique. Pour la naissance, on aura la personne qui naît (définier ​par le type de rôle '​naître',​ correspondant à l'​objet 23 de la base de données, alors que le lieu de naissance est associé par le type de rôle '​localiser',​ correspondant à l'​objet 22). Pour ce qui est de l'enseignementil est associé aux rôles qui définissent respectivement la personne qui enseigne (objet 1624), la matière enseignée (objet 1622), l'​institution d'​enseignement (objet 10) et la qualificaiton de l'​enseignant (objet 1623). ​+Une première démarche consiste à produire des données structurées en les encodant dans les textes eux-mêmes. Pour ce faire, il faut d'​abord définir dans la base de données les types d'unités ​de connaissance ​qu'on souhaite encoder ​en créant les objets respectifs: Naissance (objet 11) et Enseignement (objet 1621). Les objets///​endurants// ​participent aux unités de connaissance///​perdurants// ​en ayant un rôle spécifique. Pour la naissance, on aura la personne qui naît (définie ​par le type de rôle '​naître',​ correspondant à l'​objet 23 de la base de données, alors que le lieu de naissance est associé par le type de rôle '​localiser',​ correspondant à l'​objet 22). Pour ce qui concerne ​l'unité de connaissance de type Enseignementelle est associé aux rôles qui définissent respectivement la personne qui enseigne (objet 1624), la matière enseignée (objet 1622), l'​institution d'​enseignement (objet 10) et la qualificaiton de l'​enseignant (objet 1623). ​
  
 +A partir de la définition de ces objets, munis de leurs identifiants respectifs, on peut coder ainsi une naissance:
 +<​code>​
 +1  {ud0}
 +2  {eud}Christopher Grienberger{/​eud}
 +3  {ud0_9}{in0_11}{en1620_23}Christopher Grienberger{/​en} (aussi écrit Christopher Gruemberger,​ ou encore Grinberg, Bamberger, ou Gamberger, voire Panberger), né le {dat15510702_du}2 juillet 1551{/dat} à {en0li_22}Hall dans le Tyrol{/​en}{/​in},​ et mort le 11 mars 1636 à Rome, est prêtre jésuite autrichien, mathématicien et professeur au Collège romain. Un cratère lunaire est nommé en son honneur Gruemberger.{/​ud}
 +4  ...
 +5  {/ud}
 +</​code>​
  
 +A la ligne 1, une balise de type "​unité documentaire"​ ouvre la portion de texte correspondante à la notice biographique,​ qui termine à la ligne 5. A la ligne 2, l'​entête de l'​unité documentaire à la fonction de titre de la portion de texte qui suit.
  
 +A la ligne 3, une nouvelle balise "​unité documentaire"​ est ouverte. Elle est identifiée par l'​objet 9 de la base de donnée, un objet abstrait intitulé "​Résumé de la notice"​ qui indique le contenu du segment. Il est ainsi possible de créer un typologie des unités documentaires.
 +A cette même ligne comment l'​unité de connaissance de type Naissance (objet 11), introduite par la balise {in0_11} dont le premier chiffre "​0"​ indique qu'il n'y a pas d'​objet correspondant précis à cette information dans la base de donnée et le deuxième, "​11"​ que cette unité de connaissance est de type "​Naissance"​.
 +Quant aux rôles, ils sont encodés dans les balises qui enveloppent les entités nommées:
 +  * {en1620_23} enveloppe l'​objet 1620 de la base de données, "​Grienberger,​ Christoph",​ dont le rôle est l'​objet 23: "​naître"​.
 +  * {en0li_22} enveloppe un objet qui n'a pas encore été créé dans la base de données (d'où l'​identifiant "​0"​) mais dont le rôle est défini par l'​objet 22: "​localiser"​.
  
 +De plus a été encodée la date: {dat15510702_du} exprimée au format de la norme ISO et dont le type est "date unique"​ (du).
  
 +
 +
 +===== Extraction de donnée structurées =====
 +
 +Grâce à cette méthode il est possible d'​encoder dans le texte tout type d'​unité de connaissance,​ tout en définissant préalablement les types dans la base de donnée afin de disposer des identifiants à utiliser pour le codage. Voici un {{:​td_histoire_numerique:​notices_wikipedia_annote.odt|exemple de document encodé}}. Selon la méthode décrite dans le [[td_histoire_numerique:​exercice_3#​transformation_des_textes_encodes_en_xml|troisième exercice]], le texte encodé doit être copié dans la base de données (dans ce cas il s'agit de l'​objet 3) et transformé avec la fonction appropriée
 +<code html>​SELECT vues.transformation_xml(3)</​code>​
 +qui produit le texte XML inséré dans le champs "​texte_xml"​ du même objet.
 +On peut ensuite extraire les données encodées grâce à une requête SQL/XPath appropriée. Nous illustrerons cette démarche à l'aide de deux exemples.
 +
 +==== Extraction de toutes les unités de connaissance ====
 +
 +Voici la requête qui permet d'​extraire toutes les unités de connaissance,​ de n'​importe quel type:
 +<code sql>
 +WITH tw1 AS
 +(
 +  SELECT UNNEST(xpath ('//​in',​texte_xml)) texte_xml
 +  FROM objets.objet
 +  WHERE pk_objet = 3
 +)
 +SELECT tw1.texte_xml,​
 +       ​(((xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer cle_type_information,​
 +       ​t1.nom type_information,​
 +       ​((xpath('/​in/​dat/​@when',​tw1.texte_xml))[1])::​text date,
 +       ​((xpath('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text acteur,
 +       ​t2.nom nom_acteur
 +FROM tw1
 +  JOIN vues.vm_objet_vue_de_base t1 ON t1.pk_objet = ( ( (xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer
 +  LEFT JOIN vues.vm_objet_vue_de_base t2 ON t2.pk_objet = ( ((xpath('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text)::​integer
 +</​code>​
 +
 +Et le résultat:
 +^Unité de connaissance^Clé du type d'​unité de connaissance^Type d'​unité de connaissance^Date^Clé de l'​acteur concerné^Nom de l'​acteur concerné^
 +|<in ana="​11"><​en ref="​1620"​ ana="​23">​Christopher Grienberger</​en>​ (aussi écrit Christopher Gruemberger,​ ou encore Grinberg, Bamberger, ou Gamberger, voire Panberger), né le <dat when="​15510702"​ type="​du">​2 juillet 1551</​dat>​ à <en type="​li"​ ana="​22">​Hall dans le Tyrol</​en></​in>​|11|Naissance|15510702|1620|Grienberger,​ Christoph|
 +|<in ana="​11"><​en ref="​1619"​ ana="​23">​Michael Maestlin</​en>​ (aussi appelé Mästlin, Möstlin, ou Moestlin), né le <dat when="​15500930"​ type="​du">​30 septembre 1550</​dat>​ à <en type="​li"​ ana="​22">​Göppingen en Bade-Wurtemberg</​en></​in>​|11|Naissance|15500930|1619|Maestlin,​ Michael|
 +|<in ana="​1621"><​dat when="​1580"​ type="​dd">​En 1580</​dat>,​ <en ref="​1619"​ ana="​1624">​il</​en>​ est devenu <​en><​en ref="​1625"​ ana="​1623">​professeur</​en>​ de <en ref="​15"​ ana="​1622">​mathématiques</​en></​en>​ à l'<​en ana="​10">​université de <en type="​li">​Heidelberg</​en></​en>​[jusqu'​en <dat when="​1583"​ type="​df">​1583</​dat>​]</​in>​|1621|Enseignement|1580|1619|Maestlin,​ Michael|
 +|<in ana="​1621"><​en ref="​1619"​ ana="​1624">​Il</​en>​ a enseigné ensuite à l'<​en ana="​10">​université de <en type="​li">​Tübingen</​en></​en>​ à partir de <dat when="​1583"​ type="​dd">​1583</​dat>,​ à l'âge de 47 ans</​in>​|1621|Enseignement|1583|1619|Maestlin,​ Michael|
 +|<in ana="​11"><​en ref="​17"​ ana="​23">​Nicolas-Claude Fabri de Peiresc</​en>​ (également orthographié de Peyresc), né le <dat when="​15801201"​ type="​du">​1er décembre 1580</​dat>​ à <en type="​li"​ ana="​22">​Belgentier</​en></​in>​|11|Naissance|15801201|17|Nicolas Claude Fabri de Peiresc|
 +
 +
 +==== Extraction des naissances ====
 +
 +La requête peut évidemment être adaptée au questionnement du chercheur. On peut ainsi, par exemple, sélectionner uniquement les enseignements:​
 +<code sql>
 +WITH tw1 AS
 +(
 +  SELECT UNNEST(xpath ('//​in',​texte_xml)) texte_xml
 +  FROM objets.objet
 +  WHERE pk_objet = 3
 +)
 +SELECT tw1.texte_xml,​
 +       ​(((xpath ('/​in[@ana=1621]/​@ana',​tw1.texte_xml))[1])::​text)::​integer cle_type_information,​
 +       ​t1.nom type_information,​
 +       ​array_to_string(xpath('/​in/​dat/​@when',​tw1.texte_xml),​ '​–'​) dates,
 +       ​array_to_string(xpath('/​in/​en[@ana=1624]/​@ref',​tw1.texte_xml),​ ','​) acteur,
 +       ​t2.nom nom_acteur,
 +       ​regexp_replace(array_to_string(xpath('/​in/​en[@ana=10]/​descendant-or-self::​*/​text()',​tw1.texte_xml),​ ' '), '​\s{1,​}',​ ' ', '​g'​ ) institution,​
 +       ​array_to_string(xpath('//​en[@ana=1622]/​descendant-or-self::​*/​text()',​tw1.texte_xml),​ ','​) matiere
 +
 +
 +FROM tw1
 +  JOIN vues.vm_objet_vue_de_base t1 ON t1.pk_objet = ( ( (xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer
 +  LEFT JOIN vues.vm_objet_vue_de_base t2 ON t2.pk_objet = ( ( (xpath ('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text)::​integer
 +WHERE (((xpath ('/​in[@ana=1621]/​@ana',​tw1.texte_xml))[1])::​text)::​integer = 1621
 +</​code>​
 +
 +Et le résultat:
 +^texte_xml^cle_type_information^type_information^dates^acteur^nom_acteur^institution^matière^
 +|<in ana="​1621"><​dat when="​1580"​ type="​dd">​En 1580</​dat>,​ <en ref="​1619"​ ana="​1624">​il</​en>​ est devenu <​en><​en ref="​1625"​ ana="​1623">​professeur</​en>​ de <en ref="​15"​ ana="​1622">​mathématiques</​en></​en>​ à l'<​en ana="​10">​université de <en type="​li">​Heidelberg</​en></​en>​[jusqu'​en <dat when="​1583"​ type="​df">​1583</​dat>​]</​in>​|1621|Enseignement|1580–1583|1619|Maestlin,​ Michael|université de Heidelberg|mathématiques|
 +|<in ana="​1621"><​en ref="​1619"​ ana="​1624">​Il</​en>​ a enseigné ensuite à l'<​en ana="​10">​université de <en type="​li">​Tübingen</​en></​en>​ à partir de <dat when="​1583"​ type="​dd">​1583</​dat>,​ à l'âge de 47 ans</​in>​|1621|Enseignement|1583|1619|Maestlin,​ Michael|université de Tübingen| |
 + 
td_histoire_numerique/exercice_5.txt · Dernière modification: 2016/03/03 10:26 par Francesco Beretta