Analyser des PDF et d'autres formats de données en Python

En tant que développeurs Python, nous sommes souvent confrontés à des situations où nous devons extraire des données de différentes sources et de différents formats tels que PDF, CSV, HTML et autres. Dans cet article, nous allons examiner en détail l'analyse syntaxique de données à partir de fichiers PDF et présenter quelques paquets Python utiles pour l'analyse syntaxique d'autres formats de données.

Analyser des fichiers PDF en Python

Le PDF est un format de fichier standard largement utilisé pour le partage et l'impression de documents. Malheureusement, ce n'est pas le format le plus simple lorsqu'il s'agit d'extraire des données, en raison de sa structure complexe. Heureusement, Python propose plusieurs bibliothèques qui peuvent nous aider à extraire des données des fichiers PDF, comme PyPDF2 et PDFMiner.

PyPDF2

PyPDF2 est une bibliothèque purement Python, développée comme une boîte à outils PDF. Elle est capable d'extraire des informations de documents, de diviser des documents page par page, de fusionner des pages, de découper des pages et de crypter et décrypter des fichiers PDF.

Voici un exemple simple d'utilisation de PyPDF2 pour extraire du texte d'un fichier PDF :

import PyPDF2
def extract_text_from_pdf(file_path) :
    pdf_file_obj = open(file_path, 'rb')
    pdf_reader = PyPDF2.PdfFileReader(pdf_file_obj)
    text = ""
    for page_num in range(pdf_reader.numPages) :
        page_obj = pdf_reader.getPage(page_num)
        text += page_obj.extractText()
    pdf_file_obj.close()
    return text
print(extract_text_from_pdf('example.pdf'))

# Pour plus d'informations, consultez notre PyPDF2 Post.

PDFMiner

Alors que PyPDF2 est un excellent outil pour les tâches de traitement PDF de base, il ne fait pas toujours du bon travail lorsqu'il s'agit d'extraire du texte qui conserve sa mise en page d'origine. C'est là que PDFMiner entre en jeu. Il se concentre sur la récupération et l'analyse des données textuelles des fichiers PDF.

Voici un exemple simple de l'utilisation de PDFMiner pour extraire du texte :

from pdfminer.high_level import extract_text
def extract_text_from_pdf(file_path) :
    text = extract_text(file_path)
    return text
print(extract_text_from_pdf('example.pdf'))

PDFQuery

PDFQuery est une bibliothèque Python légère qui utilise une combinaison de XML et de syntaxe jQuery pour analyser les PDF. Elle est particulièrement utile si vous connaissez l'emplacement exact des données que vous souhaitez extraire dans un fichier PDF.

import pdfquery
def extract_data_from_pdf(file_path) :
    pdf = pdfquery.PDFQuery(file_path)
    pdf.load()
    label = pdf.pq('LTTextLineHorizontal:contains("Your Label")')
    return label
data = extract_data_from_pdf('Exemple.pdf')
print(data)

Tabula-py

Si vos PDF sont composés de tableaux, Tabula-py est la bibliothèque idéale pour l'extraction. Il s'agit d'un simple wrapper pour Tabula, qui permet de lire les tableaux d'un PDF dans des objets DataFrame.

import tabula
def extract_table_from_pdf(file_path) :
    df = tabula.read_pdf(file_path, pages='all')
    return df
df = extract_table_from_pdf('exemple.pdf')
print(df)

PDFBox

PDFBox est une bibliothèque Java utile pour les tâches liées au PDF, qui propose également un wrapper Python, python-pdfbox. Bien que sa fonctionnalité soit quelque peu limitée par rapport à la bibliothèque Java originale, elle peut extraire du texte, des métadonnées et des images.

import pdfbox
def extract_text_from_pdf(file_path) :
    p = pdfbox.PDFBox()
    text = p.extract_text(file_path)
    return text
text = extract_text_from_pdf('Exemple.pdf')
print(texte)

Ardoise

Slate s'appuie sur PDFMiner pour offrir une API plus simple pour l'extraction de texte à partir de fichiers PDF. Cependant, il n'a pas été maintenu depuis plusieurs années et il se peut qu'il ne fonctionne pas parfaitement avec les versions récentes de Python.

import slate
with open('Beispiel.pdf', 'rb') as f :
    document = slate.PDF(f)
    texte = " ".join(document)
print(texte)

PDFPlumber

Cette bibliothèque offre des fonctions complètes pour l'extraction de texte, de tableaux et même d'éléments visuels à partir de PDF. Elle se base sur PDFMiner et offre une API plus conviviale.

import pdfplumber
def extract_text_from_pdf(file_path) :
    with pdfplumber.open(file_path) as pdf :
        first_page = pdf.pages[0]
        text = first_page.extract_text()
    return text
print(extract_text_from_pdf('Exemple.pdf'))

Chacune de ces bibliothèques a ses propres forces et faiblesses, et le meilleur choix dépend des détails de la tâche en question. Veuillez évaluer soigneusement vos besoins et les fichiers PDF avec lesquels vous travaillez lorsque vous choisissez une bibliothèque.

Konfuzio SDK

Konfuzio est un kit de développement logiciel (SDK) sophistiqué qui aide à analyser les données de documents complexes et non structurés, y compris les PDF. La force de Konfuzio réside dans sa capacité à utiliser l'apprentissage automatique pour l'extraction d'informations. Ce n'est pas seulement un extracteur de texte - il peut comprendre le contexte et les relations dans votre document.

Cliquez ici pour accéder aux Tutoriels PDF avec le SDK Python de Konfuzio.

Autres analyseurs de données en Python

Au-delà des PDF, Python offre une multitude de bibliothèques pour analyser différents formats de données. En voici quelques exemples.

Partage de CSV : pandas

La bibliothèque pandas est un outil puissant de manipulation des données, qui facilite également l'analyse syntaxique des fichiers CSV :

import pandas as pd
def parse_csv(file_path) :
    df = pd.read_csv(file_path)
    return df
df = parse_csv('example.csv')
print(df.head())

Ce script lit un fichier CSV dans un DataFrame pandas, qui est une structure de données étiquetée en 2 dimensions avec éventuellement différents types de colonnes.

Analyse syntaxique HTML : Beautiful Soup

Beautiful Soup est une bibliothèque Python utilisée à des fins de web-scraping, pour extraire des données de fichiers HTML et XML.

from bs4 import BeautifulSoup
import requests
def parse_html(url) :
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup
soup = parse_html('https://www.example.com')
print(soup.prettify())

Ce script récupère le contenu HTML d'une page web et l'analyse dans un objet BeautifulSoup que vous pouvez parcourir pour en extraire des données.

Partage JSON : json

La bibliothèque standard de Python contient le module json, qui vous permet d'encoder et d'analyser des données JSON.

import json
def parse_json(json_string) :
    data = json.loads(json_string)
    return data
data = parse_json('{"key" : "value"}')
print(data)

Ce script analyse une chaîne de caractères JSON dans un dictionnaire Python.

Conclusion

Dans cet article, nous n'avons fait qu'effleurer la surface de l'analyse syntaxique des données dans Python. En fonction de vos besoins spécifiques et de la complexité de vos données, vous devrez peut-être envisager d'autres bibliothèques et outils. Les paquets et exemples fournis ici devraient toutefois vous fournir un bon point de départ pour la plupart des tâches courantes d'analyse syntaxique des données.

"
"
Avatar de Florian Zyprian

Derniers articles