Tags – nástroj pro čištění HTML knih
Už dost dlouho jsem tu nepsal nic o elektronických knihách. Důvod je prozaický: Postupně se mi podařilo dosáhnout stavu, kdy jsou všechny problémy vyřešeny nebo jsem aspoň dospěl k závěru, že vyřešit nejdou, a tudíž nemám důvod nic dalšího hledat. Nicméně: mám tu několik programů, které jsem kdysi dávno napsal s myšlenkou, že je vyzkouším v praxi, opravím všechny významné chyby a pak je pustím ven. Od té doby uplynuly skoro dva roky a já ty prográmky skoro každý den spokojeně používám, aniž bych na jejich kód sáhl. První z nich, který už jsem kdysi „bokem“ uvedl v jednom článku, ale dosud neměl samostatnou stránku, je Tags.
Tags je nástroj pro vyčištění HTML kódu knihy. Nastupuje do práce bezprostředně poté, co jsem provedl OCR (Z papíru do čtečky: FineReader 9.0) a provedl ten úplně nejzákladnější ruční převod výstupního souboru do HTML šablony (víceméně jen převedení odstavců z <p><span class=fontčíslo>Text odstavce</span></p>
na <p>Text odstavce</p>
). Nyní chci soubor projít a provést technickou korekturu, tj. hromadně z něj vyházet všechny technickénesmysly, které tam OCR program nasázel. A právě v tom pomáhá Tags.
Samozřejmě by se mi líbilo mít prográmek, kterému bych předhodil elektronickou knihu a on z ní vymazal všechny nesmyslné spletence tagů. Bohužel, něco takového naprogramovat nedokážu (respektive, naprogramovat bych to dokázal, ale nemůžu najít vhodný algoritmus, kterým bych ty „nesmyslné spletence“ identifikoval): musí nastoupit ruční práce. Tags mi ji usnadňuje tím, že mi pomůže vytipovat podezřelá místa, na která se mám soustředit. Dělá to přitom úplně jednoduše: vezme vstupní soubor, celý ho projde a vypíše tři samostatné seznamy:
-
Seznam všech tagů, které jsou v souboru obsaženy, včetně jejich počtů. Z toho snadno poznám, jaké všechny tagy jsou navíc – v šabloně jsem zavedl množinu používaných tagů, skoro všechny ostatní jsou nesmysly, které chci odstranit. Nemůžu to ovšem udělat úplně automaticky: Za prvé, některé knihy obsahují i neobvyklé konstrukty, které chci zachovat. Za druhé, technické chyby z FineReaderu mají tendenci se shlukovat a pro mě je velmi výhodné nejen smazat „špatné“ tagy, ale rovnou si prohlédnout i jejich okolí, protože v něm obvykle také najdu něco na smazání. Navíc se typicky při podrobnějším pohledu najde nějaká pravidelnost, kterou mohu vtělit do regulárního výrazu a přeci jen provést velkou část technické korektury strojově.
-
Seznam všech HTML entit, vyjádřených ve tvaru
&#kód;
. Smysl je dvojí: za prvé, sjednocení zápisu (aby všechny levé dolní uvozovky byly uvedeny jako„
a ne některé jako„
a jiné jako„
, byť se oba zápisy zobrazí čtenáři stejně. Za druhé, stejně jako v předchozím případě jsou i netypické HTML entity běžným projevem chyb OCR a stojí za to si je zkontrolovat a opravit najednou. -
Seznam všech znaků z „high ASCII“, tzn. znaků s ASCII kódem 128 a vyšším. Smysl je totožný jako u HTML entit, i když do popředí vstupuje spíš to sjednocení zápisu než výskyt chyb. Ale i chybné znaky se najdou – například
•
. Důležité je, že v seznamovém zobrazení snadno odliším znaky, které vypadají stejně nebo skoro stejně, ale mají jiný význam – vizuálně rozlišit dlouhou pomlčku (—
), krátkou pomlčku (–
), spojovník (-
) a mínus (-
) je docela problém, v seznamovém pojetí je to trivialita („pokud je to na novém řádku, je to jiný symbol“).
Moje práce spočívá v tom, že si postupně vyhledám všechny zobrazené prvky seznamů a opravím je. Úspora spočívá v tom, že tak vyřeším všechny najednou a hlavně, že to jde udělat rychle (typický postup je „CTRL+C
zkopírovat symbol ze řádku do schránky, CTRL+F
otevřít vyhledávání, CTRL+V
vložit hledaný symbol, vyhledat první výskyt, opravit ho, CTRL+C
vložit opravu do schránky a pak už jenom až do konce souboru střídat F3
vyhledat další výskyt a CTRL+V
nahradit ho vytipovanou opravou. S tím, že mohu kdykoliv provést „speciální“ náhradu nebo, pokud si ověřím, že jsou všechny opravy stejné, to vyřešit prostě hledáním s nahrazením.
Zobrazený počet výskytů mi slouží k tomu, že když někde zjistím tak velký počet výskytů, že by mě ruční kontrola frustrovala, tak to hodím za hlavu a vhodným nahrazením smažu všechny najednou, aniž bych se ohlížel na jejich okolí. Ale to je potřeba jen málokdy a vesměs jsou to stejně případy, kdy tohle „hrubé“ řešení ničemu nevadí (typický příklad: starší tisky mají problémy s udržením síly písmen, takže FineReader 9 zahltí dokument spoustou zbytečných <b>
a </b>
, které skoro nikdy nemají žádný negativní přeliv do okolí).
Používání Tags
Jak už je u mě zvykem, Tags se spouští i ovládá z příkazové řádky. Důvod je nejen v tom, že mě nebaví dělat grafická prostředí, ale také v tom, že jsem si pro editaci knížek oblíbil používání programátorských editorů typu Programmer’s Notepad a ty obvykle podporují použití externích command-line programů přímo ze svého menu s tím, že jejich výpis zase zobrazí v nějakém vyhrazeném okně.
Program Tags očekává na příkazové řádce jeden nebo více parametrů. Povolené jsou:
-?
nebo-h
zobrazí nápovědu.-r
zapne rekurzivní prohledávání podadresářů při hledání souborů na zpracování.-r-
vypne rekurzivní prohledávání podadresářů při hledání souborů na zpracování. (výchozí hodnota)-cz
zapne „český režim“; v tomto režimu jsou české znaky z diakritikou vyřazeny ze seznamu znaků z high ASCII.-cz-
- Cokoliv jiného je chápáno jako název souboru, respektivne maska názvu (uplatňují se divoké znaky
*
a?
podle pravidel, která jsou v command-line obvyklá. Použití na víc souborů má význam hlavně tehdy, když chci dodatečně ověřit, jestli se mi do těch X desítek zpracovaných knih nevloudily nějaké tagy, které bych tam mít nechtěl.
Typické použití: tags.exe -cz kniha.htm
Omezení
Program je v jakémsi „polostavu“, který jsem popisoval v úvodu – není hotový, jsou v něm části, které bych chtěl napsat jinak a lépe, ale za skoro dva roky používání jsem nenašel žádný podstatný důvod, proč něco měnit, protože v mých „scénářích použítí“ se ta omezení nijak neprojevují. Zejména upozorňuji na to, že Tags nemám vyzkoušený s jinými kódováními než US-ASCII a Windows-1250; mám podezření, že to byla jedna z vlastností, kterou jsem chtěl později doprogramovat, ale nějak se k ní nedostal.
Download
- Tags v0.04 (2011-09-25, 47 KB) – elektronicky podepsáno mým certifikátem.
- Tags v0.02 (2010-02-13, 40 KB) – první veřejná verze.