Détection de table et extraction d'informations à l'aide du Deep Learning

Nœud source: 1325422

Introduction à l'extraction de tables

La quantité de données collectées augmente considérablement de jour en jour avec le nombre croissant d'applications, de logiciels et de plateformes en ligne.

Pour gérer/accéder à ces énormes données de manière productive, il est nécessaire de développer de précieux outils d'extraction d'informations.

L'un des sous-domaines qui requiert une attention particulière dans le domaine de l'extraction d'informations est l'extraction de tableaux à partir d'images ou la détection de données tabulaires à partir de formulaires, PDF et documents.

Extraction de tableaux est la tâche de détecter et de décomposer les informations de table dans un document.

Table OCR - Nanonets extrayant les données d'une table à partir d'une image !
Table OCR – Nanonets extrayant des données de table à partir d'une image !

Imaginez que vous ayez beaucoup de documents avec des données tabulaires que vous devez extraire pour un traitement ultérieur. Classiquement, vous pouvez les copier manuellement (sur un papier) ou les charger dans des feuilles excel.

Cependant, avec le logiciel OCR de table, vous pouvez détecter automatiquement les tables et extraire toutes les données tabulaires des documents en une seule fois. Cela économise beaucoup de temps et de retouches.

Dans cet article, nous verrons d'abord comment les Nanonets peuvent extraire automatiquement des tableaux à partir d'images ou de documents. Nous aborderons ensuite quelques techniques DL populaires pour détecter et extraire des tableaux dans des documents.


Vous souhaitez extraire des données tabulaires de factures, de reçus ou de tout autre type de document ? Découvrez les Nanonets Extracteur de tableau PDF pour extraire des données tabulaires. PLANIFIEZ UNE DÉMO pour en savoir plus sur l'automatisation extraction de table.


Table des matières

Extraire la table de l'image avec l'OCR de table Nanonets

  • Inscription pour un compte Nanonets gratuit

    • Télécharger des images/fichiers vers le modèle OCR de la table Nanonets
    • Nanonets détecte et extrait automatiquement toutes les données tabulaires
    • Modifier et examiner les données (si nécessaire)
    • Exportez les données traitées au format Excel, csv ou JSON

Extraire le tableau de l'image avec des nanonets

Vouloir gratter les données du PDF documents, convertir un tableau PDF en Excel or automatiser l'extraction de table? Découvre ça comment les nanonets Grattoir PDF or Analyseur PDF peut permettre à votre entreprise d'être plus productive.


API d'OCR de table de nanonets

Table OCR avec Nanonets
Table OCR avec Nanonets

La API OCR Nanonets vous permet de créer facilement des modèles OCR. Vous n'avez pas à vous soucier du prétraitement de vos images ni à vous soucier de la correspondance des modèles ou de créer des moteurs basés sur des règles pour augmenter la précision de votre modèle OCR.

Vous pouvez télécharger vos données, les annoter, configurer le modèle pour qu'il s'entraîne et attendre d'obtenir des prédictions via une interface utilisateur basée sur un navigateur sans écrire une seule ligne de code, sans vous soucier des GPU ou en trouvant les bonnes architectures pour la détection de votre table à l'aide de modèles d'apprentissage en profondeur.

Vous pouvez également acquérir les réponses JSON de chaque prédiction pour l'intégrer à vos propres systèmes et créer des applications d'apprentissage automatique basées sur des algorithmes de pointe et une infrastructure solide.

https://nanonets.com/documentation/


Votre entreprise s'occupe de la reconnaissance de données ou de texte dans des documents numériques, des PDF ou des images ? Vous êtes-vous demandé comment extraire des données tabulaires, extraire le texte des images , extraire des données d'un PDF or extraire le texte du PDF avec précision et efficacité?


Qui trouvera l’extraction de table utile

Comme indiqué dans la section précédente, les tableaux sont fréquemment utilisés pour représenter les données dans un format propre. Nous pouvons les voir si souvent dans plusieurs domaines, de l'organisation de notre travail en structurant les données dans des tables au stockage d'énormes actifs d'entreprises. De nombreuses organisations doivent gérer des millions de tables chaque jour. Pour faciliter ces tâches laborieuses consistant à tout faire manuellement, nous devons recourir à des techniques plus rapides. Discutons de quelques cas d'utilisation où extraction de tables peut être indispensable :

La source: Patrick Thomas, Unsplash

Cas d'utilisation personnels

La extraction de table peut également être utile pour les petits cas d'utilisation personnelle. Parfois, nous capturons des documents sur le téléphone mobile et les copions plus tard sur nos ordinateurs. Au lieu d'utiliser ce processus, nous pouvons capturer directement les documents et les enregistrer sous des formats modifiables dans nos modèles personnalisés. Vous trouverez ci-dessous quelques cas d'utilisation sur la façon dont nous pouvons intégrer l'extraction de table dans notre routine personnelle -

Numérisation de documents vers le téléphone: Nous capturons souvent des images de tableaux importants sur le téléphone et les enregistrons, mais avec la technique d'extraction de tableau, nous pouvons capturer les images des tableaux et les stocker directement dans un format tabulaire, soit dans des feuilles Excel ou Google. Avec cela, nous n'avons pas besoin de rechercher des images ou de copier le contenu du tableau dans de nouveaux fichiers, à la place, nous pouvons directement utiliser les tableaux importés et commencer à travailler sur les informations extraites.

Documents au format HTML: Dans les pages Web, nous trouvons de nombreuses informations présentées à l'aide de tableaux. Ils nous aident en comparaison avec les données et nous donnent une note rapide sur les chiffres de manière organisée. En utilisant le processus d'extraction de tableau, nous pouvons numériser des documents PDF ou des images JPG / PNG et charger les informations directement dans un format de tableau personnalisé. Nous pouvons en outre écrire des scripts pour ajouter des tables supplémentaires basées sur les tables existantes, et ainsi numériser les informations. Cela nous aide à modifier le contenu et accélère le processus de stockage.


Cas d'utilisation industrielle

Il existe plusieurs industries à travers le monde qui fonctionnent énormément sur la paperasse et la documentation, en particulier dans les secteurs des banques et des assurances. Du stockage des détails des clients à la prise en charge des besoins des clients, les tableaux sont largement utilisés. Ces informations sont à nouveau transmises sous forme de document (copie papier) à différentes succursales pour approbation, dans lesquelles des erreurs de communication peuvent parfois entraîner des erreurs lors de la récupération d'informations dans des tableaux. Au lieu de cela, l'utilisation de l'automatisation ici, nous facilite beaucoup la vie. Une fois que les données initiales sont saisies et approuvées, nous pouvons directement numériser ces documents dans des tableaux et continuer à travailler sur les données numérisées. Sans parler de la réduction de la consommation de temps et des défauts, nous pouvons informer les clients de l'heure et du lieu où les informations sont traitées. Cela garantit donc la fiabilité des données et simplifie notre façon d'aborder les opérations. Voyons maintenant les autres cas d'utilisation possibles:

Contrôle de la qualité: Le contrôle de la qualité est l'un des principaux services fournis par les principales industries. Cela se fait généralement en interne et pour les parties prenantes. Dans le cadre de cela, de nombreux formulaires de rétroaction sont collectés auprès des consommateurs pour extraire des commentaires sur le service fourni. Dans les secteurs industriels, ils utilisent des tableaux pour noter des listes de contrôle quotidiennes et des notes pour voir comment fonctionnent les lignes de production. Tout cela peut être documenté en un seul endroit en utilisant l'extraction de table avec facilité.

Suivi des actifs: Dans les industries manufacturières, les gens utilisent des tableaux codés en dur pour suivre les entités manufacturées comme l'acier, le fer, le plastique, etc. Chaque article fabriqué est étiqueté avec un numéro unique dans lequel ils utilisent des tableaux pour suivre les articles fabriqués et livrés chaque jour. L'automatisation peut permettre d'économiser beaucoup de temps et de ressources en termes d'erreurs ou d'incohérence des données.


Cas d'utilisation commerciale

Il existe plusieurs secteurs d'activité qui fonctionnent sur des feuilles Excel et des formulaires hors ligne. Mais à un moment donné, il est difficile de parcourir ces feuilles et formulaires. Si nous saisissons manuellement ces tableaux, cela prend du temps et le risque de saisie incorrecte de données sera élevé. Par conséquent, l'extraction de table est une meilleure alternative pour résoudre les cas d'utilisation commerciale, car les exemples ci-dessous sont peu nombreux.

Facture Automation: Il existe de nombreuses petites et grandes industries dont factures sont toujours générés sous forme de tableaux. Ceux-ci ne fournissent pas de déclarations fiscales correctement sécurisées. Pour surmonter ces obstacles, nous pouvons utiliser l'extraction de table pour convertir tous factures dans un format modifiable et ainsi les mettre à niveau vers une version plus récente.

Automatisation des formulaires: Les formulaires en ligne perturbent cette méthode éprouvée en aidant les entreprises à collecter les informations dont elles ont besoin et en les connectant simultanément à d'autres plates-formes logicielles intégrées à leur flux de travail. En plus de réduire le besoin de saisie manuelle des données (avec saisie automatisée des données) et des e-mails de suivi, l'extraction de table peut éliminer les coûts d'impression, d'envoi, de stockage, d'organisation et de destruction des alternatives papier traditionnelles.


Vous avez un problème OCR en tête? Envie de numériser factures, PDF ou plaques d'immatriculation? Dirigez-vous vers nanonets et construisez des modèles OCR gratuitement!


L'apprentissage profond en action

L'apprentissage en profondeur fait partie de la famille plus large de méthodes d'apprentissage automatique basées sur des réseaux de neurones artificiels.

Le réseau neuronal est un cadre qui reconnaît les relations sous-jacentes dans les données données grâce à un processus qui imite le fonctionnement du cerveau humain. Ils ont différentes couches artificielles à travers lesquelles les données passent, où ils en apprennent davantage sur les fonctionnalités. Il existe différentes architectures telles que les NN de convolution, les NN récurrents, les encodeurs automatiques, les NN de génération généralisée pour traiter différents types de données. Celles-ci sont complexes mais présentent des performances élevées pour résoudre les problèmes en temps réel. Examinons maintenant les recherches qui ont été menées dans le domaine de l'extraction de tables à l'aide de réseaux de neurones et, passons également en revue brièvement celles-ci.


TableNet

Livre: TableNet: modèle d'apprentissage en profondeur pour la détection de table de bout en bout et l'extraction de données tabulaires à partir d'images de documents numérisés

Introduction: TableNet est une architecture moderne d'apprentissage en profondeur qui a été proposée par une équipe de l'année TCS Research en 2019. La principale motivation était d'extraire des informations des tables numérisées via des téléphones portables ou des caméras.

Ils ont proposé une solution qui comprend une détection précise de la région tabulaire dans une image et par la suite la détection et l'extraction d'informations des lignes et des colonnes de la table détectée.

Base de données: L'ensemble de données utilisé était Marmot. Il contient 2000 pages au format PDF qui ont été rassemblées avec les vérités de terrain correspondantes. Cela inclut également les pages chinoises. Lien - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Archi L'architecture est basée sur Long et al., un modèle d'encodeur-décodeur pour la segmentation sémantique. Le même réseau codeur/décodeur est utilisé comme architecture FCN pour l'extraction de table. Les images sont prétraitées et modifiées à l'aide du Tesseract OCR.

Le modèle est dérivé en deux phases en soumettant l'entrée à des techniques d'apprentissage en profondeur. Dans la première phase, ils ont utilisé les poids d'un réseau VGG-19 pré-formé. Ils ont remplacé les couches entièrement connectées du réseau VGG utilisé par des couches convolutives 1 × 1. Toutes les couches convolutives sont suivies de l'activation ReLU et d'une couche d'abandon de probabilité 0.8. Ils appellent la deuxième phase le réseau décodé qui se compose de deux branches. C'est selon l'intuition que la région de colonne est un sous-ensemble de la région de table. Ainsi, le réseau de codage unique peut filtrer les régions actives avec une meilleure précision en utilisant les caractéristiques des régions de table et de colonne. La sortie du premier réseau est distribuée aux deux branches. Dans la première branche, deux opérations de convolution sont appliquées et la carte des caractéristiques finale est mise à l'échelle pour répondre aux dimensions de l'image d'origine. Dans l'autre branche de détection des colonnes, il y a une couche de convolution supplémentaire avec une fonction d'activation ReLU et une couche de décrochage avec la même probabilité de décrochage que celle mentionnée précédemment. Les cartes d'entités sont suréchantillonnées en utilisant des convolutions fractionnées après une couche de convolution (1 × 1). Ci-dessous, une image de l'architecture:

L'architecture de TableNet

Sortie: Une fois les documents traités à l'aide du modèle, les masques des tableaux et des colonnes sont générés. Ces masques sont utilisés pour filtrer le tableau et ses régions de colonnes de l'image. À l'aide de l'OCR Tesseract, les informations sont extraites des régions segmentées. Ci-dessous, une image montrant les masques générés puis extraits des tableaux:

Ils ont également proposé le même modèle qui est affiné avec ICDAR qui a mieux performé que le modèle d'origine. Le rappel, la précision et le score F1 du modèle affiné sont respectivement de 0.9628, 0.9697 et 0.9662. Le modèle d'origine a les métriques enregistrées de 0.9621, 0.9547, 0.9583 dans le même ordre. Plongeons maintenant dans une architecture de plus.


DeepDeSRT

Livre: DeepDeSRT: Deep Learning pour la détection et la reconnaissance de structure de tableaux dans des images de documents

Introduction: DeepDeSRT est un framework de réseau neuronal qui est utilisé pour détecter et comprendre les tableaux dans les documents ou les images. Il a deux solutions comme mentionné dans le titre:

  1. Il présente une solution basée sur l'apprentissage en profondeur pour la détection de tableaux dans les images de documents.
  2. Il propose une nouvelle approche basée sur l'apprentissage profond pour la reconnaissance de la structure des tableaux, c'est-à-dire l'identification des lignes, des colonnes et des positions des cellules dans les tableaux détectés.

Le modèle proposé est entièrement basé sur des données, il ne nécessite pas d'heuristique ou de métadonnées des documents ou des images. L'un des principaux avantages de la formation est qu'ils n'ont pas utilisé de grands ensembles de données de formation, mais ont plutôt utilisé le concept d'apprentissage par transfert et d'adaptation de domaine pour la détection de table et la reconnaissance de structure de table.

Base de données: L'ensemble de données utilisé est un ensemble de données du concours de tableaux ICDAR 2013 contenant 67 documents avec 238 pages au total.

Archi

  • Détection de table Le modèle proposé utilise Fast RCNN comme cadre de base pour détecter les tables. L'architecture se décompose en deux parties différentes. Dans la première partie, ils ont généré des propositions de région basées sur l'image d'entrée par un soi-disant réseau de proposition de région (RPN). Dans la deuxième partie, ils ont classé les régions en utilisant Fast-RCNN. Pour soutenir cette architecture, ils ont utilisé ZFNetComment et les poids de VGG-16.
  • Reconnaissance de la structure Une fois qu'une table a été détectée avec succès et que son emplacement est connu du système, le prochain défi pour comprendre son contenu est de reconnaître et de localiser les lignes et les colonnes qui composent la structure physique de la table. Par conséquent, ils ont utilisé un réseau entièrement connecté avec les poids de VGG-16 qui extrait des informations des lignes et des colonnes. Voici les sorties de DeepDeSRT:

Sorties :

Sorties de détection de table
Sorties de reconnaissance de structure [6]

Les résultats de l'évaluation révèlent que DeepDeSRT surpasse les méthodes de pointe pour la détection de table et la reconnaissance de structure et atteint des mesures F1 de 96.77% et 91.44% pour la détection de table et la reconnaissance de structure, respectivement jusqu'en 2015.


Graphiques de réseaux de neurones

Livre: Repenser la reconnaissance des tableaux à l'aide de réseaux de neurones graphiques

Introduction: Dans cette recherche, les auteurs du Deep Learning Laboratory, National Center of Artificial Intelligence (NCAI) ont proposé Graph Neural Networks pour extraire des informations des tableaux. Ils ont fait valoir que les réseaux de graphes sont un choix plus naturel pour ces problèmes et ont exploré plus en détail deux réseaux de neurones graphiques basés sur un gradient.

Ce modèle proposé combine les avantages des deux réseaux de neurones convolutifs pour l'extraction visuelle des caractéristiques et des réseaux de graphes pour traiter la structure du problème.

Base de données: Les auteurs ont proposé un nouvel ensemble de données généré par synthèse de 0.5 million de tableaux divisé en quatre catégories.

  1. Les images sont des images simples sans fusion et avec des lignes directrices
  2. Les images ont différents types de bordure, y compris l'absence occasionnelle de lignes directrices
  3. Introduit la fusion des cellules et des colonnes
  4. La caméra a capturé des images avec la transformation de perspective linéaire

Archi Ils ont utilisé un réseau convolutionnel peu profond qui génère les caractéristiques convolutionnelles respectives. Si les dimensions spatiales des entités en sortie ne sont pas les mêmes que l'image d'entrée, elles collectent des positions qui sont linéairement réduites en fonction du rapport entre les dimensions d'entrée et de sortie et les envoient à un réseau d'interaction doté de deux réseaux de graphes appelés DGCNN. et GravNet. Les paramètres du réseau de graphes sont les mêmes que le CNN d'origine. En fin de compte, ils ont utilisé un échantillonnage de paires d'exécution pour classer le contenu extrait qui a utilisé en interne l'algorithme basé sur Monte Carlo. Voici les sorties:

Sortie:

Sorties générées par Graph Neural Networks

Vous trouverez ci-dessous les nombres de précision tabulés qui sont générés par les réseaux pour quatre catégories du réseau, comme présenté Ensemble de données section:


CGAN et algorithmes génétiques

Livre: Extraction de tableaux à partir de documents à l'aide de réseaux contradictoires génératifs conditionnels et d'algorithmes génétiques

Introduction: Dans cette recherche, les auteurs ont utilisé une approche descendante au lieu d'utiliser une approche ascendante (intégration de lignes dans des cellules, des lignes ou des colonnes).

Dans cette méthode, en utilisant un réseau contradictoire génératif, ils ont cartographié l'image de la table dans une forme de table «squelette» normalisée. Ce tableau squelette indique les bordures approximatives des lignes et des colonnes sans le contenu du tableau. Ensuite, ils ajustent les rendus des structures de table latentes candidates à la structure du squelette en utilisant une mesure de distance optimisée par un algorithme génétique.

Base de données: Les auteurs ont utilisé leur propre ensemble de données qui comprend 4000 tables.

Archi Le modèle proposé se compose de deux parties. Dans la première partie, les images d'entrée sont résumées dans des tables squelettiques à l'aide d'un réseau neuronal contradictoire générateur conditionnel. Un GAN possède à nouveau deux réseaux, le générateur qui génère des échantillons aléatoires et le discriminateur qui indique si les images générées sont fausses ou originales. Le générateur G est un réseau codeur-décodeur où une image d'entrée est passée à travers une série de couches progressivement sous-échantillonnées jusqu'à une couche goulot d'étranglement où le processus est inversé. Pour transmettre suffisamment d'informations aux couches de décodage, une architecture U-Net avec des connexions de saut est utilisée et une connexion de saut est ajoutée entre les couches i et n - i via la concaténation, où n est le nombre total de couches et i est le numéro de couche dans l'encodeur. Une architecture PatchGAN est utilisée pour le discriminateur D. Cela pénalise la structure de l'image de sortie à l'échelle des patchs. Ceux-ci produisent la sortie sous forme de table squelette.

Dans la deuxième partie, ils optimisent l'ajustement des structures de données latentes candidates à l'image squelette générée en utilisant une mesure de la distance entre chaque candidat et le squelette. C'est ainsi que le texte à l'intérieur des images est extrait. Ci-dessous, une image illustrant l'architecture:

Schéma général de l'approche

Sortie: Les structures de table estimées sont évaluées en comparant - Numéro de ligne et de colonne, position dans le coin supérieur gauche, hauteurs de ligne et largeurs de colonne

L'algorithme génétique a donné une précision de 95.5% en ligne et de 96.7% en colonne tout en extrayant les informations des tableaux.


Besoin de numériser des documents, recettes or factures mais trop paresseux pour coder? Dirigez-vous vers nanonets et construisez des modèles OCR gratuitement!


[Code] Approches traditionnelles

Dans cette section, nous apprendrons comment extraire des informations des tables à l'aide de Deep Learning et d'OpenCV. Vous pouvez considérer cette explication comme une introduction, cependant, la construction de modèles de pointe nécessitera beaucoup d'expérience et de pratique. Cela vous aidera à comprendre les principes fondamentaux de la façon dont nous pouvons former des ordinateurs avec diverses approches et algorithmes possibles.

Pour comprendre le problème de manière plus précise, nous définissons quelques termes de base, qui seront utilisés tout au long de l'article:

  • Texte: contient une chaîne et cinq attributs (haut, gauche, largeur, hauteur, police)
  • Gamme: contient des objets texte qui sont supposés être sur la même ligne dans le fichier d'origine
  • Une seule ligne: objet ligne avec un seul objet texte.
  • Multi-ligne: objet ligne avec plusieurs objets texte.
  • Multi-ligne Block: un ensemble d'objets multilignes continus.
  • Rangée: Blocs horizontaux dans le tableau
  • Colonne: Blocs verticaux dans le tableau
  • Cellule: l'intersection d'une ligne et d'une colonne
  • Cellule - Remplissage: le rembourrage interne ou l'espace à l'intérieur de la cellule.

Détection de table avec OpenCV

Nous utiliserons des techniques traditionnelles de vision par ordinateur pour extraire des informations des tables numérisées. Voici notre pipeline; nous capturons d'abord les données (les tableaux d'où nous devons extraire les informations) en utilisant des caméras normales, puis en utilisant la vision par ordinateur, nous allons essayer de trouver les bordures, les bords et les cellules. Nous utiliserons différents filtres et contours, et nous mettrons en évidence les principales caractéristiques des tableaux.

Nous aurons besoin d'une image d'une table. Nous pouvons capturer cela sur un téléphone ou utiliser n'importe quelle image existante. Ci-dessous l'extrait de code,

file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)

Ici, nous avons chargé la même image image deux variables puisque nous utiliserons le table_image_contour lors du dessin de nos contours détectés sur l'image chargée. Ci-dessous, l'image du tableau que nous utilisons dans notre programme:

Image de la table

Nous utiliserons une technique appelée Seuil d'image inversé ce qui améliore les données présentes dans l'image donnée.

ret, thresh_value = cv2.threshold( table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)

Une autre étape importante du prétraitement est dilatation de l'image. La dilatation est une opération mathématique simple appliquée aux images binaires (noir et blanc) qui élargit progressivement les limites des régions des pixels de premier plan (à pixels blancs, généralement).

kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)

Dans OpenCV, nous utilisons la méthode, trouverContours pour obtenir les contours de l'image présente. Cette méthode prend trois arguments, le premier est l'image dilatée (l'image utilisée pour générer l'image dilatée est table_image_contour - la méthode findContours ne prend en charge que les images binaires), le second est le cv2.RETR_TREE qui nous dit d'utiliser le mode de récupération de contour, le troisième est le  cv2.CHAIN_APPROX_SIMPLE qui est le mode d'approximation des contours. le trouverContours décompresse deux valeurs, nous allons donc ajouter une variable supplémentaire nommée hiérarchie. Lorsque les images sont imbriquées, les contours respirent l'interdépendance. Pour représenter de telles relations, une hiérarchie est utilisée.

contours, hierarchy = cv2.findContours( dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Les contours indiquent où exactement les données sont présentes dans l'image. Maintenant, nous parcourons la liste des contours que nous avons calculée à l'étape précédente et calculons les coordonnées des boîtes rectangulaires comme observées dans l'image d'origine en utilisant la méthode,  cv2.boundingRect. Dans la dernière itération, nous avons mis ces boîtes sur l'image originale table_image en utilisant la méthode, cv2.rectangle ().

for cnt in contours: x, y, w, h = cv2.boundingRect(cnt) # bounding the images if y < 50: table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1) 

Ceci est notre dernière étape. Ici, nous utilisons la méthode Fenêtre nommée pour rendre notre table avec le contenu extrait et les contours intégrés. Voici l'extrait de code:

plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)

Sortie

Modifiez la valeur de y à 300 dans l'extrait de code ci-dessus, ce sera votre sortie:

Une fois les tableaux extraits, vous pouvez exécuter chaque recadrage de contour via le moteur OCR tesseract, dont le didacticiel peut être trouvé. ici. Une fois que nous avons des boîtes de chaque texte, nous pouvons les regrouper en fonction de leurs coordonnées x et y pour dériver la ligne et la colonne correspondantes auxquelles elles appartiennent.

En plus de cela, vous avez la possibilité d'utiliser PDFMiner pour transformer vos documents PDF en fichiers HTML que nous pouvons analyser à l'aide d'expressions régulières pour enfin obtenir nos tableaux. Voici comment procéder.


Analyse PDFMiner et Regex

Pour extraire des informations de documents plus petits, il faut du temps pour configurer des modèles d'apprentissage en profondeur ou écrire des algorithmes de vision par ordinateur. Au lieu de cela, nous pouvons utiliser des expressions régulières en Python pour extraire du texte à partir des documents PDF. N'oubliez pas non plus que cette technique ne fonctionne pas pour les images. Nous ne pouvons l'utiliser que pour extraire des informations de fichiers HTML ou de documents PDF. En effet, lorsque vous utilisez une expression régulière, vous devez faire correspondre le contenu avec la source et extraire les informations. Avec les images, vous ne pourrez pas faire correspondre le texte et les expressions régulières échoueront. Travaillons maintenant avec un simple document PDF et extrayons les informations des tableaux qu'il contient. Ci-dessous l'image :

Dans la première étape, nous chargeons le PDF dans notre programme. Une fois cela fait, nous convertissons le PDF en HTML afin que nous puissions directement utiliser des expressions régulières et ainsi extraire le contenu des tableaux. Pour cela, le module que nous utilisons est mineur de pdf. Cela permet de lire le contenu du PDF et de le convertir en fichier HTML.

Voici l'extrait de code:

from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import re def convert_pdf_to_html(path): rsrcmgr = PDFResourceManager() retstr = StringIO() codec = 'utf-8' laparams = LAParams() device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) fp = file(path, 'rb') interpreter = PDFPageInterpreter(rsrcmgr, device) password = "" maxpages = 0 #is for all caching = True pagenos=set() for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True): interpreter.process_page(page) fp.close() device.close() str = retstr.getvalue() retstr.close() return str

Crédits de code: zévross

Nous avons importé de nombreux modules, y compris des bibliothèques liées aux expressions régulières et PDF. Dans la méthode convertir_pdf_en_html, nous envoyons le chemin du fichier PDF qui doit être converti en fichier HTML. La sortie de la méthode sera une chaîne HTML comme indiqué ci-dessous:

'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoesn<br>7632 Pool Station Roadn<br>Angels Camp, CA 95222n<br>(209) 785-3667n<br>Intake: (800) 633-7066n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SPn<br></span></div>' 

L'expression régulière est l'une des techniques de programmation les plus délicates et les plus cool utilisées pour la correspondance de motifs. Celles-ci sont largement utilisées dans plusieurs applications, par exemple, à des fins de formatage de code, de raclage Web et de validation. Avant de commencer à extraire le contenu de nos tableaux HTML, apprenons rapidement quelques choses sur les expressions régulières.

Cette bibliothèque fournit diverses méthodes intégrées pour faire correspondre et rechercher des modèles. En voici quelques-uns:

import re # Match the pattern in the string
re.match(pattern, string) # Search for a pattern in a string
re.search(pattern, string) # Finds all the pattern in a string
re.findall(pattern, string) # Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0] # Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)

Les caractères / expressions que vous voyez habituellement dans les expressions régulières incluent:

  • [AZ] - n'importe quelle lettre majuscule
  • d - chiffre
  • w - caractère du mot (lettres, chiffres et traits de soulignement)
  • s - espaces (espaces, tabulations et espaces)

Maintenant, pour découvrir un modèle particulier en HTML, nous utilisons des expressions régulières puis écrivons des modèles en conséquence. Nous divisons d'abord les données de telle sorte que les blocs d'adresses sont séparés en blocs séparés conformément au nom du programme (ANGELS CAMP, APPLE VALLEY, etc.):

pattern = '(?<=<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)' for programinfo in re.finditer(pattern, biginputstring, re.DOTALL): do looping stuff…

Plus tard, nous trouvons le nom du programme, la ville, l'état et le code postal qui suivent toujours le même modèle (texte, virgule, lettres majuscules à deux chiffres, 5 chiffres (ou 5 chiffres tiret quatre chiffres) - ceux-ci sont présents dans le fichier PDF qui nous avons considéré comme entrée). Vérifiez l'extrait de code suivant:

# To identify the program name
programname = re.search('^(?!<br>).*(?=\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname) citystatezip =re.search('(?<=>)([a-zA-Zs]+, [a-zA-Zs]{2} d{5,10})(?=\n)', programinfo.group(0))
mainphone =re.search('(?<=<br>)(d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Zs]+: (d{3}) d{3}-d{4}x{0,1}d{0,}(?=\n)(?=\n)', programinfo.group(0)) 

Il s'agit d'un exemple simple expliquant comment extraire des informations des fichiers PDF à l'aide d'une expression régulière. Après avoir extrait toutes les informations requises, nous chargeons ces données dans un fichier CSV.

def createDirectory(instring, outpath, split_program_pattern): i = 1 with open(outpath, 'wb') as csvfile: filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL) # write the header row filewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes']) # cycle through the programs for programinfo in re.finditer(split_program_pattern, instring, re.DOTALL): print i i=i+1 # pull out the pieces programname = getresult(re.search('^(?!<br>).*(?=\n)', programinfo.group(0))) programname = re.escape(programname) # some facilities have odd characters in the name

Il s'agit donc d'un exemple simple expliquant comment vous pouvez pousser votre code HTML extrait dans un fichier CSV. Nous créons d'abord un fichier CSV, trouvons tous nos attributs et poussons un par un dans leurs colonnes respectives. Voici une capture d'écran:

Capture d'écran des éléments extraits des tables à l'aide d'expressions régulières

Parfois, les techniques décrites ci-dessus semblent compliquées et posent des défis aux programmeurs si toutes les tables sont imbriquées et complexes. Ici, le choix d'un modèle de CV ou d'apprentissage en profondeur fait gagner beaucoup de temps. Voyons quels sont les inconvénients et les défis qui entravent l'utilisation de ces méthodes traditionnelles.


Défis des méthodes traditionnelles

Dans cette section, nous apprendrons en détail où les processus d'extraction de table peuvent échouer et nous comprendrons davantage les moyens de surmonter ces obstacles en utilisant des méthodes modernes issues du Deep Learning. Ce processus n'est cependant pas un jeu d'enfant. La raison étant que les tableaux ne restent généralement pas constants. Ils ont différentes structures pour représenter les données, et les données à l'intérieur des tableaux peuvent être multilingues avec différents styles de mise en forme (style de police, couleur, taille de police et hauteur). Par conséquent, pour construire un modèle robuste, il faut être conscient de tous ces défis. Habituellement, ce processus comprend trois étapes: détection, extraction et conversion de table. Identifions les problèmes dans toutes les phases, un par un:


Détection de table

Dans cette phase, nous identifions où exactement les tables sont présentes dans l'entrée donnée. L'entrée peut être de n'importe quel format, comme des images, des documents PDF / Word et parfois des vidéos. Nous utilisons différentes techniques et algorithmes pour détecter les tables, soit par lignes soit par coordonnées. Dans certains cas, nous pouvons rencontrer des tables sans aucune frontière, où nous devons opter pour différentes méthodes. En plus de ceux-ci, voici quelques autres défis:

  • Transformation d'image: La transformation d'image est une étape principale dans la détection des étiquettes. Cela inclut l'amélioration des données et des bordures présentes dans le tableau. Nous devons choisir les algorithmes de prétraitement appropriés en fonction des données présentées dans le tableau. Par exemple, lorsque nous travaillons avec des images, nous devons appliquer des détecteurs de seuil et de bord. Cette étape de transformation nous aide à trouver le contenu plus précisément. Dans certains cas, les contours peuvent mal tourner et les algorithmes ne parviennent pas à améliorer l'image. Par conséquent, choisir les bonnes étapes de transformation d'image et de prétraitement est crucial.
  • Qualité d'image: Lorsque nous numérisons des tableaux pour l'extraction d'informations, nous devons nous assurer que ces documents sont numérisés dans des environnements plus lumineux, ce qui garantit des images de bonne qualité. Lorsque les conditions d'éclairage sont médiocres, les algorithmes CV et DL peuvent ne pas détecter les tables dans les entrées données. Si nous utilisons l'apprentissage en profondeur, nous devons nous assurer que l'ensemble de données est cohérent et dispose d'un bon ensemble d'images standard. Si nous utilisons ces modèles sur des tables présentes dans de vieux papiers froissés, nous devons d'abord prétraiter et éliminer le bruit dans ces images.
  • Variété de dispositions structurelles et de modèles: Toutes les tables ne sont pas uniques. Une cellule peut s'étendre sur plusieurs cellules, verticalement ou horizontalement, et les combinaisons de cellules s'étendant peuvent créer un grand nombre de variations structurelles. De plus, certains mettent l'accent sur les caractéristiques du texte et les lignes de tableau peuvent affecter la façon dont la structure du tableau est comprise. Par exemple, les lignes horizontales ou le texte en gras peuvent mettre en évidence plusieurs en-têtes du tableau. La structure du tableau définit visuellement les relations entre les cellules. Les relations visuelles dans les tableaux rendent difficile la recherche informatique des cellules associées et l'extraction d'informations à partir d'elles. Il est donc important de créer des algorithmes robustes pour gérer différentes structures de tables.
  • Rembourrage cellulaire, marges, bordures: Ce sont les éléments essentiels de toute table - les rembourrages, les marges et les bordures ne seront pas toujours les mêmes. Certaines tables ont beaucoup de remplissage à l'intérieur des cellules, d'autres non. L'utilisation d'images de bonne qualité et d'étapes de prétraitement aidera le processus d'extraction de table à se dérouler sans heurts.

Extraction de tableaux

Il s'agit de la phase où les informations sont extraites une fois les tables identifiées. Il existe de nombreux facteurs concernant la structure du contenu et le contenu présent dans le tableau. Il est donc important de comprendre tous les défis avant de construire un algorithme.

  • Contenu dense: Le contenu des cellules peut être numérique ou textuel. Cependant, le contenu textuel est généralement dense, contenant de courts morceaux de texte ambigus avec l'utilisation d'acronymes et d'abréviations. Pour comprendre les tableaux, le texte doit être ambigu et les abréviations et acronymes doivent être développés.
  • Différentes polices et formats: Les polices sont généralement de styles, de couleurs et de hauteurs différentes. Nous devons nous assurer qu'ils sont génériques et faciles à identifier. Peu de familles de polices, en particulier celles qui relèvent du cursif ou de l'écriture manuscrite, sont un peu difficiles à extraire. Par conséquent, l'utilisation d'une bonne police et d'un formatage approprié aide l'algorithme à identifier les informations plus précisément.
  • PDF et sauts de page multiples: La ligne de texte dans les tableaux est sensible à un seuil prédéfini. De plus, avec des cellules couvrant plusieurs pages, il devient difficile d'identifier les tableaux. Sur une page multi-tables, il est difficile de distinguer les différents tableaux les uns des autres. Il est difficile de travailler avec des tables clairsemées et irrégulières. Par conséquent, les lignes de décision graphiques et la disposition du contenu doivent être utilisées ensemble comme sources importantes pour repérer les régions de table.

Conversion de table

La dernière phase comprend la conversion des informations extraites des tableaux pour les compiler en tant que document modifiable, soit en Excel soit en utilisant un autre logiciel. Découvrons quelques défis.

  • Définir les dispositions: Lorsque différents formats de tableaux sont extraits de documents numérisés, nous devons avoir une mise en page de tableau appropriée pour insérer le contenu. Parfois, l'algorithme ne parvient pas à extraire les informations des cellules. Par conséquent, la conception d'une mise en page appropriée est également importante.
  • Variété de modèles de présentation de valeur: Les valeurs dans les cellules peuvent être présentées en utilisant différents modèles de représentation syntaxique. Considérez le texte dans le tableau comme étant 6 ± 2. L'algorithme peut ne pas réussir à convertir ces informations particulières. Par conséquent, l'extraction de valeurs numériques nécessite la connaissance des modèles de présentation possibles.
  • Représentation pour la visualisation: La plupart des formats de représentation des tableaux, tels que les langages de balisage dans lesquels les tableaux peuvent être décrits, sont conçus pour la visualisation. Par conséquent, il est difficile de traiter automatiquement les tables.

Ce sont les défis auxquels nous sommes confrontés lors du processus d'extraction de table en utilisant des techniques traditionnelles. Voyons maintenant comment les surmonter avec l'aide du Deep Learning. Il fait l'objet de nombreuses recherches dans divers secteurs.



Besoin de numériser des documents, des reçus ou factures mais trop paresseux pour coder? Dirigez-vous vers nanonets et construisez des modèles OCR gratuitement!


Résumé

Dans cet article, nous avons examiné en détail l'extraction d'informations à partir de tables. Nous avons vu comment des technologies modernes telles que Deep Learning et Computer Vision peuvent automatiser des tâches banales en créant des algorithmes robustes pour produire des résultats précis. Dans les premières sections, nous avons découvert le rôle de l'extraction de tableaux dans la facilitation des tâches des individus, des industries et des secteurs d'activité, et nous avons également passé en revue des cas d'utilisation élaborant sur l'extraction de tableaux à partir de PDF/HTML, l'automatisation de formulaires, facture Automatisation, etc. Nous avons codé un algorithme utilisant Computer Vision pour trouver la position des informations dans les tableaux en utilisant des techniques de seuillage, de dilatation et de détection de contour. Nous avons discuté des défis auxquels nous pourrions être confrontés lors des processus de détection, d'extraction et de conversion de table lors de l'utilisation des techniques conventionnelles, et expliqué comment l'apprentissage en profondeur peut nous aider à surmonter ces problèmes. Enfin, nous avons passé en revue quelques architectures de réseaux de neurones et compris leurs façons de réaliser l'extraction de table en fonction des données de formation données.



Mettre à jour:
‌ Ajout de davantage de matériel de lecture sur les différentes approches de détection de tables et d'extraction d'informations à l'aide de l'apprentissage en profondeur.

Horodatage:

Plus de AI et apprentissage automatique