L'économe d'Ockham

faire le vide en côtoyant le néant

mercredi 25 février 2026

Je vous présente PLAYA-PDF (et PAVÉS)

Si vous voulez fouiller dans les entrailles d’un document PDF pour en extraire des metadonnées, des images, et même du texte, j’ai des superbes logiciels libres pour vous: PLAYA-PDF et PAVÉS. Si vous voulez savoir comment je suis arrivé là, continuez à lire. Et si vous avez besoin d’un consultant pour vos besoins d’intelligence documentaire je suis bien sûr disponible pour des contrats de toute sorte!

Une jeune fille étourdie par un brouillard de papiers arborant le logo PDF

«Vous n’êtes qu’un paquet d’objets indirects!»

Comme vous savez peut-être (ou pas), je suis chercheur en linguistique informatique de formation et de métier. En 2021, fraîchement élu conseiller municipal dans une ville du grand St-Jérôme que je ne nommerai pas, j’ai quitté mon poste de scientifique principal chez une compagnie (que je ne nommerai pas non plus), maintenant division de Microsoft, car il était impossible pour moi de servir deux maîtres travailler à temps plein à Montréal tout étant un élu efficace et à l’écoute. La chose municipale me semblait aussi, à l’époque, bien plus intéressante que le raffinement des modèles d’apprentissage automatique pour la compréhension du langage naturel.

Entre-temps, il s’est passé des choses…

Un effet secondaire de ce changement de carrière plus ou moins bien avisé est que je suis devenu (en tout humilité) expert en analyse et manipulation des fichiers PDF, et ce, de la manière habituelle des informaticiens de mon genre: j’ai parti un projet de logiciel libre.

Pourquoi?

Lorsqu’on regarde les défis de gestion des documents dans une ville ou autre organisme, on se rend très vite compte que malgré les grands efforts des promoteurs de ODP, OOXML, HTML et autres formats universels, en fin de compte, le PDF, c’est la lingua franca de tous les échanges documentaires. C’est la triste conséquence de la domination du bureaucratique par nul autre que Microsoft, dont les logiciels font exprès de multiplier les incompatibilités non seulement avec d’autres produits (libres ou pas), mais ne sont souvent même pas compatibles entre eux-mêmes.

Comment?

J’avais des critères pour l’outil que je voulais utiliser, qui ne correspondaient pas à l’état actuel des logiciels disponibles:

  1. Licence libre et permissive (du genre BSD, MIT).
  2. Écrit en Python et portable entre différentes plateformes.
  3. Interface conviviale pour le programmeur.
  4. Accès direct aux structures interne du PDF, avec la capacité d’extraire non seulement du texte mais les éléments de mise en page et les metadonnées.
  5. Rapide et efficiente, autant que possible (c’est un peu en conflit avec #2 mais bon).

Le logiciel qui se rapproche le plus de ces critères à l’époque était pdfplumber, un très bon logithèque qui satisfait néanmoins aux critères 1, 2 et 3! J’y ai même contribué un module pour l’extraction des arborescences de structure logique. Par contre, l’efficacité n’est pas trop au rendez-vous, surtout parce que pdfplumber, comme d’autres projets populaires dont sa logithèque sous-jacente pdfminer.six, doit analyser chaque page au complet et construire toutes les structures de données avant de retourner des informations demandées.

De paresse et de parallélisme

C’est surtout ça l’innovation de PLAYA-PDF: il est «paresseux», ne traitant que les informations nécessaires pour extraire l’information que vous désirez. Si vous, par contre, vous êtes paresseux·se, il possède aussi un interface qui peut convertir les metadonnées d’un PDF en JSON, et ce, très rapidement:

with playa.open(path) as pdf:
    json.dumps(playa.asobj(pdf))

L’autre élément clé, PLAYA-PDF prend en charge plusieurs cœurs de processeur en parallèle, et ce, de manière très conviviale:

with playa.open(path, max_workers=4) as pdf:
    texts = list(pdf.pages.map(playa.Page.extract_text))

Par-dessus la PLAYA, les PAVÉS!

Parce que les objectifs de PLAYA-PDF sont surtout l’efficacité et l’absence de dépendances sur d’autres logiciels, il ne prend pas en charge des tâches de plus haut niveau, nécessitant de l’imagerie, des heuristiques ou des modèles d’apprentissage automatique.

Pour cette raison je suis aussi en train de construire PAVÉS qui prendra de plus en plus en charge:

  • L’analyse structurelle et textuelle des PDF, dont le traitement des tableaux et l’extraction d’unités logiques de texte.
  • La visualisation des objets dans un PDF ainsi que la conversion des pages en images.

Ce deuxième logithèque est encore en chantier mais sert déjà à faire l’analyse nécessaire pour alimenter mes projets tels que ZONALDA et SÈRAFIM.

Conclusion

Si vous faites partie du petit nombre de gens auxquels ça intéresse je vous invite à l’essayer! J’ai publié entre autres de la documentation et quelques carnets Jupyter qui démontrent la fonctionnalité.

Vous pouvez bien sûr aussi contribuer au développement sur GitHub (notez qu’il se peut que je le déplace bientôt vers Codeberg ou autre hébergement indépendant et au-dehors des États-Unis, mais il restera toujours disponible sur GitHub).