Preprocess
Fonctions de prétraitements des fichiers PDFs.
Convertir les fichiers PDF natifs en PDF/A
Utilise ocrmypdf sans appeler le moteur d'OCR.
process_files(df_meta, out_pdf_dir, redo=False, keep_pdfa=False, verbose=0)
Convertir les fichiers PDF natifs en PDF/A.
Parameters: |
|
---|
Returns: |
|
---|
Convertir un fichier PDF en PDF/A (archivable)
Utilise ocrmypdf.
NB: Certaines métadonnées du PDF sont perdues https://github.com/ocrmypdf/OCRmyPDF/issues/327.
convert_pdf_to_pdfa(fp_pdf_in, fp_pdf_out, verbose=0)
Convertir un PDF en PDF/A.
Utilise ocrmypdf sans appliquer d'OCR.
Parameters: |
|
---|
Returns: |
|
---|
Sources de données
Déterminer le type des fichiers PDF
Un fichier peut être considéré PDF natif ("texte") ou non ("image").
Le type est déterminé pour le fichier entier, sans rentrer dans les cas particuliers commme un PDF texte dans lequel une page numérisée a été insérée en tant qu'image. Actuellement, de tels fichiers sont probablement considérés comme des fichiers PDF non natifs ("image"), en se basant sur les métadonnées du fichier PDF.
guess_pdf_type(df_row)
Devine le type de PDF: natif ("texte") ou non ("image")
Parameters: |
|
---|
Returns: |
|
---|
process_files(df_meta)
Déterminer le type des fichiers PDF.
Un fichier PDF peut être natif ("texte") ou non ("image").
Parameters: |
|
---|
Returns: |
|
---|
Extrait le texte natif des fichiers PDF avec pdfminer.six
Nécessite d'installer pdfminer.six.
Non utilisé pour le moment, faute d'avoir identifié les bonnes valeurs des paramètres utilisés pour l'analyse du layout, mais pourrait être utile pour ré-analyser les arrêtés de certaines communes avec une mise en page compliquée.
extract_native_text_pdfminer(fp_pdf_in, fp_txt_out, page_beg, page_end)
Extrait le texte natif d'un PDF avec pdfminer.six.
Si le texte extrait par pdfminer.six n'est pas vide alors un fichier TXT est produit, sinon aucun fichier TXT n'est produit et un code d'erreur est renvoyé.
Les pages sont séparées par un "form feed" ("", "" en python).
Le texte est normalisé en forme NFC (NEW 2023-03-10, NFC plutôt que NFKC car ce dernier transforme "º" en "o").
Parameters: |
|
---|
Returns: |
|
---|
Extrait le texte natif des fichiers PDF avec pdftotext
https://github.com/jalan/pdftotext
Dépendances Windows (https://github.com/jalan/pdftotext#os-dependencies):
* Microsoft Visual C++ Build Tools: https://visualstudio.microsoft.com/fr/visual-cpp-build-tools/
* poppler ( conda install -c conda-forge poppler
)
extract_native_text_pdftotext(fp_pdf_in, fp_txt_out, page_beg, page_end)
Extrait le texte natif d'un PDF avec pdftotext.
Si le texte extrait par pdftotext n'est pas vide alors un fichier TXT est produit, sinon aucun fichier TXT n'est produit et un code d'erreur est renvoyé.
Les pages sont séparées par un "form feed" ("", "" en python).
Le texte est normalisé en forme NFC (NEW 2023-03-10, NFC plutôt que NFKC car ce dernier transforme "º" en "o").
Parameters: |
|
---|
Returns: |
|
---|
Extraire le texte natif des fichiers PDF
Le texte natif est extrait avec le wrapper python de l'utilitaire "pdftotext" de poppler.
Le texte natif représente: * pour les PDF natifs ("PDF texte"), l'intégralité du texte ; * pour les PDF non-natifs ("PDF image"), du texte extrait par OCR (de qualité variable) ou des fragments de texte issus d'ajout d'objets natifs, eg. tampon, accusé de réception.
Le texte est normalisé en forme NFC: https://docs.python.org/3/howto/unicode.html#comparing-strings.
extract_native_text(df_row, fp_pdf_in, fp_txt_out)
Extrait le texte natif d'un PDF.
Parameters: |
|
---|
Returns: |
|
---|
process_files(df_meta, out_dir_txt, redo=False)
Traiter un ensemble de fichiers PDF: convertir les PDF en PDF/A et extraire le texte.
Parameters: |
|
---|
Returns: |
|
---|
Extraire le texte de fichiers PDF par OCR
Utilise ocrmypdf.
extract_text_from_pdf_image(fp_pdf_in, fp_txt_out, fp_pdf_out, page_beg, page_end, redo_ocr=False, verbose=0)
Extraire le texte d'un PDF image et convertir le fichier en PDF/A.
Utilise ocrmypdf. On utilise "-l fra" pour améliorer la reconnaissance de: "à", "è", "ê", apostrophe, "l'", "œ", "ô" etc.
Parameters: |
|
---|
Returns: |
|
---|
Le texte des PDF non-natifs ("PDF image") est extrait avec ocrmypdf.
ocrmypdf produit un fichier PDF/A incluant une couche de texte extrait par OCR, et un fichier "sidecar" contenant le texte extrait par l'OCR uniquement.
Le fichier PDF/A est effacé, sauf mention contraire explicite par l'option "keep_pdfa".
preprocess_pdf_file(df_row, fp_pdf_in, fp_pdf_out, fp_txt_out, verbose=0)
Extraire le texte par OCR et générer des fichiers PDF/A et txt.
Le fichier PDF est OCRisé avec ocrmypdf, qui crée un PDF/A et un fichier texte "sidecar".
La version actuelle est: ocrmypdf 14.0.3 / Tesseract OCR-PDF 5.2.0 (+ pikepdf 5.6.1).
Parameters: |
|
---|
Returns: |
|
---|
process_files(df_meta, out_pdf_dir, out_txt_dir, redo=False, keep_pdfa=False, verbose=0)
Traiter un ensemble de fichiers PDF: convertir les PDF en PDF/A et extraire le texte.
Parameters: |
|
---|
Returns: |
|
---|
Filtrer les fichiers PDF hors du champ de la base de données
Annexes des arrêtés: plan de périmètre de sécurité, rapports d'expertise etc.
TODO filtrer automatiquement à partir du texte
process_files(df_meta, df_txts)
Traiter un ensemble d'arrêtés: repérer des éléments de structure des textes.
Parameters: |
|
---|
Returns: |
|
---|
Indexer un ensemble de fichiers PDF
Calcule le hachage de chaque fichier et crée une copie du fichier dans un dossier de travail, en faisant précéder le nom du fichier par son hachage.
index_folder(in_dir, out_dir, index_csv, new_csv, recursive=True, digest='blake2b', verbose=False)
Indexer un dossier: hacher et copier les fichiers PDF qu'il contient.
Les copies sont renommées en préfixant le nom de chaque fichier par le hachage, afin d'éviter les conflits de noms de fichiers issus de dossiers différents.
Parameters: |
|
---|
Extraire les métadonnées des fichiers PDF
Ce module utilise pikepdf.
get_pdf_info(fp_pdf, digest='blake2b', verbose=False)
Extraire les informations (dont métadonnées) d'un fichier PDF.
Utilise actuellement pikepdf.
Parameters: |
|
---|
Returns: |
|
---|
get_pdf_info_pikepdf(fp_pdf_in, verbose=False)
Renvoie les infos du PDF en utilisant pikepdf.
Les infos incluent un sous-ensemble des métadonnées du PDF.
Parameters: |
|
---|
Returns: |
|
---|
Traiter les métadonnées des fichiers PDF
Les traitements permettent de: * détecter les fichiers doublons, * déterminer si le PDF est du texte ou image, * déterminer si le PDF contient des tampons de télétransmission en haut des pages, * déterminer si le PDF contient une dernière page qui est l'accusé de réception de la télétransmission.
La liste des tiers de transmission agréés pour @ctes est sur https://www.collectivites-locales.gouv.fr/sites/default/files/migration/2019_09_13_liste_operateurs_transmission_0.pdf .
guess_badocr(df_meta)
Détermine si le fichier contient une couche OCR de piètre qualité.
Arrive quand le champ "creatortool" vaut "Image Capture Plus".
Parameters: |
|
---|
Returns: |
|
---|
guess_dernpage_transmission(df_meta)
Détermine si la dernière page est un accusé de réception de télétransmission.
Permet de traiter certains arrêtés recueillis après leur télétransmission.
Parameters: |
|
---|
Returns: |
|
---|
guess_duplicates_meta(df_meta, hash_fn='blake2b')
Détermine si les fichiers PDF sont des doublons à partir de leurs métadonnées.
Parameters: |
|
---|
Returns: |
|
---|
guess_pdftext(df_meta)
Détermine si le fichier est un PDF texte (ou "numérique natif").
Parameters: |
|
---|
Returns: |
|
---|
guess_tampon_transmission(df_meta)
Détermine si le haut des pages contient des tampons de transmission électronique.
Permet de traiter certains arrêtés recueillis après leur télétransmission.
Parameters: |
|
---|
Returns: |
|
---|
Charge le texte des documents dans un DataFrame
Chaque ligne correspond à une page d'un document.
create_pages_dataframe(df_meta)
Charger le texte des documents dans un DataFrame.
Une entrée par page de document.
Parameters: |
|
---|
Returns: |
|
---|