AWS Textract: kuidas tuvastada ja sortida mitmeveeruliste dokumentide teksti

AWS Textract on AWS-i tööriist, mida kasutatakse teksti pdf-ist (või pildilt) eraldamiseks. Parim stsenaarium on see, kui originaaldokumendil on ainult üks veerg, näiteks raamat. Kui teil on rohkem kui üks veerg, nagu ajaleheartikkel, on asjadega keerulisem hakkama saada. Tahaksin jagada oma kogemusi veergude sortimise lähenemisviisi abil.

Minu allikas on ajaleheartikkel selle paigutusega:

Textrakti väljund on JSON, mis on moodustatud erinevate hierarhiliselt paigutatud BlockType'i abil. BlockType 'leht' koosneb mitmest 'real', mis omakorda koosneb mitmest 'sõnas'.

Te ei näe mingit teavet struktuuri kohta. Mitmeveerulist teksti ei saa ainult ühe veeruna sorteerida.

Idee on kasutada muud teavet, mida Textract meile annab: Bounding Boxi koordinaadid. Igal elemendil on geomeetrilised andmed, näiteks:

"BoundingBox": {"Laius": 0,007353090215474367, "Kõrgus": 0,0288887619972229, "Vasakul": 0,08638829737901688, "Üleval": 0,03477252274751663}

Näite näitamiseks kasutame Ruby keelt.

Pärast kõigi 'sortimata' ridade hankimist:

peaksime partitsiooni rakendama plokkideks. Mõte on selles, et kaks rida on samas blokis ühel järgmistest põhjustest:

  • sirgetel on enam-vähem sama vasak koordinaat.
  • võime öelda, et sama ploki joontel on enam-vähem sama laius. See ei kehti lause puhul, kus viimane sõna täidab uue rea. Kuid veeru keskmine laius on üldiselt kompaktsem kui pealkiri, mis enamikul juhtudel kasutab kogu artikli laiust.
  • kui laiust ei piisa, saame mõõta joonte vahelist kaugust. Joont võib vaadelda kui keskpunkti ristkülikut.

Vaatame iga punkti üksikasjalikult. Vasakpoolne koordinaat on igas joonelemendis. Seega võime öelda, et kahel sirgel L1 ja L2 on ideaaljuhul sama vasakpoolne koordinaat, kui x1 - x2 = 0, kus x on "vasakpoolsed" andmed, mille oleme juba ekstraheerinud. Siiski peaksime läve hindama, võttes arvesse asjaolu, et pdf-sisend pole täiuslik. Parem on kasutada funktsiooni:

Laiust kasutatakse plokkide tuvastamiseks, mis erinevad laiuse järgi:

Laiuse kasutamine on kasulik pealkirja, klassikalise veeru ja pildi pealdise tuvastamiseks. Sellegipoolest ei õnnestu tuvastada kahte külgnevat rida, kus viimane tekst koosneb lihtsalt ühest või kahest sõnast. Sel juhul peaksime hindama ridadevahelist kaugust.

Kaugus on artikli veergude tuvastamise keskne mõiste. Võite kasutada vahemaa valemit:

Saame plokkpartitsiooni funktsiooni kokku võtta järgmiselt:

Tulemusi näete:

Plokkide omamisega peaksime need kordumatu veeru hankimiseks sorteerima.

Plokkide sortimine sõltub lugeja loetavusest, mida nimetatakse ka suunavuseks. Mustriga vasakult paremale ja ülalt alla saame osaliselt tugineda AWS Textracti vaikeseadele, mis annab meile ülalt-alla järjekorra. Seetõttu on esimesed read seotud artikli pealkirjaga. Ülejäänud plokkide jaoks piisab, kui valida iga iteratsiooni korral kõige rohkem vasakut:

Järeldus

Aws Textract on hea toode, mis suudab teksti allikast välja tõmmata, kuid see ei saa järeldada dokumendi ülesehitust.

Mõningase lähendusega saame mitmeveerulise teksti ümber paigutada ühe veeru tekstiks, säilitades inimese lugemisstrateegia. Siin kasutatud tehnikat võib kasutada muude mallide jaoks.

Andke julgelt tagasisidet ja jälgige XPeppers / Claranet kanalit:

  • keskmiselt: https://medium.com/claranet-ch
  • Linkedinis: https://www.linkedin.com/company/xpeppers-switzerland/about/