AWS Textract: hogyan lehet felismerni és rendezni a szöveget egy több oszlopos dokumentumból

Az AWS Textract az AWS eszköz, amellyel szöveget pdf-ből (vagy képből) lehet kivonni. A legjobb forgatókönyv az, ha az eredeti dokumentumnak csak egy oszlopa van, például egy könyv. Ha egynél több oszlop van, például újságcikk, a dolgok kezelése bonyolultabb. Osztályozási megközelítéssel szeretném megosztani tapasztalataimat.

Forrásom egy újságcikk a következő elrendezéssel:

A Textract kimenet egy JSON, amelyet különböző BlockType alkot, hierarchikusan elrendezve. A BlockType 'oldal' több 'sorból' áll, amelyek viszont több 'szóból' állnak.

Nem lát szerkezeti információt. A több oszlopos szöveget nem lehet egyetlen oszlopként rendezni.

Az ötlet az, hogy más információkat használjunk, amelyeket a Textract ad nekünk: a Bounding Box koordinátáit. Minden elemnek van olyan geometriai adata, mint:

"BoundingBox": {"Szélesség": 0,007353090215474367, "Magasság": 0,0288887619972229, "Balra": 0,08638829737901688, "Felül": 0,03477252274751663}

A Ruby nyelvét fogjuk használni a példa bemutatására.

Tehát az összes „válogatás nélküli” sor visszakeresése után:

egy partíciót blokkokra kell alkalmaznunk. Az ötlet az, hogy két sor egyazon blokkban van a következő okok valamelyike ​​miatt:

  • a vonalak többé-kevésbé azonosak a bal koordinátájukkal.
  • mondhatjuk, hogy ugyanabban a blokkban a vonalak szélessége többé-kevésbé azonos. Ez nem igaz egy mondatra, ahol az utolsó szó új sort tölt ki. Az oszlopok közepes szélessége azonban általában kompaktabb, mint a címsor, amely a legtöbb esetben az összes cikkszélességet használja.
  • Ha a szélesség nem elég, megmérhetjük a vonalak közötti távolságot. A vonal téglalapnak tekinthető, közepével.

Lássuk részletesen az egyes pontokat. A bal oldali koordináták minden vonal elemben megtalálhatók. Tehát mondhatjuk, hogy két L1 és L2 vonal ideális esetben ugyanaz a bal oldali koordinátája, ha x1 - x2 = 0, ahol x a "bal" adat, amelyet már kibontunk. A küszöbértéket azonban értékelni kell, mivel a bemeneti pdf nem tökéletes. Jobb egy függvényt használni:

A szélességet olyan blokkok azonosítására használják, amelyek széles szélességgel különböznek egymástól:

A szélesség használata hasznos a cím, egy klasszikus oszlop és egy képfelirat felismerésére. Ennek ellenére nem képes felfedezni két egymással szomszédos sort, ahol az utolsó szöveget csak egy vagy két szó alkotja. Ebben az esetben ki kell értékelnünk a vonalak közötti távolságot.

A távolság központi fogalom az oszlopok észleléséhez egy cikkben. Használhatja a távolságképletet:

Összefoglalhatjuk a blokkpartíció funkciót:

Láthatja az eredményeket:

Miután a blokkokat el kellett rendeznünk, az egyedi oszlop kinyeréséhez.

A blokkok rendezése az olvasó olvasási módjától függ, az irányosságnak is nevezik. Balról jobbra és felülről lefelé mutató mintával részben támaszkodhatunk az AWS Textract alapértelmezett értékére, amely fentről lefelé rendezést ad nekünk. Ezért az első sor a cikk címéhez kapcsolódik. A fennmaradó blokkokhoz elég, ha minden iterációnál kiválasztja a legtöbbet:

Következtetés

Az Aws Textract jó termék, amely képes forrásból szöveget kinyerni, de nem vonja le a dokumentum szerkezetét.

Néhány közelítéssel a több oszlopos szöveget átrendezhetjük egyetlen oszlopszövegbe, megőrizve az emberi olvasási stratégiát. Az itt alkalmazott technika más sablonokhoz is felhasználható.

Nyugodtan adjon visszajelzést és kövesse az XPeppers / Claranet csatornát:

  • közepes szinten: https://medium.com/claranet-ch
  • a LinkedIn-en: https://www.linkedin.com/company/xpeppers-switzerland/about/