À propos du projet
AksharaMD est un CLI et une bibliothèque Python pour évaluer la qualité de conversion d'un fichier source en Markdown adapté à l'ingestion par LLM. Plutôt que de promettre une précision moyenne, il produit un verdict de préparation par document pour la sortie spécifique de l'analyseur que vous fournissez.
Le flux principal prend deux entrées : le document source original (par exemple un PDF ou DOCX) et le Markdown produit par votre analyseur. Il renvoie ensuite un score de préparation IA de 0 à 100 avec des bandes de qualité (HIGH à 85 ou plus, OK à 70, RISKY à 50, POOR en dessous de 50), des balises de confiance d'extraction par bloc (EXTRACTED, INFERRED, AMBIGUOUS), des codes d'avertissement nommés tels que OCR_REQUIRED, LOW_TEXT_DENSITY, GLYPH_ARTIFACTS, REPEATED_CONTENT, W_MULTICOLUMN_ORDER, W_TABLE_MISSING, W_ENCODING_ARTIFACTS et OCR_HALLUCINATION, et une porte d'évaluation optionnelle basée sur la source qui vérifie si les littéraux déclarés (dates, identifiants, montants en devise, entités nommées) survivent dans le Markdown, produisant un verdict ACCEPT ou REJECT.
Le projet est explicitement indépendant de l'analyseur et liste MarkItDown, Docling, marker, MinerU, LlamaParse et PyMuPDF4LLM comme analyseurs dont la sortie peut être évaluée, ainsi que tout analyseur interne émettant du Markdown. Un analyseur de référence intégré est également inclus pour les équipes sans analyseur préféré, accessible via la sous-commande compile ; le README souligne que cet analyseur de référence est une commodité de secours plutôt que le produit lui-même.
Le README est exceptionnellement franc sur les limites. Il indique que la préparation est une heuristique non calibrée, pas une probabilité de correction, et qu'un score élevé signifie seulement que peu de pénalités modélisées ont été appliquées. Il décline explicitement toute garantie sur la précision de récupération, la correction de la réponse finale, la correction des citations, le découpage optimal pour un modèle d'embedding donné et la dilution d'embedding. Les chiffres de référence historiques (comparaisons de jetons de sortie, réduction de bruit, débit par rapport à MarkItDown et Docling) sont attribués à l'analyseur de référence intégré à la version 0.3.3, pas au score de préparation, et le README note qu'ils ne sont pas automatiquement transférables aux versions ultérieures.
Le traitement s'exécute localement. L'installation de base ne fait aucun appel réseau pour les fichiers locaux ; l'accès réseau se produit uniquement pour les sources distantes telles que les URL HTTP/HTTPS ou S3, ou lorsque les backends ML optionnels téléchargent les poids du modèle lors de la première utilisation. Les documents ne sont pas envoyés à un service exploité par AksharaMD.
L'installation se fait via pip et nécessite Python 3.11 ou plus. L'installation de base couvre les PDF natifs, DOCX, XLSX, PPTX, HTML, EPUB, e-mail, archives, images et code dans plus de 40 catégories de documents et 118 extensions enregistrées. Des extras optionnels ajoutent l'OCR (Tesseract), la reconstruction de tableaux basée sur la vision (Marker), l'extraction mathématique (pix2tex), la transcription audio (Whisper) et l'entrée S3. Un extra complet installe tout, au prix d'environ 5 à 6 Go de poids de modèle lors de la première exécution. Sans les extras pertinents, les pages scannées émettent un avertissement OCR_REQUIRED et un score de préparation faible au lieu de produire silencieusement une sortie médiocre.
Le CLI inclut des sous-commandes pour compile, assess, validate, benchmark, stats, show-manifest, corpus, mcp-config et formats. La commande assess est le flux d'évaluation principal ; compile exécute l'analyseur intégré de bout en bout et écrit document.md, document.json, manifest.json, validation.json et des fichiers de morceaux. Une option --min-readiness-score permet une utilisation comme porte d'ingestion CI/CD, et --json produit une sortie lisible par machine. La commande corpus compile un répertoire en morceaux limités par budget de jetons avec détection de quasi-doublons.
L'API Python expose une classe Compiler avec compile_to_string, compile, compile_to_multimodal (renvoyant un tableau de contenu compatible Anthropic avec des images base64 en ligne) et une méthode stream qui produit des blocs de manière incrémentale pour alimenter un index RAG ou un magasin vectoriel. Un objet de contexte de compilation expose des champs de manifeste tels que les comptes de jetons, le pourcentage de réduction de jetons, le score de préparation, le temps écoulé, les comptes de tableaux et de morceaux, ainsi que les erreurs et avertissements de validation.
Un serveur MCP est inclus pour les hôtes compatibles MCP tels que Claude Desktop et Cursor, configuré via la sous-commande mcp-config. Le projet est sous licence PolyForm Noncommercial.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.