Rommel na OCR? Zo krijg je schonere tekst uit je scan
Door het team van FreePDF ·
Je hebt een scan door OCR gehaald, een alinea gekopieerd en er komt zoiets uit als „Geachte heer, hierbij 0ntvangt u cle factuur”. Of de woorden kloppen, maar een halve zin uit regel vier is in regel twee beland. Tekstherkenning raadt letters aan de hand van pixels, en als dat raden slecht uitpakt, ligt het meestal aan het beeld van de pagina en niet aan een verborgen instelling.
Eerst dit: onze OCR leest Engels, geen Nederlands
Er is geen taalinstelling om aan te draaien. Onze OCR gebruikt alleen Engelse taalgegevens. Nederlands bestaat grotendeels uit gewone Latijnse letters, dus een Nederlandse brief komt voor een flink deel leesbaar terug. Maar de herkenning is niet op onze taal afgesteld, en dat merk je aan de details: de trema in „ideeën” of „België” en het accent in „café” vallen weg of worden vervangen door een letter die erop lijkt, en je houdt meer verkeerd gelezen woorden over dan bij een Engelse tekst. Een Belgische brief die half Frans is, doet het niet beter.
Moet het echt kloppen, gebruik dan OCR-software met het Nederlandse taalpakket. Met ocrmypdf op je eigen computer (het opensourceprogramma waarop onze tool draait) is dat de optie -l nld+eng, met het Nederlandse taalpakket van Tesseract geïnstalleerd. Voor tweetalige Belgische stukken kan -l nld+fra.
Bekijk de hele tekstlaag
Zoeken in een PDF-lezer vertelt je alleen of één woord gevonden is. Om alles te zien wat de OCR heeft opgeleverd, haal je het bestand door PDF naar tekst en lees je het .txt-bestand dat je terugkrijgt. Meestal zie je dan een van deze patronen:
- Een pagina zonder tekst. De pagina lag op zijn kant, was te vaag, of werd helemaal overgeslagen.
- Goede woorden in de verkeerde volgorde. Een opmaakprobleem: kolommen, tabellen of een scheve pagina.
- Woorden vol verkeerde letters. Dan zit het in de beeldkwaliteit, het lettertype of de taal.
PDF naar tekst heeft trouwens een eigen vinkje „OCR uitvoeren”. Dat gebruikt dezelfde engine als PDF OCR, dus heb je alleen de tekst nodig, dan ga je in één stap van scan naar .txt.
Er stond al tekst op de pagina
Onze OCR slaat elke pagina over die al tekst bevat, zodat bestaande woorden nooit worden overschreven. Meestal is dat precies goed. Het pakt verkeerd uit als die bestaande tekst zelf de rommel is: sommige scanners doen hun eigen grove OCR, en sommige PDF's hebben lettertypen die bij het kopiëren als symbolen uitkomen omdat het bestand nooit heeft vastgelegd welk teken bij welke vorm hoort. Onze tool ziet tekst, laat de pagina met rust en geeft je dezelfde rommel terug.
De oplossing is de pagina's eerst plat te slaan tot gewone afbeeldingen:
- Zet de PDF om met PDF naar JPG en kies Hoog (300 DPI).
- Voeg de JPG's met JPG naar PDF weer samen tot één PDF. Controleer vooraf de volgorde, want Sorteren op naam zet pagina_10 vóór pagina_2. Met de pijltjes omhoog en omlaag zet je dat recht.
- Haal het nieuwe bestand door PDF OCR.
De platgeslagen kopie verliest links en formuliervelden, dus bewaar het origineel. Werk je graag op de opdrachtregel, dan heeft ocrmypdf voor precies dit geval de opties --force-ocr en --redo-ocr.
Verbeter de scan, niet de instellingen
Tesseract, de engine die het herkennen doet, werkt het best op schone, rechte pagina's van ongeveer 300 dpi. Onleesbare uitvoer is meestal terug te voeren op een van deze oorzaken:
- Lage resolutie of onscherpte. Scan opnieuw op 300 dpi, of 400 voor kleine letters. Een wazig beeld achteraf vergroten brengt geen detail terug.
- Een scheve pagina. Wij zetten pagina's niet recht voordat we ze lezen, en een paar graden scheefstand kan regels al uit elkaar trekken en stukken van verschillende regels aan elkaar lijmen. Scan recht, of gebruik een scanapp die automatisch bijsnijdt en rechttrekt.
- Pagina's op hun kant of ondersteboven. Die worden ook niet automatisch gedraaid. Haal het bestand eerst door PDF draaien, en onthoud dat die tool elke pagina draait.
- Weinig contrast. Verbleekte doorslagen, potlood en gekleurd papier maken het lastig om letters van de achtergrond te onderscheiden.
Wat OCR hoe dan ook slecht leest
Handschrift is de grote. Tesseract is gebouwd voor gedrukte tekst, en aantekeningen in de kantlijn worden ruis. Sierlijke en zware displaylettertypen geven vergelijkbare problemen, net als tekst over een foto of een patroon. Tabellen en pagina's met meerdere kolommen krijgen vaak elk teken goed, maar worden dwars over de kolommen gelezen: de tekst is doorzoekbaar, maar leest als onzin zodra je hem kopieert. In zulke gevallen levert OCR je zoekbaarheid op; voor exacte tekst is overtypen nog steeds de weg.
Veelgestelde vragen
Wordt het beter als ik OCR nog een keer uitvoer?
Nee. De tweede ronde vindt de tekstlaag van de eerste en slaat elke pagina over. Sla het bestand plat zoals hierboven beschreven, of begin liever met een betere scan.
Waarom haalt de OCR steeds 0 en O, of 1 en l, door elkaar?
Bij een lage resolutie zijn dat bijna dezelfde vormen, en de engine moet kiezen. Een scherpere scan helpt veel. Bij factuurbedragen, IBAN's en alles waar één verkeerd cijfer telt, vergelijk je de OCR-tekst met het beeld van de pagina voordat je erop vertrouwt.