Envinorma / envinorma-data

Python library for manipulating enriched versions of regulation texts
MIT License
4 stars 0 forks source link

[OCR AP] Estimer la quantité de fichiers corrompus #101

Closed remidbs closed 3 years ago

remidbs commented 3 years ago

(cf mail Aurélie 24 juin, corrigé pour ce cas particulier) (pour corriger : utiliser l'argument force_ocr)

Méthodologie

Pour un PDF, il semble que pdfplumber permette de détecter les caractères endommagés.

from typing import Any, Dict, List, Optional

import pdfplumber
from pdfplumber.page import Page

def _extract_pages(filename: str) -> List[Page]:
    pdf = pdfplumber.open(filename)
    return pdf.pages

def _extract_characters(filename: str) -> List[Dict[str, Any]]:
    return [char for page in _extract_pages(filename) for char in page.chars]

def _is_corrupted(character: Dict[str, Any]) -> bool:
    return '(cid' in character['text']

def _corrupted_characters_rate(filename: str) -> float:
    chars = _extract_characters(filename)
    return sum([_is_corrupted(char) for char in chars]) / len(chars)

TODO

Résultats

Sur 900 APs:

Il y a donc assez peu d'AP corrompus. Pour les détecter, il faudrait passer sur tous les APs. Comme ça se produit seulement lorsqu'il y a déjà un OCR, il suffit de faire le check que dans ce cas (pour les futurs APs)

Liste des AP avec au moins un caractère corrompu

ID Taux de caractères corrompus
B/0/5c9b51898902432eadb4a03d41146430 0.00014773230905599054
M/7/189fe29b239e41e0a66121e9ca09fba7 0.00014777597162701344
N/0/8ec880276d9a4d2fa4742af60f22f7d0 0.00027925160569673273
E/d/920b65e5b9ae4c71a147c0286061dc6d 0.0005152647172484864
B/b/e088114e7c584dffbf4e87ef4744f2ab 0.0005879470847623714
N/a/fac07bc35731437d8bc2dd62a5797c3a 0.0009075586671852716
E/4/801259a3d4af43379cdd1724ccd84594 0.0012753294601105286
B/5/7212ca9d68ca45db912e3cb456b000c5 0.0015640273704789834
D/f/4b4aeda8876742c082f11f56e539962f 0.3141657010428737
H/f/0a64f35026134ccbb8fe5f879d779b6f 0.6515591710245981
D/c/caa50e98b8b34c0b95220facb091a97c 0.8423100552938767
M/5/7f6ee88a3d6349fa9ee81cd645a65b25 0.886668262326472
M/d/b4f549cc04cf4cd9a985b15653d9eb8d 0.8913177974840173
M/c/2fd4f3a5551d4cf3a70a5886750aeebc 0.8933747412008282
M/5/a806bcc0305d4599bb44ccc46e3f9725 0.9033911077618689
remidbs commented 3 years ago

cf https://github.com/Envinorma/exploration/pull/1