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 &bdquo; a ne některé jako &bdquo; a jiné jako &#132;, 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.

Podobné příspěvky:

Leave a Reply

Themocracy iconWordPress Themes

css.php