Vžijte se do loňského roku a představte si, že jste bídně placení zaměstnanci Českého statistického úřadu, kteří mají na starost přepis vyplněných sčítacích archů do nějakého informačního systému. Zpracování i části Prahy by přineslo nesmírně nudnou, pracnou a otravnou práci. S tímto a jemu podobnými případy může velmi dobře pomoci recenzovaný produkt.
Instalace produktu, jak je dobrým zvykem, je bezproblémová a nemělo by
cenu se o ni bavit, kdyby tu nebyl hardwarový klíč, který je nutné vložit
do volného USB portu (dodává se i klíč pro paralelní port) a instalační
program musí zákonitě nainstalovat i ovladač. To je ovšem docela
nechutné, protože legální uživatelé musí mít v systému (a v paměti)
naprostou zbytečnost oproti nelegálním, kteří si produkt prostě a
jednoduše cracknou. Ale to jen na okraj, pojďme se podívat na vlastní
FormReader.
Práce s ním je rozdělena do dvou základních kroků. Prvním je
seznámení FormReaderu s formulářem a druhým pak vlastní proces
skenování vyplněných předloh, rozpoznávání zadaných dat a
uložení.
Krok 1 — Příprava formuláře
První krok je nejdůležitější — pokud jej neprovedeme precizně, bude
potřeba v druhém kroku provádět velké množství oprav. O co tedy jde? Po
naskenování prázdného formuláře se musí určit oblasti, které jsou
nějakým způsobem pro vás relevantní. Tyto oblasti se dělí do tří
kategorií: blok pro rozpoznávání zadaných dat, referenční a
servisní blok.
Blok pro rozpoznávání určuje oblast, ve které bude docházek ke čtení
zadaných údajů jako je např. rodné číslo, stav, obvod hrudníku
kandidátek na sekretářku apod. Pokud jste již pár (desítek) formulářů
vyplnili, jistě víte, že text se nezadává podle libovůle respondenta, ale
např. do rámečků, různých sloupců, oddělených polí apod. (vezměme
jako ukázku poštovní směrovací číslo na pohlednici). To ale není vše.
Často je na výběr z několika možností a dotazovaný má zaškrtnout
správnou odpověď a další. S tímto vším FormReader počítá a při
určování oblasti (bloku) pro rozpoznávání je nutné také zadat druh této
oblasti (kromě zmíněného lze určit oblast i pro čárový kód).
Referenční bloky slouží jednak k „sesynchronizování“ naskenovaného
vyplněného formuláře s předlohou, ale také k vymezení toho, jak se má
rozpoznávat text. Pokud např. zadáváte již zmíněné poštovní
směrovací číslo, pak musíte určit jednotlivé obdélníky, aby nebyly
zahrnuty do rozpoznávání čísel a následně z toho nevycházely
paznaky.
Poslední jsou servisní bloky, které jsou určeny např. k zadání dat
obsluhou.
To, že jste určili jednotlivé oblasti, ještě neznamená, že jste
u konce. Naopak, ke každé rozpoznávané oblasti je zapotřebí určit její
atributy. Nejdůležitějším atributem je datový typ. Tímto typem bývá
text, číslo apod., což velmi usnadňuje rozpoznání textu (jestliže si
např. FormReader myslí, že našel malé l, ale blok má numerický datový
typ, ihned ví, že jde o jedničku). Datovým typem však může být i něco
mnohem složitějšího — již několikrát zmíněné PSČ má v České
republice právě pět cifer apod. To, že jsem zmínil konkrétní stát, není
náhodou. Aplikace oplývá takto definovanými typy pro několik desítek
států. Skvělé je na tom i to, že formulář může být
vícejazyčný — pro každou rozpoznávanou oblast můžete definovat atribut
odpovídající jinému státu. Pokud si přesto nevyberete, můžete si
definovat typ vlastní či si upravit stávající (např. FormReader se mylně
domnívá, že v naší republice používáme šestimístné PSČ). Tyto typy
lze úspěšně definovat pomocí regulárních výrazů, povolených
znaků apod.
Pokud tedy máte nadefinovány typy, můžete přejít na další oblast a
tou jsou pravidla. Pomocí pravidel lze určit velké množství podmínek,
které musí být splněny, aby byl formulář přijatelný (tuto práci sice
může vykonat např. SQL databáze či aplikační server, kam se nakonec data
odesílají, ale při ukládání do textového souboru byste měli smůlu). Na
výběr je z patnácti druhů pravidel jako jsou regulární výrazy, testy na
součet čísel, normalizace měny, test oproti databázi a další.
Tím nejsou možnosti vyčerpány, ale jedná se již převážně
o kosmetické záležitosti. Načtená písmena lze automaticky převádět na
malá či velká, je možné určit druh rozpoznávaného písma (psané rukou,
strojem, …) a další. Možností je mnoho a čím více se specifikuje co,
kde a jak se na formuláři vyplňuje, tím větší je pravděpodobnost, že
bude docházet při vlastním procesu rozpoznávání k co nejmenšímu
počtu chyb.
Krok 2 — Dávkové zpracování
Druhý krok již nepotřebuje tolik znalostí o formuláři a může jej
dělat dobře vycvičená opice, která bude jednotlivé formuláře skenovat a
korigovat případné chyby. Celý proces je rozdělen do několika podúloh.
Naskenování netřeba nijak zvlášť komentovat, pouze je dobré říct, že
lze skenovat jednu stránku formuláře nebo všechny stránky najednou.
Podobně lze i otevřít již jednou uložený naskenovaný formulář. Poté
dojde k rozpoznávání naskenovaného formuláře podle zadaných kritérií
v prvním kroku. Zde je vidět síla (a samozřejmě i slabina) celého
procesu. Pokud se jedná o ručně vypisovaný formulář a respondent píše
jako prase, je nutné dost věcí doopravit. K tomu je samozřejmě vhodně
navrženo i prostředí. Na levé straně okna aplikace je naskenovaný
formulář, na pravé pak rozpoznaný text, který lze opravovat. Při
případné opravě je ve spodním okně vidět, kterou část právě
upravujete (jde o zvětšenou část naskenovaného formuláře, viz obrázek).
Druhá možnost je nechat zkorigovat obsluhou vše najednou a pak se prochází
jednotlivá pole za sebou a v případě potřeby se data opravují. Toho lze
s úspěchem použít na velkém, případně velmi strukturovaném
formuláři.
Na závěr zbývá data uložit. Možností je opět několik: textový
soubor, CSV soubor, tabulka DBF či tabulka Excelu, ale i databáze, ke které
je potřeba připojit se pomocí ODBC, případně do OLE Automation objektu. Je
škoda, že aplikace nezvládá novější databázovou konektivitu pomocí OLE
DB a proto se musí zbytečně případný ODBC ovladač pro konkrétní
databázi doinstalovat.
Celkový pohled
Při práci s nástrojem lze v podstatě dojít k jedinému problému a
tím jsou již jednou zmínění nečitelně píšící respondenti. Při
testování aplikace jsem zkusil zadávat několik druhů formulářů
(pohlednici, složenku typu C, přihlášku na vysokou školu a daňové
přiznání) s tím, že jsem něco vyplnil ručně, něco vytiskl na
počítači a složenku pracně vypsal na psacím stroji. FormReader zvládl
vše až na opravdové detaily na jedničku kromě ručně vyplněných údajů.
Na jednu stranu ho chápu, sám mám často problém po sobě cokoliv
přečíst, na druhou stranu se nabízí otázka, má cenu pořizovat takovýto
nástroj, jestliže většinu dat budou respondenti vyplňovat ručně? Osobně
si myslím, že ano. Ačkoliv se mohou vyskytnout problémy a často načtená
data opravovat, přesto se získá cenný pomocník: kontroluje integritu dat,
ukládá je do zvoleného datového zdroje a procento úspěšnosti může být
relativně veliké. Ne každý se totiž musí za svůj pravopis stydět.
Na FormReaderu jsou působivé jeho možnosti. Parametrizování
jednotlivých polí, které jsou určeny k rozpoznávání, je impozantní.
Datové typy (navíc pro velké množství států včetně České republiky),
podpora nejen textových dat, ale i zaškrtávacích polí, definování
pravidel a export do databáze činí tento produkt ukázkou dobře odvedené
práce. Občas sice zakulhá uživatelské prostředí, které by mohlo být
výrazně vylepšeno, ale přesto se v něm neztratíte. Pakliže o „něčem
takovém“ uvažujete, myslím, že jste našli výtězného kandidáta.
FormReader vás jistě mile překvapí.
Obrázky
| Oblast defonovaná jako PSČ s volbou typu „chlívečků“. |
|
| Naskenovaná obálka a rozpoznávání textu. |
|
| Definování regulárního výrazu poskytuje mnoho možností. |
|
Plusy, mínusy, závěr
Plusy
- Velké množství nastavitelných parametrů
- Podpora češtiny
Mínusy
- Hard Lock
- Drobnosti v GUI
Závěr
- Kvalitní nástroj pro převod vyplněných formulářů do elektronické
podoby.
Kontakt
Tento článek byl napsán pro časopis Softwarové noviny 5/2002.
Upozornění: tento text neprošel redakční úpravou, takže je
tak, jak byl napsán včetně případných chyb. Žádná část tohoto
článku nesmí být použita bez předchozího souhlasu autora.
Seznam mých dalších článků je v tomto přehledu.