Táblázatfelismerés és információ-kinyerés a Deep Learning segítségével

Forrás csomópont: 1325422

Bevezetés a táblázatkivonatba

Az összegyűjtött adatok mennyisége napról napra drasztikusan növekszik az alkalmazások, szoftverek és online platformok növekvő számával.

Ahhoz, hogy ezeket a hatalmas adatokat produktívan kezelhessük/elhessük, értékes információ-kinyerő eszközöket kell kifejleszteni.

Az Információk kinyerése mezőben az egyik figyelmet igénylő részterület a táblázatok kinyerése képekből vagy táblázatos adatok észlelése űrlapokból, PDF-ekből és dokumentumokból.

Táblázat kivonás a feladat a tábla információinak észlelése és lebontása egy dokumentumban.

Táblázat OCR - Nanonetek kinyerik a táblázat adatait egy képből!
Table OCR – Nanonetek kinyerik a táblázat adatait egy képből!

Képzelje el, hogy sok olyan dokumentuma van táblázatos adatokkal, amelyeket ki kell bontania a további feldolgozáshoz. Hagyományosan manuálisan (papírra) másolhatja vagy betöltheti Excel lapokba.

A táblázatos OCR szoftverrel azonban automatikusan észlelheti a táblázatokat, és egy mozdulattal kivonhatja az összes táblázatos adatot a dokumentumokból. Ezzel sok időt és átdolgozást takaríthatunk meg.

Ebben a cikkben először azt nézzük meg, hogyan tudnak a Nanonetek automatikusan táblázatokat kivonni képekből vagy dokumentumokból. Ezután bemutatunk néhány népszerű DL-technikát a dokumentumok táblázatainak észlelésére és kibontására.


Táblázatos adatokat szeretne kinyerni számlákból, nyugtákból vagy bármilyen más típusú bizonylatból? Nézze meg a Nanonets PDF táblázat kivonó táblázatos adatok kinyerésére. Ütemezzen egy demót hogy többet megtudjon az automatizálásról asztal kivonás.


Tartalomjegyzék

Táblázat kibontása a képből a Nanonets Table OCR segítségével

  • Regisztrálj ingyenes Nanonets fiókhoz

    • Töltsön fel képeket/fájlokat a Nanonets Table OCR-modellbe
    • A Nanonets automatikusan felismeri és kivonja az összes táblázatos adatot
    • Az adatok szerkesztése és áttekintése (ha szükséges)
    • Exportálja a feldolgozott adatokat Excel, csv vagy JSON formátumban

Táblázat kibontása a képből nanohálókkal

Szeretne adatok kaparása PDF-ből dokumentumokat, konvertálja a PDF-táblázatot Excel-be or automatizálja a táblázat kivonását? Kitalál hogyan Nanonets PDF kaparó or PDF elemző termelékenyebbé teheti vállalkozását.


Nanonets Table OCR API

OCR táblázat Nanonetekkel
OCR táblázat Nanonetekkel

A Nanonets OCR API lehetővé teszi az OCR modellek egyszerű készítését. Az OCR-modell pontosságának növelése érdekében nem kell aggódnia a képek előfeldolgozása miatt, sem az egyező sablonok miatt, vagy szabályalapú motorokat kell felépítenie.

Feltöltheti adatait, megjegyzéseket fűzhet hozzájuk, beállíthatja a modellt betanításra, és megvárhatja az előrejelzéseket a böngésző alapú felhasználói felületen keresztül anélkül, hogy egyetlen kódsort is írna, GPU-k miatt aggódna, vagy mély tanulási modellek segítségével megtalálná a megfelelő architektúrákat a táblázatok észleléséhez.

Ezenkívül megszerezheti az egyes előrejelzések JSON-válaszait, hogy integrálja azokat saját rendszereivel, és gépi tanulással hajtott alkalmazásokat építsen a legkorszerűbb algoritmusokra és erős infrastruktúrára.

https://nanonets.com/documentation/


Vállalkozása foglalkozik adat- vagy szövegfelismeréssel digitális dokumentumokban, PDF-ekben vagy képekben? Gondolkozott már azon, hogyan lehet táblázatos adatokat kinyerni, kivonat szöveget a képekből , adatok kinyerése PDF-ből or kivonat szöveg PDF-ből pontosan és hatékonyan?


Ki találja hasznosnak az asztalkivonást

Ahogy az előző részben tárgyaltuk, a táblázatokat gyakran használják az adatok tiszta formátumban történő megjelenítésére. Sokszor láthatjuk őket számos területen, kezdve a munkánk megszervezésétől az adatok táblák közötti strukturálásával egészen a vállalatok hatalmas eszközeinek tárolásáig. Nagyon sok szervezet van, amelynek naponta több millió asztallal kell megküzdenie. Ahhoz, hogy megkönnyítsük az ilyen fáradságos feladatokat, amikor mindent kézzel csinálunk, gyorsabb technikákhoz kell folyamodnunk. Beszéljünk néhány felhasználási esetről, ahol táblázatok kibontása elengedhetetlenek lehetnek:

Forrás: Patrick Tomasso, Unsplash

Személyes használati esetek

A asztal kivonás A folyamat kisebb személyes felhasználási esetekben is hasznos lehet. Előfordul, hogy mobiltelefonra rögzítjük a dokumentumokat, majd később a számítógépünkre másoljuk. Ahelyett, hogy ezt a folyamatot használnánk, közvetlenül rögzíthetjük a dokumentumokat, és szerkeszthető formátumban menthetjük őket egyéni sablonjainkba. Az alábbiakban bemutatunk néhány felhasználási esetet arról, hogyan illeszthetjük be az asztali kivonást a személyes rutinunkba –

Dokumentumok szkennelése telefonra: A fontos táblázatokról gyakran képeket rögzítünk a telefonra és elmentjük, de a táblázatkivonásos technikával a táblázatok képeit rögzíthetjük és közvetlenül táblázatos formátumban tárolhatjuk, akár excel, akár google táblákba. Ezzel nem kell képeket keresnünk, vagy a táblázat tartalmát új fájlba másolnunk, hanem közvetlenül használhatjuk az importált táblákat és elkezdhetjük a kinyert információkon dolgozni.

Dokumentumok HTML-be: A weboldalakon rengeteg információt találunk táblázatok segítségével. Segítenek az adatokkal való összehasonlításban, és szervezett formában adnak gyors feljegyzést a számokról. A táblakivonatolási folyamat segítségével PDF dokumentumokat vagy JPG/PNG képeket szkennelhetünk be, és az információkat közvetlenül egy egyedi, saját tervezésű táblázatformátumba tölthetjük be. Tovább írhatunk szkripteket, hogy a meglévő táblák alapján további táblákat adjunk hozzá, és ezáltal digitalizáljuk az információkat. Ez segít nekünk a tartalom szerkesztésében és felgyorsítja a tárolási folyamatot.


Ipari felhasználási esetek

Világszerte számos iparág foglalkozik a papírmunkával és a dokumentációval, különösen a banki és biztosítási szektorban. Az ügyfelek adatainak tárolásától az ügyfelek igényeinek kielégítéséig a táblázatokat széles körben használják. Ezt az információt ismét dokumentumként (nyomtatott példányként) továbbítják a különböző ágakhoz jóváhagyás céljából, ahol néha a félreértés hibákhoz vezethet az információk táblákból való lekérése közben. Ehelyett az automatizálás itt sokkal könnyebbé teszi az életünket. A kezdeti adatok rögzítése és jóváhagyása után ezeket a dokumentumokat közvetlenül táblázatokká szkennelhetjük, és tovább dolgozhatunk a digitalizált adatokon. Az időfelhasználás és a hibák csökkentéséről nem is beszélve, értesíteni tudjuk az ügyfeleket az információk feldolgozásának időpontjáról és helyéről. Ez tehát biztosítja az adatok megbízhatóságát, és leegyszerűsíti a műveletek kezelésének módját. Nézzük most a többi lehetséges felhasználási esetet:

Minőség-ellenőrzés: A minőség-ellenőrzés az egyik legfontosabb szolgáltatás, amelyet a vezető iparágak nyújtanak. Általában házon belül és az érintettek számára történik. Ennek részeként számos visszajelzési űrlapot gyűjtenek össze a fogyasztóktól, hogy visszajelzést kapjanak a nyújtott szolgáltatásról. Az ipari szektorokban táblázatokat használnak a napi ellenőrző listák és feljegyzések feljegyzésére, hogy megnézzék, hogyan működnek a gyártósorok. Mindez egy helyen dokumentálható az asztali kivonat segítségével.

Az eszközök nyomvonala: A feldolgozóiparban az emberek keménykódolt táblázatokat használnak a gyártott entitások, például acél, vas, műanyag stb. nyomon követésére. Minden gyártott cikk egyedi számmal van ellátva, ahol táblázatokat használnak a naponta gyártott és leszállított termékek nyomon követésére. Az automatizálás sok időt és eszközt takaríthat meg a helytelen elhelyezés vagy az adatok inkonzisztenciája miatt.


Üzleti felhasználási esetek

Számos üzleti ágazat működik Excel-táblázatokon és offline űrlapokon. De egy adott időpontban nehéz átkutatni ezeken a lapokon és űrlapokon. Ha ezeket a táblákat kézzel írjuk be, az időigényes, és nagy a hibás adatbevitel esélye. Ezért a táblakivonás jobb alternatíva az üzleti felhasználási esetek megoldására, mivel az alábbiakban kevés ilyen eset található.

Számla Automatizálás: Számos kis- és nagyipari ágazat létezik számlák továbbra is táblázatos formátumban jönnek létre. Ezek nem nyújtanak megfelelően biztosított adókimutatást. Az ilyen akadályok leküzdéséhez használhatjuk a táblázat kivonatát az összes konvertálásához számlák szerkeszthető formátumba, és ezáltal frissítse őket egy újabb verzióra.

Űrlap automatizálás: Az online űrlapok megzavarják ezt a jól bevált módszert azáltal, hogy segítenek a vállalkozásoknak összegyűjteni a szükséges információkat, és egyidejűleg összekapcsolják azokat a munkafolyamatba épített más szoftverplatformokkal. A kézi adatbevitel szükségességének csökkentése mellett (val automatizált adatbevitel).


OCR-problémára gondol? Digitalizálni akar számlák, PDF vagy rendszámtábla? Irány oda Nanonetek és készítsen OCR modelleket ingyen!


Mély tanulás akcióban

A mély tanulás a mesterséges neurális hálózatokon alapuló gépi tanulási módszerek szélesebb családjának része.

A neurális hálózat egy olyan keretrendszer, amely az emberi agy működését utánzó folyamaton keresztül felismeri az adott adatok mögöttes összefüggéseit. Különböző mesterséges rétegeik vannak, amelyeken áthaladnak az adatok, ahol megismerik a jellemzőket. Különböző architektúrák léteznek, mint például a Convolution NN-ek, az ismétlődő NN-ek, az automatikus kódolók, a generatív ellenséges NN-ek a különböző típusú adatok feldolgozására. Ezek összetettek, de nagy teljesítményt mutatnak a problémák valós idejű megoldásához. Tekintsük most át azokat a kutatásokat, amelyeket a táblakivonás területén végeztek neurális hálózatok segítségével, és tekintsük át röviden azokat is.


TableNet

Papír: TableNet: Deep Learning modell a végpontok közötti táblázatfelismeréshez és táblázatos adatkinyeréshez a szkennelt dokumentumképekből

Bevezetés: A TableNet egy modern mély tanulási architektúra, amelyet a TCS Research Year csapata javasolt 2019-ben. A fő motiváció az volt, hogy mobiltelefonon vagy kamerán keresztül információkat nyerjenek ki a beszkennelt táblázatokból.

Olyan megoldást javasoltak, amely magában foglalja a képen belüli táblázatos régió pontos észlelését, majd az észlelt táblázat soraiból és oszlopaiból információk észlelését és kinyerését.

Adatbázis: A használt adatkészlet a Marmot volt. 2000 oldalt tartalmaz PDF formátumban, amelyeket a megfelelő alapigazságokkal gyűjtöttek össze. Ide tartoznak a kínai oldalak is. Link – http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

Építészet: Az architektúra Long et al., a szemantikai szegmentálás kódoló-dekódoló modelljén alapul. Ugyanazt a kódoló/dekódoló hálózatot használják, mint az FCN architektúrát a tábla kibontásához. A képek előfeldolgozása és módosítása a Tesseact OCR.

A modell két fázisban jön létre, a bemenetet mély tanulási technikáknak vetve alá. Az első fázisban egy előképzett VGG-19 hálózat súlyát használták. A használt VGG hálózat teljesen összekapcsolt rétegeit 1×1 konvolúciós rétegekre cserélték. Az összes konvolúciós réteget a ReLU aktiválása és egy 0.8-as valószínűségű kiesési réteg követi. A második fázist dekódolt hálózatnak nevezik, amely két ágból áll. Ez annak az intuíciónak megfelelően történik, hogy az oszlop régió a táblázat régiójának egy részhalmaza. Így az egyetlen kódoló hálózat jobb pontossággal tudja kiszűrni az aktív régiókat mind a táblázat, mind az oszlop régiók jellemzői segítségével. Az első hálózat kimenete a két ágra kerül elosztásra. Az első ágban két konvolúciós műveletet alkalmazunk, és a végső jellemzőtérképet felskálázzuk, hogy megfeleljen az eredeti képméreteknek. Az oszlopok detektálására szolgáló másik ágban van egy további konvolúciós réteg ReLU aktiváló funkcióval és egy kiesési réteg, amely ugyanolyan valószínűséggel esik ki, mint korábban említettük. A jellemzőtérképek felmintavételezése törtlépcsős konvolúciókkal történik egy (1×1) konvolúciós réteg után. Az alábbiakban egy kép az építészetről:

A TableNet architektúrája

Kimenetek: A dokumentumok modell segítségével történő feldolgozása után a táblázatok és oszlopok maszkjai generálódnak. Ezek a maszkok a táblázat és oszlopterületeinek kiszűrésére szolgálnak a képről. Most a Tesseract OCR használatával az információ a szegmentált régiókból nyerhető ki. Az alábbi képen láthatók a táblázatokból előállított és később kivont maszkok:

Ugyanezt az ICDAR-ral finomhangolt modellt is javasolták, amely jobban teljesített, mint az eredeti modell. A finomhangolt modell Recall, Precision és F1-score értéke 0.9628, 0.9697, 0.9662. Az eredeti modell 0.9621, 0.9547, 0.9583 rögzített mutatói ugyanabban a sorrendben vannak. Nézzünk most egy újabb architektúrába.


DeepDeSRT

Papír: DeepDeSRT: Deep Learning a táblázatok észleléséhez és struktúrafelismeréséhez dokumentumképekben

Bevezetés: A DeepDeSRT egy neurális hálózati keretrendszer, amelyet a dokumentumokban vagy képekben lévő táblázatok észlelésére és megértésére használnak. Két megoldása van, ahogy a címben is szerepel:

  1. Ez egy mély tanuláson alapuló megoldást kínál a táblázatok észleléséhez a dokumentumképekben.
  2. Új, mély tanuláson alapuló megközelítést javasol a táblaszerkezet-felismerésre, azaz a sorok, oszlopok és cellapozíciók azonosítására az észlelt táblákban.

A javasolt modell teljes mértékben adatalapú, nem igényel heurisztikát vagy metaadatokat a dokumentumokról vagy képekről. A képzés egyik fő előnye, hogy nem használtak nagy betanítási adatkészleteket, hanem a transzfertanulás és a tartományadaptáció koncepcióját alkalmazták mind a tábladetektáláshoz, mind a táblaszerkezet felismeréshez.

Adatbázis: A felhasznált adatkészlet egy ICDAR 2013 táblázat versenyadatkészlet, amely 67 dokumentumot tartalmaz, összesen 238 oldallal.

Építészet:

  • Táblázat észlelése A javasolt modell a Fast RCNN-t használta alapkeretként a táblák észleléséhez. Az architektúra két különböző részre oszlik. Az első részben a bemeneti kép alapján régiójavaslatokat generáltak egy úgynevezett régiójavaslat-hálózat (RPN) segítségével. A második részben Fast-RCNN segítségével osztályozták a régiókat. Ennek az architektúrának a támogatására használták ZFNet és a VGG-16 súlyai.
  • Struktúra felismerés Miután a táblát sikeresen észlelték, és a rendszer megismerte a helyét, a következő kihívás a tartalmának megértésében a táblázat fizikai szerkezetét alkotó sorok és oszlopok felismerése és helyének meghatározása. Ezért egy teljesen összekapcsolt hálózatot használtak a VGG-16 súlyával, amely információkat nyer ki a sorokból és oszlopokból. Alább láthatók a DeepDeSRT kimenetei:

Kimenetek:

A táblázat észlelésének kimenetei
A struktúrafelismerés kimenetei [6]

Az értékelési eredmények azt mutatják, hogy a DeepDeSRT felülmúlja a legmodernebb táblázatészlelési és struktúrafelismerési módszereket, és 1-ig 96.77%-os, illetve 91.44%-os F2015-mértéket ér el a tábladetektálás és a szerkezetfelismerés terén.


Neurális hálózatok gráfja

Papír: A táblázatfelismerés újragondolása gráf neurális hálózatok segítségével

Bevezetés: Ebben a kutatásban a Deep Learning Laboratory, a National Center of Artificial Intelligence (NCAI) szerzői Graph Neural Networks alkalmazást javasoltak információk táblázatokból történő kinyerésére. Azzal érveltek, hogy a gráfhálózatok természetesebb választás ezekre a problémákra, és tovább vizsgáltak két gradiens alapú gráfneurális hálózatot.

Ez a javasolt modell kombinálja a konvolúciós neurális hálózatok előnyeit a vizuális jellemzők kinyerésére és a gráfhálózatok előnyeit a problémastruktúra kezelésére.

Adatbázis: A szerzők egy új nagy, szintetikusan előállított adatkészletet javasoltak, amely 0.5 millió táblából áll, négy kategóriába sorolva.

  1. A képek sima, összevonás nélküli és uralkodó vonalakkal ellátott képek
  2. A képeknek különböző típusú szegélyei vannak, beleértve az uralkodó vonalak esetenkénti hiányát
  3. Bevezeti a cellák és oszlopok egyesítését
  4. A kamera lineáris perspektíva transzformációval készített képeket

Építészet: Sekély konvolúciós hálózatot használtak, amely a megfelelő konvolúciós jellemzőket generálja. Ha a kimeneti jellemzők térbeli méretei nem egyeznek meg a bemeneti képével, a bemeneti és kimeneti dimenziók arányától függően lineárisan lefelé kicsinyített pozíciókat gyűjtenek, és elküldik egy interakciós hálózatnak, amely két gráfhálózattal rendelkezik, DGCNN néven. és a GravNet. A gráfhálózat paraméterei megegyeznek az eredeti CNN-éval. Végül egy futásidejű páros mintavételezést használtak a kinyert tartalom osztályozására, amely belsőleg a Monte Carlo alapú algoritmust használta. Alább láthatók a kimenetek:

Kimenetek:

Graph Neural Networks által generált kimenetek

Az alábbiakban láthatók a hálózatok által generált pontossági számok táblázatos formában a hálózat négy kategóriájára vonatkozóan, amint azt a adatbázisba szakasz:


CGAN-ok és genetikai algoritmusok

Papír: Táblázatok kinyerése dokumentumokból feltételes generatív ellenséges hálózatok és genetikai algoritmusok segítségével

Bevezetés: Ebben a kutatásban a szerzők felülről lefelé irányuló megközelítést alkalmaztak az alulról felfelé (a vonalakat cellákba, sorokba vagy oszlopokba integráló) megközelítés helyett.

Ebben a módszerben egy generatív ellenséges hálózatot használva leképezték a táblázat képét egy szabványos „csontváz” táblázatformába. Ez a táblázatvázlat a hozzávetőleges sor- és oszlopszegélyt jelöli a táblázat tartalma nélkül. Ezt követően egy genetikai algoritmus által optimalizált távolságmérték segítségével hozzáillesztik a jelölt látens táblaszerkezetek megjelenítését a vázszerkezethez.

Adatbázis: A szerzők saját adatkészletüket használták, amely 4000 táblát tartalmaz.

Építészet: A javasolt modell két részből áll. Az első részben a bemeneti képeket váztáblákká absztraháljuk egy feltételes generatív adversariális neurális hálózat segítségével. A GAN-nak ismét két hálózata van: a generátor, amely véletlenszerű mintákat generál, és a diszkriminátor, amely megmondja, hogy a generált képek hamisak vagy eredetiek. A G generátor egy kódoló-dekódoló hálózat, ahol a bemeneti kép fokozatosan lemintázó rétegeken halad át egy szűk keresztmetszet rétegig, ahol a folyamat megfordul. A megfelelő információ átadása érdekében a dekódoló rétegeknek U-Net architektúrát használnak kihagyó kapcsolatokkal, és az i és az n − i rétegek között egy kihagyó kapcsolatot adnak hozzá összefűzéssel, ahol n a rétegek teljes száma, i pedig a réteg száma. a kódolóban. A D diszkriminátorhoz PatchGAN architektúrát használnak. Ez a kimeneti kép struktúráját a javítások léptékében bünteti. Ezek váztáblaként állítják elő a kimenetet.

A második részben az egyes jelöltek és a csontváz közötti távolság mérésével optimalizálják a jelölt látens adatstruktúrák illeszkedését a generált vázképhez. Így nyerjük ki a képeken belüli szöveget. Az alábbi képen látható az építészet:

A megközelítés általános vázlata

teljesítmény: A becsült táblaszerkezeteket a következő összehasonlítással értékeljük ki: Sor- és oszlopszám , bal felső sarok pozíciója, sormagasság és oszlopszélesség

A genetikai algoritmus 95.5%-os pontosságot adott soronként és 96.7%-os pontosságot oszloponként, miközben információkat kinyert a táblázatokból.


A dokumentumok digitalizálása szükséges, bevételek or számlák de lusta kódolni? Irány oda Nanonetek és készítsen OCR modelleket ingyen!


[Kód] Hagyományos megközelítések

Ebben a részben megtudjuk, hogyan lehet információkat kinyerni a táblázatokból a Deep Learning és az OpenCV használatával. Ezt a magyarázatot bevezetőnek is tekintheti, azonban a legmodernebb modellek felépítéséhez sok tapasztalatra és gyakorlatra lesz szükség. Ez segít megérteni a számítógépek képzésének alapjait különféle lehetséges megközelítésekkel és algoritmusokkal.

A probléma pontosabb megértése érdekében meghatározunk néhány alapvető kifejezést, amelyeket a cikkben végig fogunk használni:

  • szöveg: egy karakterláncot és öt attribútumot tartalmaz (felső, bal, szélesség, magasság, betűtípus)
  • vonal: olyan szöveges objektumokat tartalmaz, amelyekről feltételezzük, hogy az eredeti fájl ugyanazon a sorában vannak
  • Egyvonalas: sorobjektum csak egy szöveges objektummal.
  • Többsoros: sorobjektum egynél több szöveges objektummal.
  • Többsoros Blokk: folytonos többsoros objektumok halmaza.
  • Sor: Vízszintes blokkok a táblázatban
  • Oszlop: Függőleges blokkok a táblázatban
  • Sejt: egy sor és egy oszlop metszéspontja
  • Cell – Padding: a cellán belüli belső kitöltés vagy tér.

Táblázatfelismerés OpenCV-vel

A beolvasott táblázatokból a hagyományos számítógépes látástechnikák segítségével nyerjük ki az információkat. Íme a csővezetékünk; először normál kamerákkal rögzítjük az adatokat (a táblázatokat, ahonnan ki kell nyernünk az információkat), majd számítógépes látás segítségével megpróbáljuk megtalálni a határokat, éleket és cellákat. Különböző szűrőket és kontúrokat fogunk használni, és kiemeljük a táblázatok alapvető jellemzőit.

Szükségünk lesz egy asztal képére. Ezt telefonon rögzíthetjük, vagy bármilyen meglévő képet felhasználhatunk. Alább látható a kódrészlet,

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

Itt ugyanazt a képképet töltöttük be két változóval, mivel a táblázat_kép_kontúr amikor észlelt kontúrjainkat rárajzoljuk a betöltött képre. Az alábbiakban látható a programunkban használt táblázat képe:

A táblázat képe

Az úgynevezett technikát alkalmazzuk Inverz képküszöbérték amely fokozza az adott képen jelenlévő adatokat.

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

Egy másik fontos előfeldolgozási lépés az képtágítás. A tágulás egy egyszerű matematikai művelet, amelyet bináris képekre (fekete-fehér) alkalmaznak, amely fokozatosan megnöveli az előtérben lévő pixelek régióinak határait (azaz fehér pixelek, jellemzően).

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

Az OpenCV-ben azt a módszert használjuk, kontúrok keresése hogy megkapjuk a jelenlegi kép kontúrjait. Ennek a módszernek három argumentuma van, az első a kitágított kép (a kiterjesztett kép létrehozásához használt kép a table_image_contour – a findContours metódus csak bináris képeket támogat), a második a cv2.RETR_TREE amely azt mondja, hogy használjuk a kontúr visszakereső módot, a harmadik a  cv2.CHAIN_APPROX_SIMPLE amely a kontúr közelítési mód. Az kontúrok keresése kicsomagol két értéket, ezért hozzáadunk még egy nevű változót hierarchia. Amikor a képek egymásba vannak ágyazva, a kontúrok kölcsönös függőséget sugároznak. Az ilyen kapcsolatok ábrázolására hierarchiát használnak.

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

A kontúrok azt jelzik, hogy pontosan hol találhatók az adatok a képen. Most ismételjük át az előző lépésben kiszámított kontúrlistát, és kiszámítjuk a téglalap alakú négyzetek koordinátáit az eredeti képen látható módon a következő módszerrel:  cv2.boundingRect. Az utolsó iterációban ezeket a dobozokat az eredeti table_image képre helyeztük a metódussal, 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) 

Ez az utolsó lépésünk. Itt a módszert használjuk Window néven hogy a táblázatunkat a kivont tartalommal és a kontúrokkal beágyazva jelenítsük meg. Alább látható a kódrészlet:

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

Kimenetek

Módosítsa az y értékét 300-ra a fenti kódrészletben, ez lesz a kimenet:

Miután kibontotta a táblázatokat, minden kontúrmetszetet futtathat a tesseract OCR motoron keresztül, amelynek oktatóanyaga megtalálható itt. Ha minden szövegből megvan a doboz, akkor az x és y koordinátáik alapján csoportosíthatjuk őket, hogy megállapítsuk, melyik sorhoz és oszlophoz tartoznak.

Ezen kívül lehetőség van a PDFMiner használatával pdf-dokumentumait HTML-fájlokká alakítani, amelyeket reguláris kifejezésekkel elemezhetünk, hogy végre megkapjuk a táblázatainkat. Így teheti meg.


PDFMiner és Regex elemzés

A kisebb dokumentumokból való információk kinyeréséhez időbe telik a mélytanulási modellek konfigurálása vagy a számítógépes látási algoritmusok írása. Ehelyett használhatunk reguláris kifejezéseket a Pythonban szöveget kivonni a PDF dokumentumokból. Ne feledje továbbá, hogy ez a technika nem működik képek esetén. Ezt csak HTML-fájlokból vagy PDF-dokumentumokból nyerhetjük ki. Ennek az az oka, hogy ha reguláris kifejezést használ, össze kell hangolnia a tartalmat a forrással, és ki kell bontania az információkat. A képekkel nem tudja egyeztetni a szöveget, és a reguláris kifejezések meghiúsulnak. Most dolgozzunk egy egyszerű PDF-dokumentummal, és nyerjünk ki információkat a benne lévő táblázatokból. Alul a kép:

Első lépésben betöltjük a PDF-et a programunkba. Ha ez megtörtént, a PDF-et HTML formátumba konvertáljuk, hogy közvetlenül használhassuk a reguláris kifejezéseket, és ezáltal kinyerhessük a tartalmat a táblázatokból. Ehhez az általunk használt modul az pdfminer. Ez segít PDF-ből olvasni és HTML-fájllá konvertálni.

Alább látható a kódrészlet:

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

Kód kreditek: zevross

Számos modult importáltunk, beleértve a reguláris kifejezéseket és a PDF-hez kapcsolódó könyvtárakat. A módszerben convert_pdf_to_html, elküldjük annak a PDF-fájlnak az elérési útját, amelyet HTML-fájllá kell konvertálni. A metódus kimenete egy HTML karakterlánc lesz, az alábbiak szerint:

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

A reguláris kifejezés az egyik legtrükkösebb és legmenőbb programozási technika, amelyet a mintaillesztésre használnak. Ezeket széles körben használják számos alkalmazásban, például kódformázásra, webkaparásra és érvényesítési célokra. Mielőtt elkezdenénk kinyerni a tartalmat a HTML-táblázatainkból, gyorsan tanuljunk meg néhány dolgot a reguláris kifejezésekről.

Ez a könyvtár különféle beépített módszereket kínál a minták egyeztetésére és keresésére. Az alábbiakban néhány:

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)

A reguláris kifejezésekben általában látható karakterek/kifejezések a következők:

  • [A-Z]  - bármilyen nagybetű
  • d  - számjegy
  • w - szókarakter (betűk, számok és aláhúzásjelek)
  • s  - szóköz (szóközök, tabulátorok és szóközök)

Most, hogy megtudjunk egy adott mintát a HTML-ben, reguláris kifejezéseket használunk, majd ennek megfelelően írunk mintákat. Először az adatokat úgy bontjuk fel, hogy a címdarabokat a program nevének megfelelően külön blokkokra bontsuk (ANGELS CAMP, APPLE VALLEY stb.):

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…

Később megtaláljuk a program nevét, városát, államát és irányítószámát, amelyek mindig ugyanazt a mintát követik (szöveg, vessző, kétjegyű nagybetűk, 5 szám (vagy 5 szám kötőjel négy szám) – ezek megtalálhatók a PDF fájlban, bemenetnek tekintettük). Ellenőrizze a következő kódrészletet:

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

Ez egy egyszerű példa, amely elmagyarázza, hogyan nyerünk ki információkat PDF-fájlokból reguláris kifejezés használatával. Az összes szükséges információ kinyerése után betöltjük ezeket az adatokat egy CSV fájlba.

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

Tehát ez egy egyszerű példa, amely elmagyarázza, hogyan tolhatja be a kicsomagolt HTML-kódot egy CSV-fájlba. Először létrehozunk egy CSV-fájlt, megkeressük az összes attribútumot, és egyesével benyomjuk a megfelelő oszlopokba. Alább egy képernyőkép:

Képernyőkép a táblákból reguláris kifejezésekkel kinyert elemekről

Időnként a fent tárgyalt technikák bonyolultnak tűnnek, és kihívást jelentenek a programozók számára, ha a táblák egymásba ágyazottak és összetettek. Itt az önéletrajz vagy a mély tanulási modell kiválasztásával sok időt takarít meg. Nézzük meg, milyen hátrányok és kihívások gátolják e hagyományos módszerek alkalmazását.


Kihívások a hagyományos módszerekkel

Ebben a részben részletesen megtudjuk, hol hibázhatnak a táblázatok kinyerési folyamatai, és jobban megértjük, hogyan lehet leküzdeni ezeket az akadályokat a Deep Learningből származó modern módszerekkel. Ez a folyamat azonban nem tortúra. Ennek az az oka, hogy a táblázatok általában nem maradnak állandóak. Különböző struktúrákkal rendelkeznek az adatok megjelenítésére, és a táblázatokban lévő adatok többnyelvűek lehetnek, különböző formázási stílusokkal (betűstílus, szín, betűméret és magasság). Ezért egy robusztus modell felépítéséhez tisztában kell lenni ezekkel a kihívásokkal. Ez a folyamat általában három lépésből áll: táblafelismerés, kinyerés és átalakítás. Nézzük meg egyenként a problémákat minden fázisban:


Táblázat észlelése

Ebben a fázisban azonosítjuk, hogy az adott bemenetben pontosan hol találhatók a táblák. A bemenet bármilyen formátumú lehet, például képek, PDF/Word dokumentumok és néha videók. Különböző technikákat és algoritmusokat használunk a táblázatok felismerésére, akár vonalak, akár koordináták alapján. Bizonyos esetekben előfordulhat, hogy egyáltalán nem szegélyezett táblákkal találkozhatunk, ahol különböző módszereket kell választanunk. Ezeken kívül itt van még néhány kihívás:

  • Kép átalakítása: A képátalakítás a címkék észlelésének elsődleges lépése. Ez magában foglalja a táblázatban szereplő adatok és szegélyek javítását. Megfelelő előfeldolgozási algoritmust kell kiválasztanunk a táblázatban szereplő adatok alapján. Például amikor képekkel dolgozunk, küszöb- és élérzékelőket kell alkalmaznunk. Ez az átalakítási lépés segít a tartalom pontosabb megtalálásában. Egyes esetekben a kontúrok elromolhatnak, és az algoritmusok nem javítják a képet. Ezért kulcsfontosságú a megfelelő képátalakítási lépések és előfeldolgozás kiválasztása.
  • Képminőség: Amikor táblázatokat szkennelünk információk kinyerése céljából, meg kell győződnünk arról, hogy ezeket a dokumentumokat világosabb környezetben szkenneljük, ami jó minőségű képeket biztosít. Ha a fényviszonyok rosszak, előfordulhat, hogy a CV és DL algoritmusok nem észlelik a táblázatokat az adott bemeneteken. Ha mély tanulást használunk, meg kell győződnünk arról, hogy az adatkészlet konzisztens, és megfelelő szabványos képkészlettel rendelkezik. Ha ezeket a modelleket a régi gyűrött papírokban lévő asztalokon használjuk, akkor először elő kell dolgoznunk és ki kell küszöbölnünk a képeken látható zajokat.
  • Különféle szerkezeti elrendezések és sablonok: Nem minden táblázat egyedi. Egy cella több cellára is kiterjedhet, akár függőlegesen, akár vízszintesen, és az átívelő cellák kombinációi hatalmas számú szerkezeti változatot hozhatnak létre. Emellett egyesek kiemelik a szöveg jellemzőit, és a táblázat sorai befolyásolhatják a táblázat szerkezetének megértését. A vízszintes vonalak vagy a félkövér szöveg például a táblázat több fejlécét is kiemelhetik. A táblázat szerkezete vizuálisan határozza meg a cellák közötti kapcsolatokat. A táblázatokban lévő vizuális kapcsolatok megnehezítik a kapcsolódó cellák számítási keresését és az információk kinyerését belőlük. Ezért fontos, hogy olyan algoritmusokat építsünk, amelyek robusztusak a táblák különböző struktúráinak kezelésére.
  • Cellakitöltés, margók, szegélyek: Ezek minden asztal alapvető elemei – a párnázás, a margók és a szegélyek nem mindig egyformák. Egyes táblázatok celláiban sok kitöltés található, másokban pedig nem. A jó minőségű képek és az előfeldolgozási lépések használata elősegíti a táblázat kinyerési folyamatának zökkenőmentes működését.

Táblázat kivonás

Ez az a fázis, ahol a táblák azonosítása után kivonják az információkat. Számos tényező befolyásolja a tartalom felépítését és a táblázatban szereplő tartalmat. Ezért fontos, hogy megértsük az összes kihívást, mielőtt egy algoritmust összeállítunk.

  • Sűrű tartalom: A cellák tartalma lehet numerikus vagy szöveges. A szöveges tartalom azonban általában sűrű, kétértelmű, rövid szövegrészeket tartalmaz mozaikszók és rövidítések használatával. A táblázatok megértéséhez a szöveget egyértelművé kell tenni, a rövidítéseket és betűszavakat ki kell bővíteni.
  • Különböző betűtípusok és formátumok: A betűtípusok általában különböző stílusúak, színűek és magasságúak. Gondoskodnunk kell arról, hogy ezek általánosak és könnyen azonosíthatók legyenek. Kevés betűtípuscsaládot, különösen azokat, amelyek kurzív vagy kézzel írottak, kissé nehéz kivonni. Ezért a jó betűtípus és a megfelelő formázás segít az algoritmusnak az információ pontosabb azonosításában.
  • Többoldalas PDF-ek és oldaltörések: A táblázatokban lévő szövegsor érzékeny egy előre meghatározott küszöbértékre. A több oldalon átívelő cellák miatt is nehézkessé válik a táblázatok azonosítása. Egy többtáblás oldalon nehéz megkülönböztetni egymástól a különböző táblázatokat. A ritka és szabálytalan asztalokkal nehéz dolgozni. Ezért a grafikus vonalakat és a tartalomelrendezést együtt kell használni fontos forrásként a táblázat régióinak felderítéséhez.

Táblázat konvertálása

Az utolsó fázis a táblázatokból kinyert információk átalakítása szerkeszthető dokumentummá való összeállításra, akár excelben, akár más szoftverrel. Tanuljunk meg néhány kihívást.

  • Elrendezések beállítása: Amikor különböző formátumú táblázatokat nyerünk ki a beolvasott dokumentumokból, megfelelő táblázatelrendezésre van szükségünk a tartalom beküldéséhez. Néha az algoritmus nem képes információt kinyerni a cellákból. Ezért a megfelelő elrendezés megtervezése is ugyanolyan fontos.
  • Különféle értékmegjelenítési minták: A cellákban lévő értékeket különböző szintaktikai reprezentációs minták segítségével lehet bemutatni. Tekintsük a táblázat szövegét 6 ± 2-nek. Előfordulhat, hogy az algoritmus nem tudja átalakítani az adott információt. Ezért a számértékek kinyerése megköveteli a lehetséges megjelenítési minták ismeretét.
  • Képviselet a vizualizációhoz: A legtöbb táblázatábrázolási formátum, például a jelölőnyelvek, amelyeken a táblázatok leírhatók, megjelenítésre készültek. Ezért kihívást jelent a táblák automatikus feldolgozása.

Ezekkel a kihívásokkal kell szembenéznünk a hagyományos technikákat alkalmazó asztalkitermelési folyamat során. Most pedig nézzük meg, hogyan lehet ezeket leküzdeni a Deep Learning segítségével. Széles körben kutatják a különböző ágazatokban.



Dokumentumok, nyugták, ill számlák de lusta kódolni? Irány oda Nanonetek és készítsen OCR modelleket ingyen!


Összegzésként

Ebben a cikkben részletesen áttekintettük a táblázatokból történő információkinyerést. Láttuk, hogy a modern technológiák, például a Deep Learning és a Computer Vision hogyan automatizálhatják a hétköznapi feladatokat azáltal, hogy robusztus algoritmusokat építenek fel a pontos eredmények kibocsátására. A kezdeti részekben megismertük a táblakivonat szerepét az egyének, az iparágak és az üzleti szektorok feladatainak megkönnyítésében, valamint áttekintettük azokat a használati eseteket, amelyek a táblák PDF/HTML-ből való kinyerését, az űrlapautomatizálást, számla Automatizálás stb. A Computer Vision segítségével kódoltunk egy algoritmust, amely küszöbérték-, tágulás- és kontúrészlelési technikák segítségével megkeresi az információk helyzetét a táblázatokban. Megvitattuk azokat a kihívásokat, amelyekkel szembesülhetünk a táblafelismerési, -kinyerési és -konverziós folyamatok során, ha hagyományos technikákat használunk, és elmondtuk, hogy a mély tanulás hogyan segíthet ezeken a problémákon. Végezetül áttekintettünk néhány neurális hálózati architektúrát, és megértettük, hogyan lehet az adott betanítási adatok alapján táblakivonást elérni.



Frissítés:
‌ További olvasnivalók hozzáadva a táblázatfelismerés és a mélytanulás segítségével történő információkinyerés különböző megközelítéseihez.

Időbélyeg:

Még több AI és gépi tanulás