Skip to content

Annotation de PDF

Annotez des PDF dans Potato avec le type d'affichage pdf, avec surlignage de spans, boîtes englobantes sur la page, liens entre pages et OCR pour les fichiers numérisés.

L'affichage pdf rend un PDF dans le navigateur avec PDF.js et place la surface d'annotation sur la page rendue plutôt que sur du texte extrait au préalable. La personne qui annote voit le document réel, avec ses colonnes, ses tableaux, ses figures et ses sauts de page intacts, et l'étiquette sur place. L'affichage prend une seule clé obligatoire, le champ qui contient le chemin ou l'URL du PDF, et tout le reste est une option d'affichage.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        view_mode: scroll
        max_height: 760
        zoom: page-width

view_mode prend scroll, paginated ou side-by-side. Le défilement continu empile toutes les pages dans un même conteneur, ce qui compte lorsqu'une annotation doit franchir un saut de page. La vue paginée affiche une page à la fois avec des commandes de navigation et convient aux documents longs, traités page par page.

Trois modes d'annotation

annotation_mode décide de ce que la personne qui annote peut tracer, et c'est l'option qui change la tâche elle-même, pas son apparence. La valeur par défaut est span.

ModeCe que fait la personne qui annoteAncré sur
spanSélectionne du texte et lui applique une étiquetteLa couche de texte de PDF.js
bounding_boxTrace une boîte n'importe où sur la pageLes coordonnées de la page
linkPose des ancres, puis les relieSpans de texte et régions de page

Le mode span suppose que le PDF porte une couche de texte, ce qui est le cas de tout PDF produit par un traitement de texte ou un système de composition, et ne l'est pas d'une numérisation. Le mode boîte englobante ne le suppose pas, si bien qu'une page numérisée peut tout de même être étiquetée par région, sans la moindre extraction de texte.

Comme l'affichage pdf ancre les spans via la couche de texte de PDF.js et non via le conteneur .text-content qu'utilisent les autres affichages, il n'accepte pas l'indicateur span_target. L'annotation de spans fonctionne quand même, par la couche de texte propre au PDF.

Liens entre pages

Le mode lien sert aux relations qui traversent les pages, par exemple une affirmation en page 2 qui s'appuie sur une figure en page 9. La personne qui annote pose d'abord les ancres, puis trace des liens typés entre elles, et Potato enregistre les ancres et les liens sous des noms de schéma distincts.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      label: "Document"
      display_options:
        annotation_mode: link
        view_mode: scroll
        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
            color: "#dc2626"
            allowed_source_labels: [claim]
            allowed_target_labels: [figure]

allowed_source_labels et allowed_target_labels restreignent les ancres qu'un type de lien peut relier, ce qui transforme une consigne en règle appliquée par l'interface au lieu d'une règle que la personne qui annote doit retenir. Un lien refers_to configuré comme ci-dessus ne peut partir que d'un claim et n'aboutir qu'à un figure, donc un lien tracé d'une figure vers une affirmation est refusé. Mettez directed: false pour une relation symétrique comme same_as.

Les ancres sont de deux sortes et chacune se désactive séparément. enable_text_anchors autorise le surlignage d'un span de texte, et enable_region_anchors autorise le tracé d'une boîte de région, ce dont une figure ou un tableau a besoin. Un exemple complet et détaillé est livré en amont dans examples/advanced/pdf-link-scroll/.

Documents numérisés et OCR

ocr est désactivé par défaut, et Potato ne lit cette option qu'en mode lien. Lorsqu'elle est définie, les mots sont extraits côté serveur et servent à construire une couche de texte côté client, de sorte qu'une numérisation sans texte incorporé peut malgré tout porter des ancres de texte. L'option prend false, true ou auto, et Potato rejette toute autre valeur.

yaml
instance_display:
  fields:
    - key: pdf
      type: pdf
      display_options:
        annotation_mode: link
        ocr: auto
        ocr_dpi: 200
        ocr_lang: eng

Les trois réglages diffèrent par le moment où la passe s'exécute. false n'utilise que la couche de texte incorporée, true exécute toujours l'OCR, et auto ne se rabat sur l'OCR que lorsque la couche de texte incorporée revient vide. Préférez auto sur un corpus mixte, car l'OCR est lent et exige que Tesseract soit installé. ocr_dpi contrôle la résolution à laquelle chaque page est rastérisée avant lecture par l'OCR, et l'augmenter coûte du temps sur chaque page. ocr_lang prend un code de langue Tesseract et vaut eng par défaut.

Options d'affichage

OptionPar défautEffet
view_modescrollscroll, paginated ou side-by-side
max_height700Hauteur du conteneur en pixels
max_widthaucuneLargeur du conteneur
text_layertrueActive la sélection de texte
show_page_controlstrueCommandes de navigation entre pages
initial_page1Page affichée en premier
zoomautoauto, page-fit, page-width ou un pourcentage
annotation_modespanspan, bounding_box ou link
bbox_min_size10Plus petite boîte acceptée, en pixels
bbox_colorsaucuneCouleurs de boîte par étiquette
show_bbox_labelstrueDessine les étiquettes sur les boîtes
thumbnail_sidebartrueMiniatures de pages en vue paginée
enable_text_anchorstrueSpans de texte utilisables comme ancres de lien
enable_region_anchorstrueBoîtes de région utilisables comme ancres de lien
anchor_schemapdf_anchorsSchéma enregistré sur les ancres
link_schemapdf_linksSchéma enregistré sur les liens
ocrfalsefalse, true ou auto
ocr_dpi200Résolution de rendu pour l'OCR
ocr_langengCode de langue Tesseract

Fichiers Word et Markdown

Un fichier DOCX ou Markdown passe plutôt par l'affichage document, qui conserve la structure de titres et de paragraphes du document et accepte, lui, span_target. Il lit annotation_mode avec span ou bounding_box, et show_outline construit une table des matières à partir des titres du corps. Potato fait passer le balisage rendu par une liste d'autorisation avant qu'il n'atteigne la personne qui annote, si bien qu'un champ du corpus porteur d'une balise exécutable est retiré plutôt qu'exécuté.

yaml
instance_display:
  fields:
    - key: report
      type: document
      label: "Report"
      display_options:
        show_outline: true
        max_height: 600

Pour aller plus loin