Pourquoi est-il difficile d’extraire des informations à partir de fichiers PDF ?
PDF, ou Portable Document Format, est un format de fichier populaire largement utilisé pour les documents tels que les factures, les bons de commande et autres documents commerciaux. Cependant, l’extraction d’informations à partir de fichiers PDF peut être une tâche difficile pour les développeurs.
L’une des raisons pour lesquelles il est difficile d’extraire des informations à partir de fichiers PDF est que le format n’est pas structuré. Contrairement au HTML, qui a un format spécifique pour les tableaux et les en-têtes que les développeurs peuvent facilement identifier, les PDF n’ont pas de mise en page cohérente pour les informations. Cela rend plus difficile pour les développeurs de savoir où trouver les informations spécifiques dont ils ont besoin.
Une autre raison pour laquelle il est difficile d’extraire des informations à partir de fichiers PDF est qu’il n’y a pas de mise en page standard pour les informations. Chaque système génère des factures et des bons de commande différemment, de sorte que les développeurs doivent souvent écrire du code personnalisé pour extraire des informations de chaque document individuel. Cela peut être un processus long et sujet aux erreurs.
De plus, les PDF peuvent contenir à la fois du texte et des images, ce qui rend difficile pour les développeurs d’extraire par programmation des informations du document. L’OCR (reconnaissance optique de caractères) peut être utilisé pour extraire du texte à partir d’images, mais cela ajoute de la complexité au processus et peut entraîner des erreurs si le logiciel OCR n’est pas précis.
Solutions existantes
Les solutions existantes pour extraire des informations à partir de fichiers PDF incluent :
- Utilisation de regex : pour faire correspondre les modèles dans le texte après la conversion du PDF en texte brut. Les exemples incluent facture2données et traprange-facture. Cependant, cette méthode nécessite une connaissance du format des champs de données.
- Services cloud basés sur l’IA : utilisez l’apprentissage automatique pour extraire des données structurées à partir de PDF. Les exemples incluent pdftables et docparser, mais ceux-ci ne sont pas compatibles avec l’open source.
Pourtant, une autre solution pour l’extraction de données PDF : utiliser OpenAI
Une solution pour extraire des informations des fichiers PDF consiste à utiliser les capacités de traitement du langage naturel d’OpenAI pour comprendre le contenu du document. Cependant, OpenAI n’est pas en mesure de travailler directement avec les formats PDF ou image, la première étape consiste donc à convertir le PDF en texte tout en conservant les positions relatives des éléments de texte.
Une façon d’y parvenir consiste à utiliser la bibliothèque PDFLayoutTextStripper, qui utilise PDFBox pour lire tous les éléments de texte du fichier PDF et les organiser en lignes, en conservant les positions relatives identiques à celles du fichier PDF d’origine. Ceci est important car, par exemple, dans la table des articles d’une facture, si le montant se trouve dans la même colonne que la quantité, cela entraînera des valeurs incorrectes lors de la recherche du montant total et de la quantité totale. Voici un exemple de la sortie du stripper :
*PO-003847945*
Page.........................: 1 of 1
Address...........: Aeeee Consumer Good Co.(QSC) Purchase Order
P.O.Box 1234
Dooo, PO-003847945
ABC TL-00074
Telephone........: USR\S.Morato 5/10/2020 3:40 PM
Fax...................:
100225 Aaaaaa Eeeeee Date...................................: 5/10/2020
Expected DeliveryDate...: 5/10/2020
Phone........: Attention Information
Fax.............:
Vendor : TL-00074
AAAA BBBB CCCCCAAI W.L.L. Payment Terms Current month plus 60 days
Discount
Barcode Item number Description Quantity Unit Unit price Amount Discount
5449000165336 304100 CRET ZERO 350ML PET 5.00 PACK24 54.00 270.00 0.00 0.00
350
5449000105394 300742 CEEOCE EOE SOFT DRINKS
1.25LTR 5.00 PACK6 27.00 135.00 0.00 0.00
1.25
(truncated...)
Une fois le PDF converti en texte, l’étape suivante consiste à appeler l’API OpenAI et à transmettre le texte avec des requêtes telles que « Extraire les champs : ‘Numéro de bon de commande’, ‘Montant total' ». La réponse sera au format JSON, et GSON peut être utilisé pour l’analyser et extraire les résultats finaux. Ce processus en deux étapes consistant à convertir le PDF en texte, puis à utiliser les capacités de traitement du langage naturel d’OpenAI peut être une solution efficace pour extraire des informations à partir de fichiers PDF.
La requête est aussi simple que suit, avec %s remplacé par le contenu du texte du bon de commande :
private static final String QUERY = """
Want to extract fields: "PO Number", "Total Amount" and "Delivery Address".
Return result in JSON format without any explanation.
The PO content is as follows:
%s
""";
La requête se compose de deux composants :
- Spécifier les champs souhaités.
- Formatage des valeurs de champ en tant que données JSON pour une récupération facile à partir de la réponse de l’API.
Et voici l’exemple de réponse d’OpenAI :
{
"object": "text_completion",
"model": "text-davinci-003",
"choices": [
{
"text": "\\n{\\n \\"PO Number\\": \\"PO-003847945\\",\\n \\"Total Amount\\": \\"1,485.00\\",\\n \\"Delivery Address\\": \\"Peera Consumer Good Co.(QSC), P.O.Box 3371, Dohe, QAT\\"\\n}",
"index": 0,
"logprobs": null,
"finish_reason": "stop"
}
],
// ... some more fields
}
Décoder le text
La chaîne JSON du champ génère les champs souhaités suivants :
{
"PO Number": "PO-003847945",
"Total Amount": "1,485.00",
"Delivery Address": "Peera Consumer Good Co.(QSC), P.O.Box 3371, Dohe, QAT"
}
Exécuter un exemple de code
Conditions préalables:
Pas:
- Créez un compte OpenAI.
- Connectez-vous et générez une clé API.
- Remplacer
OPENAI_API_KEY
dans Main.java avec votre clé. - Mettre à jour
SAMPLE_PDF_FILE
si besoin. - Exécutez le code et affichez les résultats de la sortie.