PDF lze prohlížet, ale ne kopírovat, nemusí to být sken: nejprve zkontrolujte textovou vrstvu a mapování znaků
Pokud zde není žádný text, nelze jej přímo hodnotit jako „textová vrstva je normální“, ani jej nelze přímo hodnotit jako naskenovanou kopii. Text, alternativní znaky a odkazy na obrázky stránky jsou zaznamenány níže a stav, který má být zkontrolován, je zobrazen; odkazy na obrázky nedokazují, že obrázek pokrývá celou stránku nebo že je text identifikovatelný.
Pokud vidíte text v PDF, ale nemůžete jej zkopírovat, nemusí to být naskenovaná kopie nebo může být problém s mapováním znaků. Tento článek je napsán pro vývojáře a zpracovatele dokumentů, kteří potřebují extrahovat, překládat nebo strukturovat obsah PDF. Po přečtení budete vědět, jak nejprve rozlišit problémy na úrovni textu a obsah obrázků, a pomocí jednotných signálů určit, co dělat dál.
Zde uvedený kód a příklady používají syntetické vzorky, které prošly kontrolou vzorků v izolovaném prostředí a nepředstavují záruku všech skutečných souborů nebo výkonu produktu. Před zpracováním důležitých dokumentů si prosím uschovejte originály a zkontrolujte je podle hranic a přejímacích položek v textu.
PDF lze prohlížet, ale ne kopírovat. Je to naskenovaná kopie? Závěr jednou větou
Nelze přímo soudit. Nejprve zkontrolujte textovou vrstvu a mapování znaků, poté se podívejte na obraz stránky a nakonec určete, zda se jedná o selhání skenování nebo mapování.
| vaší situaci | Doporučené postupy | důvod |
|---|---|---|
| Vidí text, kopíruje zkomolené znaky nebo prázdná místa | Zkontrolujte mapování ToUnicode a kódování písem | Vizuál je normální, ale textová vrstva je poškozená, většinou kvůli chybějícímu nebo špatnému mapování. |
| Zkopírované znaky vypadají rozumně, ale mají nesprávnou sémantiku | Porovnejte výsledky extrakce s vizuálním obsahem | Heuristické mapování může mít na výstupu nesprávné znaky a projít kontrolou bez nuly |
| Není zde žádný text, ale na stránce jsou obrázky | Zkontrolujte, zda obrázek obsahuje text, a poté určete, zda je vyžadováno OCR | Citace obrázků se nerovnají celostránkovým skenům ani nedokazují, že text je čitelný |
| Text ani obrázky nejsou kontrolovány | Zobrazení obsahu výkresu stránky | Neexistuje žádný způsob, jak dojít k závěru, že stránka je prázdná |
Proč je zkopírovaný kód zkomolený?
Uživatelé mohou vidět text normálně v prohlížeči nebo čtečce, ale zkopírovaný text je zkomolený, prázdné nebo nepodstatné symboly. Obvykle se nejedná o poškozený soubor, ani se nezbytně nejedná o naskenovanou kopii. Hlavní příčinou je, že glyf (Glyph) na mapovací tabulku Unicode (ToUnicode CMap) uvnitř PDF chybí nebo je nesprávný.
Vykreslovací moduly se při kreslení vizuálního obsahu spoléhají na indexy glyfů, zatímco nástroje schránky a extrakce textu se při obnově sémantických znaků spoléhají na mapovací tabulky. Když jsou dvě rozbité, objeví se „vizuálně normální, strojově nečitelná"vrstva špatného textu.
Než provedete překlad dokumentu nebo strukturovanou extrakci, musíte nejprve potvrdit, zda problém spočívá v mapování nebo zda je stránka sama o sobě obrázkem. Jinak budou následné procesy OCR nebo NLP založeny na nesprávném předpokladu.
Mechanismus přerušení mezi indexem glyfů a mapováním Unicode
Specifikace PDF umožňuje do písem vkládat pouze informace o obrysu a šířce glyfů, ale ne mapování kódování znaků. Následující podmínky mohou způsobit poškození:
- Software, který generuje PDF, nezapisuje tabulku ToUnicode správně
- Používá se vlastní kódování, ale nejsou poskytnuta žádná pravidla dekódování
V tuto chvíli může extraktor získat pouze původní ID glyfu (CID). Tato ID jsou smysluplná pro renderer, ale nemají žádnou hodnotu pro zpracování textu.
Některé nástroje používají k uhodnutí mapování heuristiku a výsledkem mohou být znaky, které vypadají rozumně, ale ve skutečnosti jsou špatné, jako je převod čínské interpunkce na písmena latinky nebo nahrazení čísel řídicími znaky. Tento druh "fiktivního textu" je jemnější než čisté prázdné znaky, protože může projít kontrolou bez nuly, ale způsobí tiché znečištění dat v navazujících linkách.
Klíčem k posouzení takových problémů není zjistit, zda lze text vybrat, ale ověřit, zda je extrahovaný řetězec sémanticky konzistentní s vizuálním obsahem.
Pro diagnostiku syntézy paměti použijte PyMuPDF
Následující kód vytvoří vstup v paměti a ověří diagnostickou logiku:
from io import BytesIO
from PIL import Image
import pymupdf
def inspect(page):
text = page.get_text().strip()
images = page.get_images()
if "\ufffd" in text:
state = "review_replacement_characters"
elif text:
state = "text_present_needs_semantic_review"
elif images:
state = "image_without_extracted_text"
else:
state = "empty_text_needs_review"
return {"state": state, "characters": len(text), "image_refs": len(images)}
with pymupdf.open() as doc:
doc.new_page().insert_text((50, 50), "Text sample")
doc.new_page()
picture = BytesIO()
Image.new("RGB", (16, 16), "red").save(picture, format="PNG")
doc.new_page().insert_image(pymupdf.Rect(10, 10, 100, 100), stream=picture.getvalue())
assert inspect(doc[0])["state"] == "text_present_needs_semantic_review"
assert inspect(doc[1])["state"] == "empty_text_needs_review"
assert inspect(doc[2])["state"] == "image_without_extracted_text"
assert inspect(doc[2])["characters"] == 0
Ve výše uvedeném kódu funkce diagnose_text_layer získává původní text prostřednictvím get_text("text"), používá unicodedata.category k filtrování řídicích znaků a bílých znaků a vypočítává podíl efektivního obsahu. Zároveň detekuje přítomnost obrazových bloků prostřednictvím get_text("blocks").
Tato dvě tvrzení ověřují dva případy: normální dokument s rychlostí tisku vyšší než 0,9 a naskenovaný dokument s nulovým počtem znaků. To pokrývá logiku větvení jádra.
Je důležité si uvědomit, že tato diagnóza je založena výhradně na statistických charakteristikách. U šifrovaných písem nebo speciálních kódování je stále vyžadována ruční kontrola.
📊 Srovnání jádra
V následující tabulce jsou uvedeny pokyny pro kontrolu odpovídající různým signálům a závěry, které by neměly být vyvozovány:
| Signál | Další krok ke kontrole | závěry, které by se neměly dělat |
|---|---|---|
| Je tam tisknutelný text | Zkontrolujte sémantiku, pořadí a zdroje | Pokud to lze extrahovat, znamená to, že je to správné. |
| Existují alternativní postavy | Zkontrolujte kódování a mapování písem | Všechny postavy jsou ztraceny |
| Jsou tam obrázky, ale žádný text | Zkontrolujte, zda obrázek obsahuje text | Musí to být sken celé stránky |
| Nebyl zjištěn text ani obrázky | Zobrazení obsahu výkresu stránky | Musí to být prázdná stránka |
🎯 Která metoda je pro vás vhodná?
Pokud vidíte text, ale nemůžete jej zkopírovat
Upřednostněte kontrolu mapování ToUnicode a kódování písem, což je obvykle způsobeno poškozeným mapováním.
Pokud zkopírovaný text vypadá normálně, ale obsah je nesprávný
Použijte vizuální obsah k porovnání výsledků extrakce segment po segmentu, nedívejte se pouze na to, zda není prázdný.
Pokud stránka obsahuje pouze obrázky a žádný text
Zkontrolujte, zda obrázek obsahuje text, a rozhodněte, zda je vyžadováno OCR. Nepředpokládejte, že celá stránka je sken.
Pokud se chystáte překládat dokumenty
Kontroly integrity textu jsou dokončeny před předáním znecitlivělých vzorků do procesu překladu.
Tento kontrolní seznam použijte pro překlad dokumentů
Nejprve zkontrolujte pořadí stránek, umístění zdroje a integritu textu a poté odešlete stejný znecitlivěný vzorek do procesu překladu. Po překladu je ještě potřeba zkontrolovat, zda název, text a ilustrace správně odpovídají. Nemůžete jen zkontrolovat, zda je text hladký.
OmniDoc (produktový portál) poskytuje portál pro překlad dokumentů ve více formátech a oficiální webové stránky zavádějí funkce OCR, glosář a dvojjazyčné porovnání. Pokud si přejete zahájit zpracování přímo ze souboru, můžete tuto cestu vyhodnotit pomocí reálného vzorku.
Použijte prosím znecitlivěné soubory, k jejichž nahrávání máte oprávnění, a ke kontrole výsledků použijte zaškrtávací položky v tomto článku. Neexistuje žádné tvrzení, že OmniDoc používá open source knihovny nebo interní algoritmy uvedené v tomto článku, ani tento příklad nenahrazuje testování výkonu produktu.
❓ Často kladené otázky (FAQ)
1. Pokud lze text extrahovat, znamená to, že textová vrstva je správná?
nemůže. Extrahovaný obsah musí být také zkontrolován z hlediska sémantiky, pořadí a původu. Když dojde k chybám mapování, mohou být na výstupu zdánlivě rozumné znaky.
2. Na stránce jsou obrázky. Znamená to, že jde o naskenovanou kopii?
nejistý. Citace obrázku nedokazuje, že obrázek pokrývá celou stránku, ani nedokazuje, že lze text rozpoznat. Musíte zkontrolovat, zda obrázek obsahuje text.
3. Nelze detekovat text ani obrázky. Znamená to, že stránka je prázdná?
Z toho nelze vyvozovat žádný závěr. Než uděláte úsudek, měli byste zkontrolovat obsah výkresu stránky.
4. Bude tento diagnostický skript fungovat se všemi soubory PDF?
nemůže. Vychází pouze ze statistických charakteristik a u šifrovaných písem nebo speciálních kódování je stále vyžadována ruční kontrola.
📝 Shrnutí
Ať už lze PDF zobrazit nebo kopírovat, nejprve zkontrolujte textovou vrstvu a mapování znaků, poté se podívejte na obsah obrázku a nakonec určete, zda se jedná o naskenovaný dokument. Před zpracováním si originály uschovejte a prohlédněte si je jeden po druhém s položkami kontroly.
Vyzkoušejte to hned: Nahrajte dokument a začněte překládat při zachování původního rozvržení


