Comment l'extraction de structure d'un PDF fonctionne-t-elle ? PDF balisé et détection des titres
9 min de lecture
Produire du Markdown à partir d'un PDF est en réalité un problème de déduction assez difficile. Car l'information « ceci est un titre » ou « ce paragraphe se lit après celui-là » est le plus souvent absente du PDF. Dans cet article, nous expliquons ce que font les convertisseurs, quels indices ils utilisent et pourquoi ils réussissent sur certains documents et échouent sur d'autres.
Ce que le PDF stocke, et ce qu'il ne stocke pas
Le contenu d'une page PDF se compose d'instructions de dessin :
BT
/F2 18 Tf % choisir une police de 18 points
72 720 Td % aller a la position
(Introduction) Tj % ecrire "Introduction"
ET
BT
/F1 11 Tf % choisir une police de 11 points
72 690 Td
(Le sujet traite dans cette etude...) Tj
ET
Ce qu'il y a dans ces instructions : quels caractères, avec quelle police, à quelle taille, à quelle coordonnée dessiner.
Ce qu'il n'y a pas : le fait que le mot « Introduction » soit un titre. Que le texte qui suit soit le paragraphe placé sous ce titre. Où le paragraphe se termine et où le suivant commence.
Un humain qui regarde la page comprend tout cela immédiatement — voir un mot de 18 points en gras, seul sur une ligne, signifie « titre ». Le convertisseur doit faire la même déduction.
Le PDF balisé : le cas sans déduction
Un PDF balisé (tagged) transporte, outre le contenu des pages, la structure sémantique du document. Un arbre de structure figure dans le fichier :
Document
├── H1 « Introduction »
│ └── P « Le sujet traité dans cette étude... »
├── H2 « Méthode »
│ ├── P « La recherche s'est déroulée en... »
│ └── L (liste)
│ ├── LI « Première étape »
│ └── LI « Deuxième étape »
└── Table
├── TR
│ ├── TH « Année »
│ └── TH « Valeur »
└── TR ...
Cet arbre est exactement l'information dont le Markdown a besoin. Produire du Markdown depuis un PDF balisé n'est pas une déduction mais une correspondance directe :
| Balise PDF | Markdown |
|---|---|
| H1, H2, H3 | #, ##, ### |
| P | Paragraphe |
| L / LI | Liste - |
| Table / TR / TD | Tableau Markdown |
| Link | [texte](url) |
| Figure |  |
Le résultat est spectaculairement meilleur qu'avec un PDF non balisé.
D'où viennent les PDF balisés ?
- Des PDF produits depuis Word avec l'option « Balises de structure du document » activée
- Des documents institutionnels préparés selon des exigences d'accessibilité
- Des documents conformes à la norme PDF/UA (Universal Accessibility)
D'où ils ne viennent pas :
- Des fichiers produits via « Imprimer au format PDF »
- Des sorties de la plupart des logiciels de mise en page (sans réglage particulier)
- Des documents scannés
- Des vieux PDF
Vous pouvez voir si votre document est balisé dans la fenêtre des propriétés de votre visionneuse PDF.
Le processus de déduction sur un PDF non balisé
En l'absence de balises, le convertisseur procède dans cet ordre.
1. Rassembler les fragments de texte
Le PDF stocke le texte par petits fragments. Parfois un mot, parfois quelques caractères, parfois un caractère isolé peut constituer une instruction de dessin distincte — en particulier dans les textes à interlettrage réglé.
Le convertisseur réunit les fragments situés sur la même ligne et proches les uns des autres pour former des mots et des lignes.
La difficulté : trouver les limites de mots. Le caractère espace n'est pas toujours écrit dans un PDF ; parfois le curseur est simplement décalé. Le convertisseur doit décider « il y a un espace ici » d'après la distance entre les fragments. Si le seuil est mal choisi, soit les mots se collent, soit un espace apparaît au milieu d'un mot.
2. Grouper les lignes en paragraphes
Des lignes successives appartiennent-elles au même paragraphe ? Les indices :
- La distance verticale : l'espacement entre les lignes est-il normal ou plus grand ?
- L'indentation de la première ligne : un nouveau paragraphe peut commencer par un retrait.
- La fin de la ligne précédente : si la ligne va jusqu'au bout de la largeur, elle continue ; si elle s'arrête tôt, c'est peut-être une fin de paragraphe.
- La ponctuation : une ligne courte terminée par un point signale une fin de paragraphe.
3. Déterminer l'ordre de lecture
C'est l'étape la plus difficile.
Dans un PDF non balisé, les fragments de texte sont stockés dans l'ordre de dessin, qui n'est pas forcément celui de la lecture visuelle. Un logiciel de mise en page a pu dessiner d'abord tous les titres, puis le texte courant.
Le convertisseur tente d'établir un ordre logique en observant les coordonnées des fragments. Sur une page à une colonne, c'est facile : de haut en bas, de gauche à droite.
Le problème commence avec les mises en page multicolonnes. Sur une page à deux colonnes, si vous ordonnez simplement les lignes de haut en bas, la première ligne de la colonne de gauche et celle de la colonne de droite se retrouvent côte à côte et les textes s'entremêlent :
« L'objectif de cette étude les résultats obtenus montrent que dans les échantillons examinés... »
Un mélange incohérent. Les bons convertisseurs effectuent une détection de colonnes : ils examinent la répartition horizontale des blocs de texte, repèrent les couloirs de blanc et séparent les colonnes. Mais c'est là aussi une estimation, qui se trompe sur les mises en page complexes.
4. La détection des titres
Le convertisseur évalue les indices suivants :
| Indice | Poids | |---|---| | Taille de police (plus grande que le corps) | Élevé | | Police en gras | Moyen | | Changement de famille de police | Moyen | | Brièveté de la ligne | Moyen | | Espace important au-dessus/en dessous | Moyen | | Motif de numérotation (1., 1.1.) | Élevé | | Écriture en capitales | Faible | | Position en haut de page | Faible |
Ces candidats sont ensuite répartis en niveaux : si le document comporte cinq tailles de titres différentes, la plus grande devient H1, la suivante H2, et ainsi de suite.
Erreurs typiques :
- Une phrase mise en gras pour l'accentuer est prise pour un titre.
- Un sous-titre en petits caractères est pris pour du texte courant.
- Si différents styles de titres ont été employés dans différentes sections du même document, les niveaux s'embrouillent.
- Les légendes de figures et de tableaux sont prises pour des titres.
5. La détection des listes
Les puces (•, -, ▪) et les numéros (1., a), i.) sont détectés. Le niveau d'indentation détermine les listes imbriquées.
Le problème : dans un PDF, la puce est parfois un objet de dessin distinct (et non du texte), parfois un caractère spécial, parfois un simple alignement visuel obtenu avec des espaces. Dans ce troisième cas, la détection devient impossible.
6. La détection des tableaux
L'une des structures les plus difficiles. Deux approches sont employées :
Fondée sur les filets : repérer les traits horizontaux et verticaux de la page pour reconstituer une grille. Fonctionne bien sur les tableaux à filets.
Fondée sur l'alignement : estimer les colonnes en observant l'alignement vertical des fragments de texte. C'est la seule voie pour les tableaux sans filets, mais elle est fragile — un paragraphe ordinaire peut parfois être pris pour un tableau.
Même une fois détecté, la syntaxe de tableau de Markdown est limitée : les cellules fusionnées, les tableaux imbriqués et la mise en forme multiligne dans une cellule ne peuvent pas être exprimés.
En-têtes, pieds de page et bruit
Des éléments se répètent en haut et en bas de chaque page : titre du document, nom de section, numéro de page, mention de copyright, date.
Ils font partie du contenu de la page et le convertisseur peut les prendre pour du contenu. Le résultat est une ligne de bruit qui revient tous les quelques paragraphes.
Les bons convertisseurs appliquent une heuristique : un texte qui se répète à la même position sur plusieurs pages est un en-tête ou un pied de page. Cette détection fonctionne généralement, mais elle échoue sur les numéros de page (puisqu'ils diffèrent d'une page à l'autre).
Le problème de l'encodage des polices
Sur certains PDF, l'extraction de texte donne des résultats étranges : caractères incohérents, lettres manquantes, langues mélangées.
La cause est le mécanisme d'encodage des polices du PDF. Dans un PDF, les caractères peuvent être stockés par leurs numéros de glyphes au sein de la police, et une table de correspondance (ToUnicode CMap) donnant leurs équivalents Unicode doit être présente.
Si cette table est absente ou défectueuse, le convertisseur ne peut pas traduire les numéros de glyphes en caractères corrects. La page s'affiche correctement à l'écran (car le dessin est juste) mais l'extraction de texte donne une sortie incohérente.
Sur les documents accentués, ce problème peut se manifester particulièrement sur des caractères comme é, à, ç ou œ.
Pourquoi certains PDF se convertissent bien et d'autres mal
Le facteur déterminant est la façon dont le PDF a été produit :
| Source | Qualité de conversion | Raison | |---|---|---| | Word (balisé) | Excellente | L'information de structure est dans le fichier | | Word (non balisé) | Bonne | Styles réguliers, une seule colonne | | LaTeX | Bonne à moyenne | Régulier mais non balisé | | Logiciel de mise en page (rapport) | Moyenne | Non balisé, mise en page complexe | | Logiciel de mise en page (brochure) | Mauvaise | Multicolonne, encadrés, mise en page libre | | Scanné + OCR | Faible | Couche de texte artificielle | | Scanné (sans OCR) | Impossible | Pas de texte |
En résumé
Produire du Markdown à partir d'un PDF consiste à extraire une structure sémantique d'instructions de dessin. Dans les PDF balisés, cette structure est déjà dans le fichier et la conversion se réduit à une correspondance directe — le résultat est presque irréprochable. Dans les PDF non balisés, le convertisseur doit tout deviner à partir d'indices visuels : regrouper les fragments de texte, déterminer l'ordre de lecture, déduire les niveaux de titres de la taille de police, détecter les tableaux à partir des alignements. Ces estimations réussissent sur les documents réguliers à une colonne et faiblissent sur les documents multicolonnes et très graphiques. Il est donc juste de considérer la conversion non comme une fin mais comme un point de départ, nécessitant un nettoyage manuel.
Questions fréquentes
Qu'est-ce qu'un PDF balisé (tagged) et comment le reconnaître ?
Un PDF balisé transporte, outre le contenu des pages, la structure sémantique du document : ceci est un titre, ceci un paragraphe, ceci une cellule de tableau, l'ordre de lecture est celui-ci. La fenêtre des propriétés du document des visionneuses PDF comporte généralement une ligne « PDF balisé : Oui/Non ». Les PDF produits depuis Word avec l'option « balises de structure du document » activée sont balisés.
Pourquoi l'ordre de lecture pose-t-il problème ?
Parce que dans un PDF non balisé, les fragments de texte sont stockés dans l'ordre où ils ont été dessinés sur la page, et cet ordre n'est pas forcément celui de la lecture visuelle. Un logiciel de mise en page a pu dessiner d'abord tous les titres, puis le texte courant. Le convertisseur doit alors deviner un ordre logique à partir des coordonnées des fragments, et cette estimation se trompe fréquemment sur les mises en page multicolonnes.
Sur quels indices repose la détection des titres ?
La taille de police est l'indice principal : les lignes nettement plus grandes que le texte courant sont candidates au statut de titre. Sont également évalués la graisse, un changement de famille de police, la brièveté de la ligne, l'espace laissé au-dessus et en dessous, la position sur la page et le motif de numérotation (1., 1.1., 1.1.1.). Aucun de ces indices n'est décisif ; c'est leur ensemble qui forme un calcul de probabilité.
Pourquoi certains PDF donnent-ils un excellent Markdown et d'autres un mauvais ?
Le facteur déterminant est la façon dont le PDF a été produit. Un rapport produit en version balisée depuis Word transporte l'information structurelle dans le fichier et la conversion est presque irréprochable. Une brochure issue d'un logiciel de mise en page, multicolonne et pleine d'encadrés, ne transporte aucune information structurelle et le convertisseur doit tout deviner à partir d'indices visuels.
Essayez dès maintenant avec PDF → Markdown.
Essayer PDF → Markdown