Skip to content

Comment annoter des documents et des PDF

Annotez contrats, rapports et articles en tant que documents plutôt qu'en texte aplati, en gardant la mise en page, les numéros de page et les renvois d'une page à l'autre.

Annotez un document sur ses pages rendues plutôt que sur le texte qui en est extrait, parce que la mise en page porte un sens que l'extraction jette et parce qu'un relecteur doit retrouver l'étiquette sur la page. Aplatir un contrat en une chaîne de caractères fait perdre le numéro de page, l'ordre des colonnes, la structure du tableau et la distinction entre une note de bas de page et le corps du texte.

L'annotation de documents est le cas où le montage habituel d'annotation de texte échoue. Un PDF est une description de marques sur des pages et non une suite de caractères : deux extracteurs différents vous rendront donc deux chaînes différentes à partir du même fichier. Les pages à plusieurs colonnes s'entrelacent, les en-têtes et pieds de page surgissent au milieu du flux, et les tableaux deviennent des plages d'espaces. Celui qui étiquette cette chaîne étiquette un artefact de l'extracteur, et le relecteur qui ouvre ensuite l'original ne peut pas toujours dire à quel passage un empan renvoyait.

Position, numéro de page et structure des renvois

Trois propriétés d'un document survivent sur la page et non dans son texte extrait. La position indique au relecteur si une clause est un titre, une note de bas de page ou du corps de texte, et l'extraction réduit les trois à la même suite indifférenciée de caractères. Le numéro de page est ce par quoi tout lecteur ultérieur citera le passage, et il n'existe que tant que les pages existent. La structure des renvois enregistre ce qu'un passage désigne, ce qui compte chaque fois qu'une affirmation sur une page repose sur un tableau situé neuf pages plus loin.

La troisième propriété est celle qui force le plus souvent un changement d'outillage. La structure des renvois à l'intérieur d'un document est une relation entre deux emplacements, et un outil qui modélise un document comme une seule chaîne plate n'a nulle part où mettre le second emplacement. La revue juridique, la vérification d'affirmations scientifiques et l'analyse de rapports financiers tiennent toutes à cette relation.

Trois types d'ancrage

Une annotation sur un document s'ancre de l'une des trois manières suivantes, et le choix découle de la question plutôt que de la préférence.

  • Les empans de texte s'ancrent sur les mots sélectionnés et conviennent aux questions de formulation. Un empan exige que le document porte une couche de texte, que les PDF nativement numériques possèdent et que les numérisations n'ont pas.
  • Les cadres de région s'ancrent sur des coordonnées de page et conviennent aux figures, tableaux, tampons, signatures et à tout ce qu'une couche de texte n'a jamais capté. Ils fonctionnent sur une numérisation sans aucune extraction de texte.
  • Les liens joignent deux ancrages et conviennent à la structure des renvois. Un lien enregistre une relation typée, éventuellement orientée, entre deux endroits du document.

Mélanger les types d'ancrage dans une même tâche est normal. Une tâche de vérification d'affirmations marque les affirmations comme empans de texte, les tableaux comme cadres de région, et les joint par des liens.

La configuration dans Potato

L'affichage pdf de Potato rend le fichier avec PDF.js et place la surface d'annotation sur la page rendue. L'option annotation_mode sélectionne le type d'ancrage et accepte span, bounding_box ou link. Le mode lien est celui qui répond à la question des renvois, et il enregistre ancrages et liens sous des noms de schéma distincts pour que les deux sortent de l'export en restant distinguables.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        zoom: page-width
        enable_text_anchors: true
        enable_region_anchors: true
        anchor_schema: pdf_anchors
        link_schema: pdf_links
        anchor_labels:
          - name: claim
            color: "#dc2626"
          - name: figure
            color: "#2563eb"
        link_types:
          - name: refers_to
            directed: true
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]

view_mode: scroll empile les pages dans un seul conteneur, si bien qu'un lien entre la page 2 et la page 9 peut être tracé et vu comme un arc unique. L'alternative paginée montre une page à la fois, ce qui se lit mieux sur un document long mais masque l'extrémité lointaine d'un lien inter-pages pendant que l'annotateur le trace.

allowed_source_labels et allowed_target_labels sont ce qui transforme une consigne en quelque chose que l'interface impose. Avec la configuration ci-dessus, un lien refers_to ne peut partir que d'une affirmation et n'aboutir qu'à une figure, si bien qu'un annotateur ne peut pas enregistrer la relation à l'envers. Les consignes qui ne vivent que dans un document sont suivies de façon inégale, et une contrainte appliquée par l'outil ne coûte rien à faire respecter.

Un fichier Word ou Markdown utilise plutôt l'affichage document, qui préserve la structure des titres et des paragraphes et accepte span_target, de sorte qu'un schéma d'empans peut le viser directement.

Documents numérisés

Une numérisation ne porte pas de couche de texte : les ancrages de texte n'ont donc rien à quoi s'accrocher. Deux options existent et elles conviennent à des corpus différents. Annoter par région ne demande aucun texte et fonctionne immédiatement. Activer l'OCR construit une couche de texte côté serveur et rend les ancrages de texte possibles, au prix d'une passe lente et d'une dépendance à Tesseract.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      display_options:
        annotation_mode: link
        ocr: auto

auto ne lance l'OCR que lorsque la couche de texte intégrée revient vide, et c'est le réglage à retenir pour un corpus qui mêle fichiers nativement numériques et numérisations. Potato ne lit l'option ocr qu'en mode lien.

La sortie de l'OCR est imparfaite, et une annotation ancrée à un mot mal reconnu hérite de l'erreur. Sur un corpus où la qualité de reconnaissance est mauvaise, les ancrages de région donnent une trace plus durable que les ancrages de texte, parce qu'un cadre tracé autour d'un passage reste juste quels que soient les caractères lus en dessous.

Vérifier une étiquette sur la source

Chaque annotation revient en portant la page sur laquelle elle se trouve, et c'est ce qui rend l'étiquette vérifiable sur la source. Un relecteur à qui l'on donne un numéro de page et une région peut ouvrir l'original et confirmer le jugement. Un relecteur à qui l'on donne un décalage de caractères dans une chaîne concaténée ne le peut généralement pas, car reproduire le décalage suppose de reproduire exactement l'extracteur et la version qui l'ont produit.

L'approche coûte plus qu'elle ne rapporte sur un corpus de documents courts, à une seule colonne, nativement numériques et sans structure de renvois, où l'extraction est fiable et où le numéro de page ne porte rien. La simple annotation d'empans sur du texte extrait est plus simple là, et donne la même réponse.

Pour aller plus loin