Tabelldeteksjon og informasjonsekstraksjon ved hjelp av dyp læring

Kilde node: 1325422

Introduksjon til tabellekstraksjon

Mengden data som samles inn øker drastisk dag for dag med økende antall applikasjoner, programvare og nettplattformer.

For å håndtere/få tilgang til disse enorme dataene produktivt, er det nødvendig å utvikle verdifulle verktøy for utvinning av informasjon.

Et av underområdene som krever oppmerksomhet i informasjonsutvinning-feltet er utvinning av tabeller fra bilder eller gjenkjenning av tabelldata fra skjemaer, PDF-er og dokumenter.

Tabellutvinning er oppgaven med å oppdage og dekomponere tabellinformasjon i et dokument.

Tabell OCR - Nanonetter trekker ut tabelldata fra et bilde!
Tabell OCR – Nanonetter trekker ut tabelldata fra et bilde!

Tenk deg at du har mange dokumenter med tabelldata som du må trekke ut for videre behandling. Vanligvis kan du kopiere dem manuelt (på et papir) eller legge dem i Excel-ark.

Med OCR-programvare for tabeller kan du imidlertid automatisk oppdage tabeller og trekke ut alle tabelldata fra dokumenter på én gang. Dette sparer mye tid og etterarbeid.

I denne artikkelen skal vi først se på hvordan Nanonets automatisk kan trekke ut tabeller fra bilder eller dokumenter. Vi vil deretter dekke noen populære DL-teknikker for å oppdage og trekke ut tabeller i dokumenter.


Vil du trekke ut tabelldata fra fakturaer, kvitteringer eller andre typer dokumenter? Sjekk ut Nanonets' PDF-tabelluttrekk å trekke ut tabelldata. Planlegg en demo for å lære mer om automatisering utvinning av bordet.


Innholdsfortegnelse

Trekk ut tabell fra bilde med Nanonets Table OCR

  • Meld deg på for en gratis Nanonets-konto

    • Last opp bilder/filer til Nanonets Table OCR-modell
    • Nanonetter oppdager og trekker ut alle tabelldataene automatisk
    • Rediger og se gjennom dataene (hvis nødvendig)
    • Eksporter de behandlede dataene som Excel, csv eller JSON

Trekk ut tabell fra bilde med nanonetter

Lyst til å skrap data fra PDF dokumenter, konvertere PDF-tabell til Excel or automatisere bordutvinning? Finne ut hvordan nanonetter PDF-skrape or PDF-parser kan gjøre bedriften mer produktiv.


Nanonets Table OCR API

Tabell OCR med nanonetter
Tabell OCR med nanonetter

De Nanonets OCR API lar deg enkelt bygge OCR-modeller. Du trenger ikke å bekymre deg for å forhåndsbehandle bildene dine eller bekymre deg for å matche maler eller bygge regelbaserte motorer for å øke nøyaktigheten til OCR-modellen.

Du kan laste opp dataene dine, kommentere dem, sette modellen til å trene og vente på å få spådommer gjennom et nettleserbasert brukergrensesnitt uten å skrive en eneste linje med kode, bekymre deg for GPUer eller finne de riktige arkitekturene for tabelldeteksjonen din ved hjelp av dyplæringsmodeller.

Du kan også skaffe deg JSON-svarene til hver prediksjon for å integrere den med dine egne systemer og bygge maskinlæringsdrevne apper bygget på toppmoderne algoritmer og en sterk infrastruktur.

https://nanonets.com/documentation/


Håndterer virksomheten din data eller tekstgjenkjenning i digitale dokumenter, PDF-er eller bilder? Har du lurt på hvordan du trekker ut tabelldata, trekke ut tekst fra bilder , trekke ut data fra PDF or trekk ut tekst fra PDF nøyaktig og effektivt?


Hvem vil finne tabellekstraksjon nyttig

Som diskutert i forrige avsnitt, brukes tabeller ofte for å representere data i et rent format. Vi kan se dem så ofte på tvers av flere områder, fra å organisere arbeidet vårt ved å strukturere data på tvers av tabeller til å lagre store eiendeler til selskaper. Det er mange organisasjoner som må håndtere millioner av bord hver dag. For å lette slike arbeidskrevende oppgaver med å gjøre alt manuelt, må vi ty til raskere teknikker. La oss diskutere noen brukstilfeller hvor trekke ut tabeller kan være avgjørende:

kilde: Patrick Tomasso, Uplask

Personlige brukssaker

De utvinning av bordet prosessen kan også være nyttig for små personlig bruk. Noen ganger fanger vi opp dokumenter på mobiltelefonen og kopierer dem senere til datamaskinene våre. I stedet for å bruke denne prosessen kan vi fange opp dokumentene direkte og lagre dem som redigerbare formater i våre egendefinerte maler. Nedenfor er noen brukstilfeller om hvordan vi kan tilpasse borduttrekk i vår personlige rutine –

Skanne dokumenter til telefon: Vi tar ofte bilder av viktige tabeller på telefonen og lagrer dem, men med teknikken for tabellutvinning kan vi ta bilder av bordene og lagre dem direkte i tabellformat, enten i excel- eller google-ark. Med dette trenger vi ikke søke etter bilder eller kopiere tabellinnholdet til noen nye filer, i stedet kan vi direkte bruke de importerte tabellene og begynne å jobbe med den ekstraherte informasjonen.

Dokumenter til HTML: På websider finner vi masse informasjon presentert ved hjelp av tabeller. De hjelper oss i sammenligning med dataene og gir oss en rask merknad om tallene på en organisert måte. Ved å bruke prosessen for tabellutvinning kan vi skanne PDF-dokumenter eller JPG / PNG-bilder, og laste informasjonen direkte inn i et tilpasset, selvdesignet tabellformat. Vi kan videre skrive skript for å legge til flere tabeller basert på eksisterende tabeller, og derved digitalisere informasjonen. Dette hjelper oss med å redigere innholdet og raskere lagringsprosessen.


Industrielle brukssaker

Det er flere bransjer over hele verden som kjører enormt på papirer og dokumentasjon, spesielt i bank- og forsikringssektoren. Fra lagring av kundedetaljer til å ivareta kundenes behov, er tabeller mye brukt. Denne informasjonen sendes igjen som et dokument (papirkopi) til forskjellige grener for godkjenning, hvor noen ganger feilkommunikasjon kan føre til feil mens du henter informasjon fra tabeller. I stedet for å bruke automatisering her, gjør livet vårt mye enklere. Når de første dataene er fanget og godkjent, kan vi skanne disse dokumentene direkte i tabeller og arbeide videre med de digitaliserte dataene. For ikke å si reduksjon av tidsforbruk og feil, kan vi varsle kundene om tidspunktet og stedet der informasjonen blir behandlet. Dette sikrer derfor pålitelighet av data, og forenkler vår måte å takle operasjoner på. La oss nå se på de andre mulige brukssakene:

Kvalitetskontroll: Kvalitetskontroll er en av kjernetjenestene toppindustriene tilbyr. Det gjøres vanligvis internt og for interessentene. Som en del av dette er det mange tilbakemeldingsskjemaer som samles inn fra forbrukerne for å hente ut tilbakemeldinger om tjenesten. I industrisektorer bruker de tabeller for å notere daglige sjekklister og notater for å se hvordan produksjonslinjene fungerer. Alle disse kan dokumenteres på ett sted ved hjelp av bordutvinning med letthet.

Spor av eiendeler: I industrien bruker folk hardkodede bord for å holde rede på produserte enheter som stål, jern, plast osv. Alle produserte gjenstander er merket med et unikt nummer der de bruker tabeller for å holde oversikt over varer som produseres og leveres hver dag. Automatisering kan bidra til å spare mye tid og ressurser når det gjelder feilplasseringer eller datainkonsistens.


Business use cases

Det er flere næringslivet som kjører på excel-ark og offline-skjemaer. Men på et tidspunkt er det vanskelig å søke gjennom disse arkene og skjemaene. Hvis vi skriver inn disse tabellene manuelt, er det tidkrevende, og sjansen for at data blir skrevet inn feil vil være stor. Derfor er tabellutvinning et bedre alternativ for å løse forretningsbrukssaker som sådan nedenfor er få.

Faktura Automatisering: Det er mange små og store industrier som har fakturaer genereres fortsatt i tabellformater. Disse gir ikke riktig sikrede skatteoppgaver. For å overvinne slike hindringer kan vi bruke tabellekstraksjon for å konvertere alle fakturaer til et redigerbart format og dermed oppgradere dem til en nyere versjon.

Skjemautomatisering: Nettskjemaer forstyrrer denne utprøvde metoden ved å hjelpe bedrifter med å samle inn informasjonen de trenger og samtidig koble den til andre programvareplattformer innebygd i arbeidsflyten deres. I tillegg til å redusere behovet for manuell dataregistrering (med automatisert datainntasting) og oppfølgings-e-poster, kan tabellutvinning eliminere kostnadene ved å skrive ut, sende, lagre, organisere og ødelegge de tradisjonelle papiralternativene.


Har du et OCR-problem i tankene? Ønsker å digitalisere fakturaer, PDF-filer eller nummerplater? Gå over til Nanonetter og bygg OCR-modeller gratis!


Dyp læring i aksjon

Dyp læring er en del av den bredere familien av maskinlæringsmetoder basert på kunstige nevrale nettverk.

Neural Network er et rammeverk som gjenkjenner de underliggende forholdene i de gitte dataene gjennom en prosess som etterligner måten den menneskelige hjerne fungerer på. De har forskjellige kunstige lag som dataene går gjennom, hvor de lærer om funksjoner. Det er forskjellige arkitekturer som Convolution NNs, Recurrent NNs, Autoencoders, Generative Adversarial NNs for prosessering av forskjellige typer data. Disse er komplekse, men skildrer høy ytelse for å takle problemer i sanntid. La oss nå se på forskningen som er utført i tabellutvinningsfeltet ved hjelp av Neural Networks, og også, la oss gjennomgå dem kort.


TableNet

Papir: TableNet: Deep Learning-modell for end-to-end tabellgjenkjenning og tabelldatautvinning fra skannede dokumentbilder

Introduksjon: TableNet er en moderne dyplæringsarkitektur som ble foreslått av et team fra TCS Research-året i 2019. Hovedmotivasjonen var å hente ut informasjon fra skannede tabeller gjennom mobiltelefoner eller kameraer.

De foreslo en løsning som inkluderer nøyaktig deteksjon av tabellområdet i et bilde og deretter oppdage og trekke ut informasjon fra radene og kolonnene i den oppdagede tabellen.

Datasett: Datasettet som ble brukt var Marmot. Den har 2000 sider i PDF-format som ble samlet med tilsvarende bakkesannheter. Dette inkluderer også kinesiske sider. Lenke - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Arkitektur: Arkitekturen er basert på Long et al., en koder-dekoder-modell for semantisk segmentering. Det samme koder-/dekodernettverket brukes som FCN-arkitekturen for tabellekstraksjon. Bildene er forhåndsbehandlet og modifisert ved hjelp av Tesseract OCR.

Modellen er avledet i to faser ved å underkaste innspillene dype læringsteknikker. I den første fasen har de brukt vektene til et forutlært VGG-19-nettverk. De har erstattet de fullt tilkoblede lagene i det brukte VGG-nettverket med 1 × 1 konvolusjonslag. Alle konvolusjonslagene blir fulgt av ReLU-aktivering og et frafallslag med sannsynlighet 0.8. De kaller den andre fasen som det dekodede nettverket som består av to grener. Dette er i henhold til intuisjonen at kolonneområdet er en delmengde av tabellområdet. Dermed kan det enkelt kodende nettverket filtrere ut de aktive områdene med bedre nøyaktighet ved hjelp av funksjonene i både tabell- og kolonneområder. Produksjonen fra det første nettverket distribueres til de to grenene. I den første grenen brukes to konvolusjonsoperasjoner, og det endelige funksjonskartet oppskaleres for å oppfylle de opprinnelige bildedimensjonene. I den andre grenen for å oppdage kolonner, er det et ekstra konvolusjonslag med en ReLU-aktiveringsfunksjon og et frafallssjikt med samme frafallssannsynlighet som nevnt tidligere. Funksjonskartene samples opp ved bruk av brøkdelte krøller etter et (1 × 1) konvolusjonslag. Nedenfor er et bilde av arkitekturen:

Arkitekturen til TableNet

Utganger: Etter at dokumentene er behandlet ved hjelp av modellen, blir masker av tabeller og kolonner generert. Disse maskene brukes til å filtrere ut tabellen og dens kolonneområder fra bildet. Nå bruker Tesseract OCR, blir informasjonen hentet fra de segmenterte regionene. Nedenfor er et bilde som viser maskene som blir generert og senere hentet fra tabellene:

De foreslo også den samme modellen som er finjustert med ICDAR som presterte bedre enn den opprinnelige modellen. Recall, Precision og F1-Score for den finjusterte modellen er henholdsvis 0.9628, 0.9697, 0.9662. Den opprinnelige modellen har de registrerte beregningene 0.9621, 0.9547, 0.9583 i samme rekkefølge. La oss nå dykke ned i en arkitektur til.


DeepDeSRT

Papir: DeepDeSRT: Deep Learning for deteksjon og strukturgjenkjenning av tabeller i dokumentbilder

Introduksjon: DeepDeSRT er et Neural Network-rammeverk som brukes til å oppdage og forstå tabellene i dokumentene eller bildene. Den har to løsninger som nevnt i tittelen:

  1. Den presenterer en dyp læringsbasert løsning for borddeteksjon i dokumentbilder.
  2. Den foreslår en ny dyp læringsbasert tilnærming for gjenkjenning av tabellstruktur, dvs. identifisering av rader, kolonner og celleposisjoner i de oppdagede tabellene.

Den foreslåtte modellen er fullstendig databasert, den krever ikke heuristikk eller metadata for dokumentene eller bildene. En hovedfordel med hensyn til opplæringen er at de ikke brukte store treningsdatasett, i stedet brukte de konseptet med transfer learning og domenetilpasning for både borddeteksjon og gjenkjenning av tabellstruktur.

Datasett: Datasettet som er brukt er et ICDAR 2013-tabellkonkurransedatasett som inneholder 67 dokumenter med 238 sider totalt.

Arkitektur:

  • Tabelloppdagelse Den foreslåtte modellen brukte Fast RCNN som grunnleggende rammeverk for å oppdage tabellene. Arkitekturen er delt inn i to forskjellige deler. I den første delen genererte de regionforslag basert på inngangsbildet fra et såkalt regionforslagsnettverk (RPN). I den andre delen klassifiserte de regionene ved hjelp av Fast-RCNN. For å støtte denne arkitekturen brukte de ZFNet og vektene til VGG-16.
  • Strukturgjenkjenning Etter at en tabell har blitt oppdaget og systemet er kjent for systemet, er den neste utfordringen med å forstå innholdet å gjenkjenne og finne radene og kolonnene som utgjør den fysiske strukturen til tabellen. Derfor har de brukt et fullt tilkoblet nettverk med vekten til VGG-16 som trekker ut informasjon fra radene og kolonnene. Nedenfor er utgangene til DeepDeSRT:

utganger:

Utganger fra tabelldeteksjon
Utganger fra strukturgjenkjenning [6]

Evalueringsresultatene avslører at DeepDeSRT overgår toppmoderne metoder for borddeteksjon og strukturgjenkjenning, og oppnår F1-mål på henholdsvis 96.77% og 91.44% for borddeteksjon og strukturgjenkjenning frem til 2015.


Graf Neural Networks

Papir: Omtenking av bordgjenkjenning ved hjelp av Graph Neural Networks

Introduksjon: I denne forskningen foreslo forfatterne fra Deep Learning Laboratory, National Center of Artificial Intelligence (NCAI) Graph Neural Networks for å hente ut informasjon fra tabeller. De hevdet at grafnettverk er et mer naturlig valg for disse problemene, og utforsket videre to gradientbaserte nevrale nettverk.

Denne foreslåtte modellen kombinerer fordelene med begge, konvolusjonelle nevrale nettverk for utvinning av visuelle funksjoner og grafnettverk for å håndtere problemstrukturen.

Datasett: Forfatterne foreslo et nytt stort syntetisk generert datasett på 0.5 millioner tabeller delt inn i fire kategorier.

  1. Bilder er vanlige bilder uten sammenslåing og med herskende linjer
  2. Bilder har forskjellige kanttyper, inkludert sporadisk fravær av linjelinjer
  3. Innfører sammenslåing av celle og kolonne
  4. Kameraet tok bilder med den lineære perspektivtransformasjonen

Arkitektur: De brukte et grunt konvolusjonsnettverk som genererer de respektive konvolusjonsfunksjonene. Hvis de romlige dimensjonene til utgangsfunksjonene ikke er de samme som inngangsbildet, samler de posisjoner som er nedskalert lineært, avhengig av forholdet mellom inngangs- og utgangsdimensjoner og sender dem til et interaksjonsnettverk som har to grafnettverk kjent som DGCNN og GravNet. Parametrene til grafnettverket er de samme som den opprinnelige CNN. Til slutt har de brukt en runtime-parprøve for å klassifisere innholdet som er hentet som internt brukte den Monte Carlo-baserte algoritmen. Nedenfor er utgangene:

Utganger:

Outputs generert av Graph Neural Networks

Nedenfor er tallene for nøyaktighet i tabellene som genereres av nettverkene for fire kategorier av nettverket som presentert i datasett avsnitt:


CGAN og genetiske algoritmer

Papir: Utvinning av tabeller fra dokumenter ved bruk av betingede generelle motstandernettverk og genetiske algoritmer

Introduksjon: I denne undersøkelsen brukte forfatterne en top-down-tilnærming i stedet for å bruke en bottom-up (integrering av linjer i celler, rader eller kolonner).

I denne metoden, ved hjelp av et generativt motstandernettverk, kartla de tabellbildet til et standardisert skjelett-tabellform. Denne skjelettabellen angir den omtrentlige rad- og kolonnekanten uten tabellinnholdet. Deretter passer de gjengivelsene av latente tabellstrukturer til skjelettstrukturen ved hjelp av et avstandsmåling optimalisert av en genetisk algoritme.

Datasett: Forfatterne brukte sitt eget datasett som har 4000 tabeller.

Arkitektur: Modellen som foreslås består av to deler. I den første delen blir inngangsbildene abstrahert i skjelettbord ved hjelp av et betinget generativt adversarial nevralt nettverk. En GAN har to nettverk igjen, generatoren som genererer tilfeldige prøver og diskriminator som forteller om de genererte bildene er falske eller originale. Generator G er et koderen-dekodernettverk der et inngangsbilde føres gjennom en serie gradvis nedsamplingslag til et flaskehalslag der prosessen blir reversert. For å overføre tilstrekkelig informasjon til avkodingslagene, brukes en U-Net-arkitektur med hoppforbindelser, og en hoppforbindelse legges til mellom lagene i og n - i via sammenføyning, hvor n er det totale antallet lag, og jeg er lagnummeret i koderen. En PatchGAN-arkitektur brukes til diskriminatoren D. Dette straffer utgangsbildestrukturen i målestokk. Disse produserer produksjonen som et skjelettbord.

I den andre delen optimaliserer de tilpasningen av kandidat latente datastrukturer til det genererte skjelettbildet ved hjelp av et mål på avstanden mellom hver kandidat og skjelettet. Slik ekstraheres teksten inne i bildene. Nedenfor er et bilde som viser arkitekturen:

Generell skjematisk tilnærming

Produksjon: De estimerte tabellstrukturene blir evaluert ved å sammenligne - Rad- og kolonnetall, Øvre venstre hjørneposisjon, Radhøyder og kolonnebredder

Den genetiske algoritmen ga 95.5% nøyaktighet radvis og 96.7% nøyaktighet kolonnemessig mens den hentet informasjon fra tabellene.


Behov for å digitalisere dokumenter, kvitteringer or fakturaer men for lat til å kode? Gå over til Nanonetter og bygg OCR-modeller gratis!


[Kode] Tradisjonelle tilnærminger

I denne delen lærer vi prosessen med hvordan man henter ut informasjon fra tabeller ved hjelp av Deep Learning og OpenCV. Du kan tenke på denne forklaringen som en introduksjon, men å bygge toppmoderne modeller vil trenge mye erfaring og praksis. Dette vil hjelpe deg med å forstå det grunnleggende om hvordan vi kan trene datamaskiner med forskjellige mulige tilnærminger og algoritmer.

For å forstå problemet på en mer presis måte, definerer vi noen grunnleggende begreper, som vil bli brukt i hele artikkelen:

  • tekst: inneholder en streng og fem attributter (øverst, venstre, bredde, høyde, skrift)
  • linje: inneholder tekstobjekter som antas å være på samme linje i originalfilen
  • Enkel linje: linjeobjekt med bare ett tekstobjekt.
  • Multi-Line: linjeobjekt med mer enn ett tekstobjekt.
  • Multi-Line Blokker: et sett med kontinuerlige objekter med flere linjer.
  • Rad: Horisontale blokker i tabellen
  • Kolonne: Vertikale blokker i tabellen
  • Cell: skjæringspunktet mellom en rad og kolonne
  • Celle - polstring: den interne polstringen eller plassen inne i cellen.

Tabelldeteksjon med OpenCV

Vi bruker tradisjonelle datasynteknikker for å hente ut informasjon fra de skannede tabellene. Her er rørledningen vår; vi fanger først inn dataene (tabellene der vi trenger å hente ut informasjonen) ved hjelp av vanlige kameraer, og deretter bruker vi datasyn, vi prøver å finne kantene, kantene og cellene. Vi bruker forskjellige filtre og konturer, og vi vil fremheve kjernefunksjonene i tabellene.

Vi trenger et bilde av et bord. Vi kan fange dette på en telefon eller bruke et hvilket som helst eksisterende bilde. Nedenfor er kodebiten,

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

Her har vi lastet det samme bildebildet to variabler siden vi skal bruke table_image_contour når du tegner våre oppdagede konturer på det lastede bildet. Nedenfor er bildet av tabellen som vi bruker i vårt program:

Bilde av bordet

Vi skal bruke en teknikk som kalles Invers bildeterskel som forbedrer dataene som er tilstede i det gitte bildet.

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

Et annet viktig forhåndsbehandlingstrinn er bildedilatasjon. Dilatasjon er en enkel matteoperasjon som brukes på binære bilder (svart-hvitt) som gradvis utvider grensene for regioner med forgrunnspiksler (dvs. hvite piksler, vanligvis).

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

I OpenCV bruker vi metoden, finn konturer for å få konturene i det nåværende bildet. Denne metoden tar tre argumenter, det første er det utvidede bildet (bildet som brukes til å generere det utvidede bildet er table_image_contour - findContours-metoden støtter bare binære bilder), det andre er cv2.RETR_TREE som forteller oss å bruke konturinnhentingsmodus, den tredje er  cv2.CHAIN_APPROX_SIMPLE som er tilnærmet modus for kontur. De finn konturer pakker ut to verdier, derfor legger vi til en variabel til med navnet hierarki. Når bildene er nestet utstråler konturene gjensidig avhengighet. For å representere slike forhold brukes hierarki.

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

Konturene markerer hvor nøyaktig dataene er tilstede i bildet. Nå gjentar vi over konturlisten som vi beregnet i forrige trinn og beregner koordinatene til de rektangulære boksene som observert i originalbildet ved hjelp av metoden,  cv2.boundingRect. I den siste iterasjonen satte vi disse boksene på den opprinnelige bildetabellen_bildet ved hjelp av metoden, 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) 

Dette er vårt siste skritt. Her bruker vi metoden heter Windows å gjengi bordet vårt med det ekstraherte innholdet og konturene innebygd. Nedenfor er kodebiten:

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

Utganger

Endre verdien på y til 300 i kodebiten ovenfor, dette vil være utdataene dine:

Når du har hentet ut tabellene, kan du kjøre hver konturavling gjennom tesseract OCR-motor, opplæringen som du finner her.. Når vi har bokser med hver tekst, kan vi gruppere dem basert på x- og y-koordinatene for å utlede hvilken tilsvarende rad og kolonne de tilhører.

I tillegg til dette, er det muligheten til å bruke PDFMiner til å gjøre pdf-dokumentene dine om til HTML-filer som vi kan analysere ved å bruke regulære uttrykk for å endelig få tabellene våre. Slik kan du gjøre det.


PDFMiner og Regex-parsing

For å trekke ut informasjon fra mindre dokumenter, tar det tid å konfigurere dyplæringsmodeller eller skrive datasynsalgoritmer. I stedet kan vi bruke regulære uttrykk i Python for å trekke ut tekst fra PDF-dokumentene. Husk også at denne teknikken ikke fungerer for bilder. Vi kan bare bruke dette til å trekke ut informasjon fra HTML-filer eller PDF-dokumenter. Dette er fordi når du bruker et regulært uttrykk, må du matche innholdet med kilden og trekke ut informasjon. Med bilder vil du ikke kunne matche teksten, og de regulære uttrykkene vil mislykkes. La oss nå jobbe med et enkelt PDF-dokument og trekke ut informasjon fra tabellene i det. Nedenfor er bildet:

I det første trinnet laster vi PDF-filen inn i programmet vårt. Når det er gjort, konverterer vi PDF-filen til HTML slik at vi direkte kan bruke vanlige uttrykk og derved trekke ut innhold fra tabellene. For dette er modulen vi bruker pdfminer. Dette hjelper deg med å lese innhold fra PDF og konvertere det til en HTML-fil.

Nedenfor er kodebiten:

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

Kodepoeng: zevross

Vi importerte mange moduler inkludert Regular Expression og PDF-relaterte biblioteker. I metoden convert_pdf_to_html, vi sender banen til PDF-filen som må konverteres til en HTML-fil. Resultatet av metoden vil være en HTML-streng som vist nedenfor:

'<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>' 

Regulært uttrykk er en av de vanskeligste og kuleste programmeringsteknikkene som brukes til mønstermatching. Disse brukes mye i flere applikasjoner, for eksempel for kodeformatering, nettskraping og validering. Før vi begynner å trekke ut innhold fra HTML-tabellene våre, kan vi raskt lære noen ting om vanlige uttrykk.

Dette biblioteket gir ulike innebygde metoder for å matche og søke etter mønstre. Nedenfor er noen få:

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)

Tegn / uttrykk du vanligvis ser i vanlige uttrykk inkluderer:

  • [AZ] - hvilken som helst stor bokstav
  • d - siffer
  • w - ordtegn (bokstaver, sifre og understreker)
  • s - mellomrom (mellomrom, tabulatorer og mellomrom)

Nå for å finne ut et bestemt mønster i HTML, bruker vi vanlige uttrykk og skriver mønstre deretter. Vi deler først dataene slik at adressebunker er adskilt i separate blokker i samsvar med programnavnet (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…

Senere finner vi programnavnet, byen, staten og zip som alltid følger samme mønster (tekst, komma, to-sifrede store bokstaver, 5 tall (eller 5 tall bindestrek fire tall) - disse er til stede i PDF-filen som vi betraktet som innspill). Sjekk følgende kodebit:

# 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)) 

Dette er et enkelt eksempel som forklarer hvordan vi trekker ut informasjon fra PDF-filer ved hjelp av et regulært uttrykk. Etter å ha hentet ut all nødvendig informasjon, laster vi disse dataene inn i en CSV-fil.

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

Så dette er et enkelt eksempel som forklarer hvordan du kan skyve den ekstraherte HTML-en inn i en CSV-fil. Først oppretter vi en CSV-fil, finner alle attributtene våre og skyver en og en inn i deres respektive kolonner. Nedenfor er et skjermbilde:

Skjermbilde av elementene hentet fra tabeller ved bruk av regulære uttrykk

Noen ganger virker de ovennevnte teknikkene kompliserte og gir utfordringer for programmererne hvis bordene i det hele tatt er nestede og komplekse. Her sparer du mye tid å velge en CV eller Deep learning-modell. La oss se hvilke ulemper og utfordringer som hindrer bruken av disse tradisjonelle metodene.


Utfordringer med tradisjonelle metoder

I denne delen vil vi lære grundig om hvor tabellutvinningsprosessene kan mislykkes, og videre forstå måtene å overvinne disse hindringene ved hjelp av moderne metoder født ut av Deep Learning. Denne prosessen er ikke en cakewalk skjønt. Årsaken er at tabeller vanligvis ikke forblir konstante hele tiden. De har forskjellige strukturer for å representere dataene, og dataene i tabellene kan være flerspråklige med forskjellige formateringsstiler (skriftstil, farge, skriftstørrelse og høyde). Derfor for å bygge en robust modell, bør man være klar over alle disse utfordringene. Vanligvis inkluderer denne prosessen tre trinn: tabelldeteksjon, utvinning og konvertering. La oss identifisere problemene i alle faser, en etter en:


Tabelloppdagelse

I denne fasen identifiserer vi hvor nøyaktig tabellene er tilstede i den gitte innspillingen. Inndataene kan være i hvilket som helst format, for eksempel Bilder, PDF / Word-dokumenter og noen ganger videoer. Vi bruker forskjellige teknikker og algoritmer for å oppdage tabellene, enten etter linjer eller etter koordinater. I noen tilfeller kan det hende vi støter på tabeller uten grenser i det hele tatt, der vi må velge forskjellige metoder. Foruten disse er det noen få andre utfordringer:

  • Bildetransformasjon: Bildetransformasjon er et primært trinn i å oppdage etiketter. Dette inkluderer å forbedre dataene og grensene i tabellen. Vi må velge riktige forhåndsbehandlingsalgoritmer basert på dataene som er presentert i tabellen. For eksempel, når vi jobber med bilder, må vi bruke terskel- og kantdetektorer. Dette transformasjonstrinnet hjelper oss med å finne innholdet mer presist. I noen tilfeller kan konturene gå galt, og algoritmene klarer ikke å forbedre bildet. Derfor er det viktig å velge de riktige trinnene for bildetransformasjon og forbehandling.
  • Bildekvalitet: Når vi skanner tabeller for informasjonsutvinning, må vi sørge for at disse dokumentene skannes i lysere omgivelser, noe som gir bilder av god kvalitet. Når lysforholdene er dårlige, kan det hende at CV- og DL-algoritmer ikke oppdager tabeller i de angitte inngangene. Hvis vi bruker dyp læring, må vi sørge for at datasettet er konsistent og har et godt sett med standardbilder. Hvis vi bruker disse modellene på bord i gamle krøllete papirer, må vi først behandle og eliminere støyen i bildene.
  • Utvalg av strukturelle oppsett og maler: Alle bord er ikke unike. Én celle kan spenne over flere celler, enten vertikalt eller horisontalt, og kombinasjoner av spennende celler kan skape et stort antall strukturelle variasjoner. Noen legger også vekt på trekk ved tekst, og tabellinjer kan påvirke måten bordets struktur blir forstått på. For eksempel kan horisontale linjer eller fet skrift understreke flere overskrifter på tabellen. Tabellens struktur definerer visuelt forholdet mellom celler. Visuelle forhold i tabeller gjør det vanskelig å beregne de relaterte cellene og trekke ut informasjon fra dem. Derfor er det viktig å bygge algoritmer som er robuste i håndtering av forskjellige strukturer i tabeller.
  • Cellestopp, marginer, kanter: Dette er det viktigste ved ethvert bord - polstring, marginer og grenser vil ikke alltid være de samme. Noen bord har mye polstring inne i celler, og andre har ikke. Ved å bruke bilder av god kvalitet og forhåndsbehandlingstrinn vil prosessen for tabellutvinning løpe jevnt.

Tabellutvinning

Dette er fasen der informasjonen blir hentet ut etter at tabellene er identifisert. Det er mange faktorer angående hvordan innholdet er strukturert og hvilket innhold som finnes i tabellen. Derfor er det viktig å forstå alle utfordringene før man bygger en algoritme.

  • Tett innhold: Innholdet i cellene kan enten være numerisk eller tekstlig. Tekstinnholdet er imidlertid vanligvis tett, og inneholder tvetydige korte biter av tekst med bruk av akronymer og forkortelser. For å forstå tabeller, må teksten være entydig, og forkortelser og akronymer må utvides.
  • Ulike skrifter og formater: Fontene har vanligvis forskjellige stiler, farger og høyder. Vi må sørge for at disse er generiske og enkle å identifisere. Få fontfamilier, spesielt de som faller under kursiv eller håndskrevet, er litt vanskelig å hente ut. Derfor bruker god skrift og riktig formatering algoritmen til å identifisere informasjonen mer nøyaktig.
  • Flere siders PDF-filer og sideskift: Tekstlinjen i tabeller er følsom overfor en forhåndsdefinert terskel. Også med spenning av celler på flere sider blir det vanskelig å identifisere tabellene. På en flertabellside er det vanskelig å skille forskjellige tabeller fra hverandre. Tynne og uregelmessige bord er vanskelig å jobbe med. Derfor bør grafiske linjelinjer og innholdsoppsett brukes sammen som viktige kilder for å få øye på tabellregioner.

Tabellkonvertering

Den siste fasen inkluderer å konvertere den ekstraherte informasjonen fra tabeller til å kompilere dem som et redigerbart dokument, enten i Excel eller ved bruk av annen programvare. La oss lære om noen få utfordringer.

  • Sett oppsett: Når forskjellige formater av tabeller hentes fra skannede dokumenter, må vi ha et riktig bordoppsett for å skyve innholdet inn. Noen ganger klarer ikke algoritmen å trekke ut informasjon fra cellene. Derfor er det også like viktig å designe et riktig oppsett.
  • En rekke verdimessige presentasjonsmønstre: Verdier i celler kan presenteres ved hjelp av forskjellige syntaktiske representasjonsmønstre. Betrakt teksten i tabellen til å være 6 ± 2. Algoritmen kan mislykkes i å konvertere den aktuelle informasjonen. Derfor krever utvinning av numeriske verdier kunnskap om mulige presentasjonsmønstre.
  • Representasjon for visualisering: De fleste representasjonsformatene for tabeller, for eksempel markeringsspråk der tabeller kan beskrives, er designet for visualisering. Derfor er det utfordrende å automatisk behandle tabeller.

Dette er utfordringene vi møter i løpet av bordutvinningsprosessen ved hjelp av tradisjonelle teknikker. La oss nå se hvordan vi kan overvinne disse ved hjelp av Deep Learning. Det forskes mye på det i ulike sektorer.



Trenger å digitalisere dokumenter, kvitteringer eller fakturaer men for lat til å kode? Gå over til Nanonetter og bygg OCR-modeller gratis!


Oppsummering

I denne artikkelen har vi gjennomgått i detalj om informasjonsutvinning fra tabeller. Vi har sett hvordan moderne teknologier som Deep Learning og Computer Vision kan automatisere hverdagslige oppgaver ved å bygge robuste algoritmer for å gi nøyaktige resultater. I de innledende delene har vi lært om tabellutvinnings rolle i å lette oppgavene for enkeltpersoner, bransjer og næringssektorer, og vi har også gjennomgått brukstilfeller som utdyper utvinning av tabeller fra PDF-er/HTML, skjemaautomatisering, faktura Automatisering osv. Vi har kodet en algoritme ved hjelp av Computer Vision for å finne informasjonsposisjonen i tabellene ved hjelp av terskel-, dilatasjons- og konturdeteksjonsteknikker. Vi har diskutert utfordringene vi kan møte under tabelldeteksjons-, utvinnings- og konverteringsprosessene når vi bruker de konvensjonelle teknikkene, og uttalt hvordan dyp læring kan hjelpe oss med å overvinne disse problemene. Til slutt har vi gjennomgått noen få nevrale nettverksarkitekturer og forstått deres måter å oppnå tabellekstraksjon basert på de gitte treningsdataene.



Oppdatering:
‌ Lagt til mer lesestoff om ulike tilnærminger innen tabelldeteksjon og informasjonsutvinning ved hjelp av dyp læring.

Tidstempel:

Mer fra AI og maskinlæring