Detectarea tabelului și extragerea informațiilor folosind Deep Learning

Nodul sursă: 1325422

Introduction to Table Extraction

Cantitatea de date colectate crește drastic de la zi cu zi, odată cu un număr tot mai mare de aplicații, software și platforme online.

Pentru a gestiona/accesa aceste date uriașe în mod productiv, este necesar să se dezvolte instrumente valoroase de extragere a informațiilor.

Una dintre sub-domeniile care solicită atenție în domeniul Extracției de informații este extragerea tabelelor din imagini sau detectarea datelor tabulare din formulare, PDF-uri și documente.

Extragerea tabelului este sarcina de a detecta și descompune informațiile din tabel dintr-un document.

Table OCR - Nanonets extrage date de tabel dintr-o imagine!
Table OCR – Nanonets extrage date de tabel dintr-o imagine!

Imaginați-vă că aveți o mulțime de documente cu date tabelare pe care trebuie să le extrageți pentru procesare ulterioară. În mod convențional, le puteți copia manual (pe hârtie) sau le puteți încărca în foi Excel.

Cu toate acestea, cu software-ul OCR pentru tabele, puteți detecta automat tabelele și puteți extrage toate datele tabelare din documente dintr-o singură mișcare. Acest lucru economisește mult timp și reluare.

In this article, we'll first look at how Nanonets can automatically extract tables from images or documents. We'll then cover some popular DL techniques to detect and extract tables in documents.


Doriți să extrageți date tabelare din facturi, chitanțe sau orice alt tip de document? Vezi Nanonets Extractor de tabele PDF pentru a extrage date tabelare. Planificați o demonstrație pentru a afla mai multe despre automatizare extragerea mesei.


Cuprins

Extrageți tabelul din imagine cu Nanonets Table OCR

  • Înregistrează-te pentru un cont gratuit Nanonets

    • Încărcați imagini/fișiere în modelul Nanonets Table OCR
    • Nanonets automatically detects & extract all the tabular data
    • Editați și examinați datele (dacă este necesar)
    • Exportați datele procesate ca Excel, csv sau JSON

Extrageți tabelul din imagine cu Nanonets

Vrei sa răzuiește datele din PDF documente, convertiți tabelul PDF în Excel or automatizarea extragerii mesei? Afla cum Nanonets Scraper PDF or analizator PDF vă poate ajuta afacerea să fie mai productivă.


Nanonets Table OCR API

Tabel OCR cu Nanonets
Tabel OCR cu Nanonets

Nanonets API OCR vă permite să construiți modele OCR cu ușurință. Nu trebuie să vă faceți griji cu privire la preprocesarea imaginilor sau cu privire la potrivirea șabloanelor sau să construiți motoare bazate pe reguli pentru a crește acuratețea modelului dvs. OCR.

Puteți să vă încărcați datele, să le adnotați, să setați modelul să se antreneze și să așteptați să obțineți predicții printr-o interfață de utilizare bazată pe browser, fără a scrie o singură linie de cod, fără să vă faceți griji pentru GPU-uri sau să găsiți arhitecturile potrivite pentru detectarea tabelelor folosind modele de învățare profundă.

De asemenea, puteți obține răspunsurile JSON ale fiecărei predicții pentru a le integra cu propriile sisteme și pentru a construi aplicații bazate pe învățare automată, bazate pe algoritmi de ultimă generație și pe o infrastructură puternică.

https://nanonets.com/documentation/


Afacerea dumneavoastră se ocupă de recunoașterea datelor sau a textului în documente digitale, PDF-uri sau imagini? V-ați întrebat cum să extrageți date tabelare, extrageți text din imagini , extrageți date din PDF or extrageți text din PDF corect și eficient?


Cine va găsi utilă Extragerea de masă

După cum sa discutat în secțiunea anterioară, tabelele sunt utilizate frecvent pentru a reprezenta datele într-un format curat. Le putem vedea atât de des în mai multe domenii, de la organizarea muncii noastre prin structurarea datelor în tabele până la stocarea activelor uriașe ale companiilor. Există o mulțime de organizații care trebuie să se ocupe de milioane de mese în fiecare zi. Pentru a facilita astfel de sarcini laborioase de a face totul manual, trebuie să recurgem la tehnici mai rapide. Să discutăm câteva cazuri de utilizare în care extragerea tabelelor poate fi esential:

Sursa: Patrick Tomasso, Unsplash

Cazuri personale de utilizare

extragerea mesei procesul poate fi util și pentru cazurile personale mici de utilizare. Uneori capturam documente pe telefonul mobil și apoi le copiam pe computerele noastre. În loc să folosim acest proces, putem captura direct documentele și le putem salva ca formate editabile în șabloanele noastre personalizate. Mai jos sunt câteva cazuri de utilizare despre cum putem integra extragerea mesei în rutina noastră personală -

Scanarea documentelor pe telefon: Deseori capturam imagini ale tabelelor importante pe telefon și le salvăm, dar cu tehnica de extragere a tabelelor, putem captura imaginile tabelelor și le putem stoca direct în format tabelar, fie în Excel, fie în foile Google. Cu aceasta, nu trebuie să căutăm imagini sau să copiem conținutul tabelului în fișiere noi, în schimb, putem folosi direct tabelele importate și începem să lucrăm la informațiile extrase.

Documente în HTML: În paginile web, găsim o mulțime de informații prezentate folosind tabele. Ne ajută în comparație cu datele și ne oferă o notă rapidă asupra numerelor într-un mod organizat. Utilizând procesul de extragere a tabelului, putem scana documente PDF sau imagini JPG/PNG și putem încărca informațiile direct într-un format de tabel personalizat, conceput de sine. Putem scrie în continuare scripturi pentru a adăuga tabele suplimentare bazate pe tabelele existente și, prin urmare, să digitalizăm informațiile. Acest lucru ne ajută la editarea conținutului și accelerează procesul de stocare.


Cazuri de utilizare industrială

Există mai multe industrii de pe tot globul care funcționează foarte mult pe documente și documente, în special în sectoarele bancare și asigurări. De la stocarea detaliilor clienților până la îngrijirea nevoilor clienților, tabelele sunt utilizate pe scară largă. Aceste informații sunt din nou transmise ca document (copie pe hârtie) către diferite filiale pentru aprobări, în care uneori, comunicarea greșită poate duce la erori în timpul preluarii informațiilor din tabele. În schimb, folosirea automatizării aici, ne face viața mult mai ușoară. Odată ce datele inițiale sunt capturate și aprobate, putem scana direct acele documente în tabele și putem lucra în continuare asupra datelor digitizate. Nu mai vorbim de reducerea consumului de timp și a defecțiunilor, putem anunța clienții despre ora și locația în care sunt procesate informațiile. Prin urmare, acest lucru asigură fiabilitatea datelor și simplifică modul nostru de a aborda operațiunile. Să ne uităm acum la celelalte posibile cazuri de utilizare:

Controlul calității: Controlul calității este unul dintre serviciile de bază pe care le oferă industriile de top. De obicei, se face intern și pentru părțile interesate. Ca parte a acestui lucru, există o mulțime de formulare de feedback care sunt colectate de la consumatori pentru a extrage feedback despre serviciul oferit. În sectoarele industriale, ei folosesc tabele pentru a nota liste de verificare zilnice și note pentru a vedea cum funcționează liniile de producție. Toate acestea pot fi documentate într-un singur loc folosind extragerea de masă cu ușurință.

Urmărirea activelor: În industriile de producție, oamenii folosesc tabele codificate pentru a ține evidența entităților fabricate precum oțel, fier, plastic etc. Fiecare articol fabricat este etichetat cu un număr unic în care folosesc tabele pentru a ține evidența articolelor fabricate și livrate în fiecare zi. Automatizarea poate ajuta la economisirea multor timp și active în ceea ce privește deplasările greșite sau inconsecvența datelor.


Cazuri de utilizare în afaceri

Există mai multe industrii de afaceri care rulează pe foi Excel și formulare offline. Dar, la un moment dat, este dificil să cauți prin aceste foi și formulare. Dacă introducem manual aceste tabele, este consumator de timp și șansa ca datele introduse incorect va fi mare. Prin urmare, extragerea tabelelor este o alternativă mai bună pentru a rezolva cazurile de utilizare în afaceri, deoarece mai jos sunt puține.

Factură Automatizare: Există multe industrii la scară mică și la scară mare ale căror facturi sunt încă generate în formate tabelare. Acestea nu oferă declarații fiscale garantate corespunzător. Pentru a depăși astfel de obstacole, putem folosi extragerea tabelelor pentru a le converti pe toate facturi într-un format editabil și, prin urmare, actualizați-le la o versiune mai nouă.

Automatizare formulare: Formularele online perturbă această metodă încercată și adevărată, ajutând companiile să colecteze informațiile de care au nevoie și conectându-le simultan la alte platforme software integrate în fluxul lor de lucru. Pe lângă reducerea nevoii de introducere manuală a datelor (cu introducerea automată a datelor) și e-mailuri ulterioare, extragerea tabelelor poate elimina costul tipăririi, trimiterii prin poștă, stocării, organizării și distrugerii alternativelor tradiționale de hârtie.


Ai în minte o problemă OCR? Doriți să digitalizați facturi, PDF-uri sau plăcuțe de înmatriculare? Du-te la Nanoneți și construiește gratuit modele OCR!


Învățare profundă în acțiune

Învățarea profundă face parte din familia mai largă de metode de învățare automată bazate pe rețele neuronale artificiale.

Rețeaua neuronală este un cadru care recunoaște relațiile care stau la baza datelor date printr-un proces care imită modul în care funcționează creierul uman. Au diferite straturi artificiale prin care trec datele, unde învață despre caracteristici. Există diferite arhitecturi, cum ar fi NN-uri de convoluție, NN-uri recurente, codificatoare automate, NN-uri adversare generative pentru a procesa diferite tipuri de date. Acestea sunt complexe, dar prezintă performanțe ridicate pentru a rezolva problemele în timp real. Să analizăm acum cercetările care au fost efectuate în domeniul extracției de tabel folosind rețele neuronale și, de asemenea, să le revizuim pe scurt.


TableNet

Hârtie: TableNet: model de învățare profundă pentru detectarea tabelelor de la capăt la capăt și extragerea datelor tabulare din imaginile documentelor scanate

Introducere: TableNet este o arhitectură modernă de deep learning care a fost propusă de o echipă din anul TCS Research în anul 2019. Principala motivație a fost extragerea informațiilor din tabelele scanate prin intermediul telefoanelor mobile sau camerelor.

Ei au propus o soluție care include detectarea precisă a regiunii tabulare într-o imagine și, ulterior, detectarea și extragerea informațiilor din rândurile și coloanele tabelului detectat.

Set de date: Setul de date utilizat a fost Marmot. Are 2000 de pagini în format PDF care au fost colectate cu adevărurile de bază corespunzătoare. Aceasta include și paginile chineze. Link – http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Arhitectură: Arhitectura se bazează pe Long și colab., un model de codificator-decodor pentru segmentarea semantică. Aceeași rețea de codificator/decodor este utilizată ca arhitectură FCN pentru extragerea tabelelor. Imaginile sunt preprocesate și modificate folosind Tesseract OCR.

Modelul este derivat în două faze prin supunerea intrării unor tehnici de învățare profundă. În prima fază, au folosit greutățile unei rețele VGG-19 preantrenate. Au înlocuit straturile complet conectate ale rețelei VGG utilizate cu straturi convoluționale 1×1. Toate straturile convoluționale sunt urmate de activarea ReLU și de un strat de abandon de probabilitate 0.8. Ei numesc a doua fază drept rețeaua decodificată care constă din două ramuri. Aceasta este conform intuiției că regiunea coloanei este un subset al regiunii tabelului. Astfel, rețeaua de codificare unică poate filtra regiunile active cu o mai bună acuratețe folosind caracteristicile atât ale regiunilor de tabel, cât și ale coloanei. Ieșirea din prima rețea este distribuită celor două ramuri. În prima ramură, sunt aplicate două operații de convoluție și harta caracteristică finală este mărită pentru a îndeplini dimensiunile imaginii originale. În cealaltă ramură pentru detectarea coloanelor, există un strat de convoluție suplimentar cu o funcție de activare ReLU și un strat de abandon cu aceeași probabilitate de abandonare ca cea menționată anterior. Hărțile de caracteristici sunt supraeșantionate folosind convoluții fracționale după un strat de convoluție (1×1). Mai jos este o imagine a arhitecturii:

Arhitectura TableNet

ieşiri: După ce documentele sunt procesate folosind modelul, sunt generate măștile de tabele și coloane. Aceste măști sunt folosite pentru a filtra tabelul și regiunile coloanei sale din imagine. Acum folosind Tesseract OCR, informațiile sunt extrase din regiunile segmentate. Mai jos este o imagine care arată măștile care sunt generate și extrase ulterior din tabele:

De asemenea, au propus același model care este reglat fin cu ICDAR, care a funcționat mai bine decât modelul original. Recall, Precision și F1-Score ale modelului reglat fin sunt 0.9628, 0.9697, respectiv 0.9662. Modelul original are valorile înregistrate de 0.9621, 0.9547, 0.9583 în aceeași ordine. Să ne aruncăm acum într-o altă arhitectură.


DeepDeSRT

Hârtie: DeepDeSRT: Învățare profundă pentru detectarea și recunoașterea structurii tabelelor din imaginile documentului

Introducere: DeepDeSRT este un cadru de rețea neuronală care este utilizat pentru a detecta și înțelege tabelele din documente sau imagini. Are două soluții, așa cum este menționat în titlu:

  1. Prezintă o soluție bazată pe învățarea profundă pentru detectarea tabelelor în imaginile documentelor.
  2. Propune o nouă abordare bazată pe învățarea profundă pentru recunoașterea structurii tabelelor, adică identificarea rândurilor, coloanelor și a pozițiilor celulelor în tabelele detectate.

Modelul propus este complet bazat pe date, nu necesită euristică sau metadate ale documentelor sau imaginilor. Un avantaj principal în ceea ce privește instruirea este că nu au folosit seturi mari de date de antrenament, ci au folosit conceptul de învățare prin transfer și adaptarea domeniului atât pentru detectarea tabelelor, cât și pentru recunoașterea structurii tabelului.

Set de date: Setul de date utilizat este un set de date de competiție de masă ICDAR 2013 care conține 67 de documente cu 238 de pagini în total.

Arhitectură:

  • Detectarea tabelului Modelul propus a folosit Fast RCNN ca cadru de bază pentru detectarea tabelelor. Arhitectura este împărțită în două părți diferite. În prima parte, au generat propuneri de regiune bazate pe imaginea de intrare de către o așa-numită rețea de propuneri de regiune (RPN). În a doua parte, au clasificat regiunile folosind Fast-RCNN. Pentru a susține această arhitectură, au folosit ZFNet și greutățile lui VGG-16.
  • Recunoașterea structurii După ce un tabel a fost detectat cu succes și locația lui este cunoscută de sistem, următoarea provocare în înțelegerea conținutului său este recunoașterea și localizarea rândurilor și coloanelor care alcătuiesc structura fizică a tabelului. Prin urmare, au folosit o rețea complet conectată cu greutățile VGG-16 care extrage informații din rânduri și coloane. Mai jos sunt ieșirile DeepDeSRT:

Ieșiri:

Ieșiri de detectare a tabelului
Rezultatele recunoașterii structurii [6]

Rezultatele evaluării arată că DeepDeSRT depășește metodele de ultimă generație pentru detectarea tabelelor și recunoașterea structurii și atinge măsurile F1 de 96.77% și 91.44% pentru detectarea tabelului și, respectiv, recunoașterea structurii, până în 2015.


Grafic rețele neuronale

Hârtie: Regândirea recunoașterii tabelelor folosind rețelele neuronale grafice

Introducere: În această cercetare, autorii de la Deep Learning Laboratory, Centrul Național de Inteligență Artificială (NCAI) au propus rețele neuronale grafice pentru extragerea informațiilor din tabele. Ei au susținut că rețelele de grafice sunt o alegere mai naturală pentru aceste probleme și au explorat în continuare două rețele neuronale de grafice bazate pe gradient.

Acest model propus combină beneficiile ambelor rețele neuronale convoluționale pentru extragerea caracteristicilor vizuale și ale rețelelor grafice pentru rezolvarea structurii problemei.

Set de date: Autorii au propus un nou set mare de date generate sintetic de 0.5 milioane de tabele împărțite în patru categorii.

  1. Imaginile sunt imagini simple, fără îmbinare și cu linii directoare
  2. Imaginile au diferite tipuri de chenar, inclusiv absența ocazională a liniilor de reglementare
  3. Introduce îmbinarea celulelor și coloanelor
  4. Camera a capturat imagini cu transformarea perspectivă liniară

Arhitectură: Au folosit o rețea convoluțională superficială care generează caracteristicile convoluționale respective. Dacă dimensiunile spațiale ale caracteristicilor de ieșire nu sunt aceleași cu cele ale imaginii de intrare, acestea colectează poziții care sunt reduse liniar în funcție de raportul dintre dimensiunile de intrare și de ieșire și le trimit la o rețea de interacțiune care are două rețele de grafice cunoscute sub numele de DGCNN și GravNet. Parametrii rețelei de grafice sunt aceiași cu CNN original. În cele din urmă, au folosit o eșantionare a perechilor de rulare pentru a clasifica conținutul care este extras, care a folosit intern algoritmul bazat pe Monte Carlo. Mai jos sunt ieșirile:

ieşiri:

Ieșiri generate de rețelele neuronale grafice

Mai jos sunt numerele de precizie tabulate care sunt generate de rețele pentru patru categorii ale rețelei, așa cum sunt prezentate în Setul de date secțiune:


CGAN și algoritmi genetici

Hârtie: Extragerea tabelelor din documente folosind rețele contradictorii generative condiționate și algoritmi genetici

Introducere: În această cercetare, autorii au folosit o abordare de sus în jos în loc să utilizeze o abordare de jos în sus (integrarea liniilor în celule, rânduri sau coloane).

În această metodă, folosind o rețea generativă adversară, ei au mapat imaginea tabelului într-o formă standardizată de tabel „schelet”. Acest tabel schelet indică marginile aproximative ale rândurilor și coloanelor fără conținutul tabelului. Apoi, ei potrivesc redările structurilor candidate latente de tabel la structura scheletului folosind o măsură de distanță optimizată de un algoritm genetic.

Set de date: Autorii au folosit propriul set de date care are 4000 de tabele.

Arhitectură: Modelul propus este format din două părți. În prima parte, imaginile de intrare sunt abstracte în tabele schelet folosind o rețea neuronală adversativă generativă condiționată. Un GAN are din nou două rețele, generatorul care generează mostre aleatorii și discriminatorul care spune dacă imaginile generate sunt false sau originale. Generatorul G este o rețea de codificator-decodor în care o imagine de intrare este trecută printr-o serie de straturi de eșantionare progresivă până la un strat de blocaj în care procesul este inversat. Pentru a transmite suficiente informații straturilor de decodare, se folosește o arhitectură U-Net cu conexiuni de ignorare și se adaugă o conexiune de ignorare între straturile i și n - i prin concatenare, unde n este numărul total de straturi și i este numărul stratului în codificator. Pentru discriminatorul D este folosită o arhitectură PatchGAN. Aceasta penalizează structura imaginii de ieșire la scara patch-urilor. Acestea produc rezultatul ca o masă schelet.

În a doua parte, ei optimizează potrivirea structurilor de date latente candidate la imaginea scheletului generată folosind o măsură a distanței dintre fiecare candidat și schelet. Așa este extras textul din interiorul imaginilor. Mai jos este o imagine care descrie arhitectura:

Schema generală a abordării

producție: Structurile estimate ale tabelului sunt evaluate prin compararea – Numărul rândurilor și coloanei, poziția colțului din stânga sus, înălțimile rândurilor și lățimile coloanei

Algoritmul genetic a oferit o precizie de 95.5% pe rând și 96.7% pe coloană în timp ce extragea informații din tabele.


Necesitatea de a digitiza documentele, încasări or facturi dar prea leneș să codific? Du-te la Nanoneți și construiește gratuit modele OCR!


[Cod] Abordări tradiționale

În această secțiune, vom afla cum să extragem informații din tabele folosind Deep Learning și OpenCV. Vă puteți gândi la această explicație ca la o introducere, totuși, construirea de modele de ultimă generație va necesita multă experiență și practică. Acest lucru vă va ajuta să înțelegeți elementele fundamentale ale modului în care putem antrena computere cu diverse abordări și algoritmi posibili.

Pentru a înțelege problema într-un mod mai precis, definim câțiva termeni de bază, care vor fi folosiți pe parcursul articolului:

  • Text: conține un șir și cinci atribute (sus, stânga, lățime, înălțime, font)
  • Linie: conține obiecte text care se presupune că sunt pe aceeași linie în fișierul original
  • O singura linie: obiect linie cu un singur obiect text.
  • Multi-Linie: obiect linie cu mai mult de un obiect text.
  • Multi-Linie Bloca: un set de obiecte continue cu mai multe linii.
  • Rând: Blocuri orizontale în tabel
  • Coloană: Blocuri verticale din tabel
  • Celulă: intersecția unui rând și a unei coloane
  • Celulă – Umplutură: umplutura internă sau spațiul din interiorul celulei.

Detectarea tabelului cu OpenCV

Vom folosi tehnici tradiționale de viziune computerizată pentru a extrage informații din tabelele scanate. Iată conducta noastră; inițial captăm datele (tabelele de unde trebuie să extragem informațiile) folosind camere obișnuite, iar apoi, folosind viziunea computerizată, vom încerca să găsim marginile, marginile și celulele. Vom folosi diferite filtre și contururi și vom evidenția caracteristicile de bază ale tabelelor.

Vom avea nevoie de o imagine a unui tabel. Putem captura acest lucru pe un telefon sau folosim orice imagine existentă. Mai jos este fragmentul de cod,

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

Aici, am încărcat aceeași imagine de imagine două variabile, deoarece vom folosi table_image_contour atunci când trasăm contururile noastre detectate pe imaginea încărcată. Mai jos este imaginea tabelului pe care îl folosim în programul nostru:

Imaginea mesei

Vom folosi o tehnică numită Limitarea inversă a imaginii care îmbunătățește datele prezente în imaginea dată.

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

Un alt pas important de preprocesare este dilatarea imaginii. Dilatarea este o operație matematică simplă aplicată imaginilor binare (Alb-negru) care mărește treptat granițele regiunilor pixelilor din prim-plan (de exemplu pixeli albi, de obicei).

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

În OpenCV, folosim metoda, găsi Contururi pentru a obţine contururile din imaginea de faţă. Această metodă are trei argumente, primul este imaginea dilatată (imaginea care este folosită pentru a genera imaginea dilatată este table_image_contour – metoda findContours acceptă doar imagini binare), a doua este cv2.RETR_TREE care ne spune să folosim modul de regăsire contur, al treilea este  cv2.CHAIN_APPROX_SIMPLE care este modul de aproximare a conturului. The găsi Contururi despachetează două valori, prin urmare vom adăuga încă o variabilă numită ierarhie. Când imaginile sunt imbricate, contururile emană interdependență. Pentru a reprezenta astfel de relații, se folosește ierarhia.

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

Contururile marchează unde exact datele sunt prezente în imagine. Acum, repetăm ​​lista de contururi pe care am calculat-o în pasul anterior și calculăm coordonatele casetelor dreptunghiulare așa cum s-a observat în imaginea originală folosind metoda,  cv2.boundingRect. În ultima iterație, am pus acele casete pe imaginea originală table_image folosind metoda, cv2.dreptunghi().

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) 

Acesta este ultimul nostru pas. Aici folosim metoda numit Fereastra pentru a reda tabelul nostru cu conținutul extras și contururile încorporate pe acesta. Mai jos este fragmentul de cod:

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

ieşiri

Schimbați valoarea lui y la 300 în fragmentul de cod de mai sus, aceasta va fi rezultatul dvs.:

Odată ce ați extras tabelele, puteți rula fiecare crop de contur prin motorul tesseract OCR, tutorialul pentru care poate fi găsit aici. Odată ce avem casete ale fiecărui text, le putem grupa în funcție de coordonatele lor x și y pentru a determina rândul și coloana corespunzătoare cărora le aparțin.

Besides this, there's the option of using PDFMiner to turn your pdf documents into HTML files that we can parse using regular expressions to finally get our tables. Here's how you can do it.


PDFMiner și analiza regex

Pentru a extrage informații din documente mai mici, este nevoie de timp pentru a configura modele de învățare profundă sau pentru a scrie algoritmi de viziune computerizată. În schimb, putem folosi expresii regulate în Python pentru a extrage text din documentele PDF. De asemenea, rețineți că această tehnică nu funcționează pentru imagini. Putem folosi acest lucru doar pentru a extrage informații din fișiere HTML sau documente PDF. Acest lucru se datorează faptului că, atunci când utilizați o expresie regulată, va trebui să potriviți conținutul cu sursa și să extrageți informații. Cu imagini, nu veți putea potrivi textul, iar expresiile regulate vor eșua. Să lucrăm acum cu un document PDF simplu și să extragem informații din tabelele din acesta. Mai jos este imaginea:

În primul pas, încărcăm PDF-ul în programul nostru. Odată ce s-a terminat, convertim PDF-ul în HTML, astfel încât să putem folosi direct expresii regulate și, prin urmare, să extragem conținutul din tabele. Pentru aceasta, modulul pe care îl folosim este pdfminer. Acest lucru vă ajută să citiți conținutul din PDF și să îl convertiți într-un fișier HTML.

Mai jos este fragmentul de cod:

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

Credite de cod: zevross

Am importat o mulțime de module, inclusiv de expresii regulate și biblioteci legate de PDF. In metoda convert_pdf_to_html, trimitem calea fișierului PDF care trebuie convertit într-un fișier HTML. Rezultatul metodei va fi un șir HTML, așa cum se arată mai jos:

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

Exprimarea regulată este una dintre cele mai complicate și mai interesante tehnici de programare utilizate pentru potrivirea modelelor. Acestea sunt utilizate pe scară largă în mai multe aplicații, de exemplu, pentru formatarea codului, scraping web și validare. Înainte de a începe să extragem conținut din tabelele noastre HTML, să învățăm rapid câteva lucruri despre expresiile regulate.

Această bibliotecă oferă diverse metode încorporate pentru a potrivi și a căuta modele. Mai jos sunt câteva:

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)

Caracterele/Expresiile pe care le vedeți de obicei în expresiile regulate includ:

  • [AZ] - orice literă majusculă
  • d  - digit
  • w - caracterul cuvântului (litere, cifre și litere de subliniere)
  • s - spații albe (spații, file și spații albe)

Acum, pentru a afla un anumit model în HTML, folosim expresii regulate și apoi scriem modele în consecință. Mai întâi împărțim datele astfel încât bucățile de adrese să fie separate în blocuri separate în conformitate cu numele programului (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…

Mai târziu, găsim numele programului, orașul, statul și codul zip care urmează întotdeauna același model (text, virgulă, majuscule din două cifre, 5 numere (sau 5 numere cratimă patru numere) - acestea sunt prezente în fișierul PDF care am considerat ca intrare). Verificați următorul fragment de cod:

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

Acesta este un exemplu simplu care explică modul în care extragem informații din fișierele PDF folosind o expresie regulată. După extragerea tuturor informațiilor necesare, încărcăm aceste date într-un fișier 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

Deci acesta este un exemplu simplu care explică cum puteți împinge HTML-ul extras într-un fișier CSV. Mai întâi creăm un fișier CSV, găsim toate atributele noastre și introducem unul câte unul în coloanele respective. Mai jos este o captură de ecran:

Captură de ecran a elementelor extrase din tabele folosind expresii regulate

Uneori, tehnicile discutate mai sus par complicate și reprezintă provocări pentru programatori, dacă tabelele sunt imbricate și complexe. Aici, alegerea unui CV sau a unui model de Deep learning economisește mult timp. Să vedem ce dezavantaje și provocări împiedică utilizarea acestor metode tradiționale.


Provocări cu metodele tradiționale

În această secțiune, vom afla în profunzime unde ar putea eșua procesele de extragere a tabelelor și vom înțelege în continuare modalitățile de a depăși aceste obstacole folosind metode moderne născute din Deep Learning. Acest proces nu este totuși un cakewalk. Motivul este că de obicei tabelele nu rămân constante pe tot parcursul. Ele au structuri diferite pentru a reprezenta datele, iar datele din interiorul tabelelor pot fi multilingvistice cu diferite stiluri de formatare (stil font, culoare, dimensiune font și înălțime). Prin urmare, pentru a construi un model robust, ar trebui să fim conștienți de toate aceste provocări. De obicei, acest proces include trei pași: detectarea tabelului, extragerea și conversia. Să identificăm problemele în toate fazele, una câte una:


Detectarea tabelului

În această fază, identificăm unde exact sunt prezente tabelele în intrarea dată. Intrarea poate fi de orice format, cum ar fi imagini, documente PDF/Word și uneori videoclipuri. Folosim diferite tehnici și algoritmi pentru a detecta tabelele, fie prin linii, fie prin coordonate. În unele cazuri, s-ar putea să întâlnim tabele fără margini, unde trebuie să optăm pentru metode diferite. Pe lângă acestea, iată și alte câteva provocări:

  • Transformarea imaginii: Transformarea imaginii este un pas principal în detectarea etichetelor. Aceasta include îmbunătățirea datelor și a granițelor prezente în tabel. Trebuie să alegem algoritmi de preprocesare corespunzători pe baza datelor prezentate în tabel. De exemplu, atunci când lucrăm cu imagini, trebuie să aplicăm detectoare de prag și margini. Acest pas de transformare ne ajută să găsim conținutul mai precis. În unele cazuri, contururile pot merge prost, iar algoritmii nu reușesc să îmbunătățească imaginea. Prin urmare, alegerea pașilor potriviți de transformare a imaginii și preprocesarea este crucială.
  • Calitatea imaginii: Când scanăm tabele pentru extragerea de informații, trebuie să ne asigurăm că aceste documente sunt scanate în medii mai luminoase, ceea ce asigură imagini de bună calitate. Când condițiile de iluminare sunt slabe, algoritmii CV și DL ar putea să nu detecteze tabelele din intrările date. Dacă folosim deep learning, trebuie să ne asigurăm că setul de date este consecvent și are un set bun de imagini standard. Dacă folosim aceste modele pe mesele prezente în hârtii mototolite vechi, atunci mai întâi trebuie să preprocesăm și să eliminăm zgomotul din acele imagini.
  • Varietate de aranjamente structurale și șabloane: Toate tabelele nu sunt unice. O celulă se poate întinde pe mai multe celule, fie pe verticală, fie pe orizontală, iar combinațiile de celule care se întind pot crea un număr mare de variații structurale. De asemenea, unele subliniază caracteristicile textului, iar liniile de tabel pot afecta modul în care este înțeleasă structura tabelului. De exemplu, liniile orizontale sau textul aldine pot evidenția mai multe anteturi ale tabelului. Structura tabelului definește vizual relațiile dintre celule. Relațiile vizuale din tabele fac dificilă găsirea computațională a celulelor aferente și extragerea informațiilor din ele. Prin urmare, este important să construim algoritmi care să fie robusti în manipularea diferitelor structuri de tabele.
  • Umplutură celulară, Margini, Chenaruri: Acestea sunt elementele esențiale ale oricărui tabel - umpluturile, marginile și chenurile nu vor fi întotdeauna aceleași. Unele tabele au o mulțime de umplutură în interiorul celulelor, iar altele nu. Utilizarea imaginilor de bună calitate și a pașilor de preprocesare va ajuta procesul de extragere a tabelului să funcționeze fără probleme.

Extragerea tabelului

Aceasta este faza în care informațiile sunt extrase după identificarea tabelelor. Există o mulțime de factori cu privire la modul în care este structurat conținutul și ce conținut este prezent în tabel. Prin urmare, este important să înțelegeți toate provocările înainte de a construi un algoritm.

  • Conținut dens: Conținutul celulelor poate fi fie numeric, fie textual. Cu toate acestea, conținutul textual este de obicei dens, conținând fragmente scurte ambigue de text cu utilizarea de acronime și abrevieri. Pentru a înțelege tabelele, textul trebuie să fie dezambiguat, iar abrevierile și acronimele trebuie extinse.
  • Diferite fonturi și formate: Fonturile sunt de obicei de diferite stiluri, culori și înălțimi. Trebuie să ne asigurăm că acestea sunt generice și ușor de identificat. Puține familii de fonturi, în special cele care se încadrează în cursive sau scrise de mână, sunt puțin greu de extras. Prin urmare, utilizarea unui font bun și a unei formatări adecvate ajută algoritmul să identifice informațiile mai precis.
  • PDF-uri cu mai multe pagini și întreruperi de pagină: Linia de text din tabele este sensibilă la un prag predefinit. De asemenea, cu celulele care se întind pe mai multe pagini, devine dificil să identifici tabelele. Pe o pagină cu mai multe mese, este dificil să distingeți diferite tabele unele de altele. Mesele rare și neregulate sunt greu de lucrat. Prin urmare, liniile de regulă grafice și aspectul conținutului ar trebui utilizate împreună ca surse importante pentru identificarea regiunilor de tabel.

Conversia tabelului

Ultima fază include conversia informațiilor extrase din tabele în compilarea lor ca document editabil, fie în Excel, fie folosind alt software. Să învățăm despre câteva provocări.

  • Setați aspecte: Când sunt extrase diferite formate de tabele din documente scanate, trebuie să avem un aspect adecvat pentru a introduce conținutul. Uneori, algoritmul nu reușește să extragă informații din celule. Prin urmare, proiectarea unui aspect adecvat este, de asemenea, la fel de importantă.
  • Varietate de modele de prezentare a valorii: Valorile din celule pot fi prezentate folosind diferite modele de reprezentare sintactică. Considerați textul din tabel ca fiind 6 ± 2. Algoritmul ar putea eșua să convertească acea anumită informație. Prin urmare, extragerea valorilor numerice necesită cunoașterea posibilelor modele de prezentare.
  • Reprezentare pentru vizualizare: Majoritatea formatelor de reprezentare pentru tabele, cum ar fi limbajele de marcare în care pot fi descrise tabelele, sunt concepute pentru vizualizare. Prin urmare, este dificil să procesezi automat tabele.

Acestea sunt provocările cu care ne confruntăm în timpul procesului de extracție a mesei folosind tehnici tradiționale. Acum să vedem cum să le depășim cu ajutorul Deep Learning. Este cercetat pe scară largă în diverse sectoare.



Necesitatea de a digitiza documente, chitanțe sau facturi dar prea leneș să codific? Du-te la Nanoneți și construiește gratuit modele OCR!


Rezumat

În acest articol, am analizat în detaliu extragerea informațiilor din tabele. Am văzut cum tehnologii moderne precum Deep Learning și Computer Vision pot automatiza sarcinile banale prin construirea de algoritmi robusti pentru a obține rezultate precise. În secțiunile inițiale, am aflat despre rolul extragerii tabelelor în facilitarea sarcinilor indivizilor, industriilor și sectoarelor de afaceri și, de asemenea, am trecut în revistă cazuri de utilizare care elaborează despre extragerea tabelelor din PDF/HTML, automatizarea formularelor, factură Automatizare, etc. Am codificat un algoritm folosind Computer Vision pentru a găsi poziția informațiilor în tabele folosind tehnici de prag, dilatare și detecție a conturului. Am discutat despre provocările cu care ne-am putea confrunta în timpul proceselor de detectare, extracție și conversie a tabelelor atunci când folosim tehnicile convenționale și am precizat cât de deep learning ne poate ajuta să depășim aceste probleme. În cele din urmă, am analizat câteva arhitecturi de rețele neuronale și am înțeles modalitățile lor de a realiza extragerea tabelelor pe baza datelor de antrenament date.



Actualizați:
‌ Added more reading material about different approaches in table detection and information extraction using deep learning.

Timestamp-ul:

Mai mult de la AI și învățarea automată