clusterRows()
Regroupement par ligne de base
Les fragments renvoyés par le moteur sont dispersés. Ils sont regroupés par ordonnée, avec une tolérance dérivée de la taille de corps médiane de la page.
Si vous construisez des pipelines documentaires ou du RAG, vous connaissez le problème : les tableaux se mélangent, les colonnes se chevauchent, et le contexte s'effondre avant même d'atteindre le modèle. The Better Inspector nettoie le document à la source, dans votre navigateur.
# Rapport annuel 2025 rapport-annuel.pdf · 12 pages ## Chiffres clés | Indicateur | 2025 | 2024 | |---|---:|---:| - Ouverture de trois bureaux - Lancement de la plateforme
[N.01/05]>Démo navigateur
Le fichier est décodé dans un worker : regroupement des fragments par ligne de base, détection de la gouttière, remise en ordre des colonnes, classement des niveaux de titre, puis émission Markdown. Aucun octet ne sort de l'onglet, il n'y a pas de serveur derrière ce formulaire.
Tout se passe ici : le fichier est lu en mémoire, converti, puis oublié dès que vous quittez la page. Aucun envoi, aucun compte, aucune trace côté serveur, puisqu'il n'y a pas de serveur.
[N.02/05]>Économie de jetons
Nourrir un modèle avec un PDF brut est un cauchemar : il le rend page par page en image, ou en tire un texte où les colonnes s'entrelacent et les en-têtes se répètent. Vous payez des jetons pour de la mise en forme, et le modèle lit un document qu'il comprend mal. Nettoyer à la source règle les deux problèmes d'un coup.
La démonstration ci-dessus affiche le coût en jetons de votre propre document, et son coût par page. Un PDF envoyé tel quel est rendu page par page en image, et une image coûte bien plus qu'une page de texte : le rapport exact dépend de votre modèle, comparez avec vos propres tarifs. Le compte retenu est l'approximation usuelle d'environ quatre caractères par jeton.
[N.03/05]>Capacités
Il n'y a pas de modèle, pas de service, pas de dépendance en dehors du lecteur de format. Six fonctions font le travail, et chaque carte porte le nom de celle qui l'exécute dans le fichier de cette page.
clusterRows()
Les fragments renvoyés par le moteur sont dispersés. Ils sont regroupés par ordonnée, avec une tolérance dérivée de la taille de corps médiane de la page.
findGutter()
La gouttière est l'abscisse centrale que le moins de rangées traversent d'un seul tenant, et qui court sur au moins 45 % de la hauteur, ce qui la distingue d'un simple écart entre colonnes d'un tableau.
orderLines()
Chaque rangée est scindée à la gouttière. Colonne de gauche puis colonne de droite ; une ligne pleine largeur (titre, résumé, figure) clôt la bande et sépare deux blocs à deux colonnes.
sizeLevels()
Les seuils absolus échouent : un article scientifique titre à 1,2× le corps, un rapport à 2×. On classe donc les tailles réellement présentes sur la page, plus une heuristique pour les intertitres numérotés ou en capitales.
segments()
Deux rangées consécutives dont les segments s'alignent à moins de dix points près forment un tableau. Il ressort en syntaxe pipe, en-tête compris.
classify()
Densité de texte et opérateurs d'image par page donnent quatre classes : texte natif, scanné, image ou mixte. Le texte pivoté (tampons arXiv, filigranes de marge) est écarté avant tout traitement.
[N.04/05]>Architecture
Le document n'est lu qu'une fois. Chaque étape a un rôle étroit et porte le nom de la fonction qui l'exécute dans le fichier de cette page, que vous pouvez lire.
Lu en mémoire par la page. Aucune requête réseau n'est émise à partir d'ici.
Titres, listes, tableaux en syntaxe pipe, césures recollées. Le compte de jetons est calculé sur le résultat.
pdf.js décode le format dans un worker ; le reste
(regroupement, colonnes, titres, tableaux) est écrit à la main dans cette page.
[N.05/05]>Limites
Un outil qui ne dit pas où il s'arrête vous le fait découvrir au mauvais moment. Voici les bornes, toutes lisibles dans le code de cette page.
Rien à installer, rien à configurer, aucun compte. Déposez un document, le Markdown apparaît.
Le convertisseur tient dans le fichier de cette page. Aucune minification, aucun paquet : le code que vous lisez est celui qui tourne.
[ accès ]
La conversion se fait toujours dans votre navigateur : le PDF ne part jamais. Le compte sert à retrouver le Markdown produit d'une session à l'autre.