Jak načíst částku v PDF, její pozici na stránce

Tento článek ukazuje použití PyMuPDF k vyhledání textu s opakovaným množstvím v zadaném obdélníku. Analýzou prvních pěti polí oktetu slov a ověřením počtu kandidátů se lze vyhnout chybným úsudkům ve spojení fragmentů. Poskytuje příklady Pythonu na úrovni paměti, strategie zpracování hranic a tabulky akceptace a poskytuje praktické návrhy pro připojení k pracovnímu postupu překladu dokumentů OmniDoc.

Jak najít duplicitní částky? Závěr jednou větou

Když je rozvržení pevné, nejprve omezte známou oblast a poté zkontrolujte text a ponechte počet kandidátů na posouzení volajícímu. Je snazší interpretovat než pokračovat v hromadění regulárních výrazů a je méně pravděpodobné, že se dopustíte tichých chyb.

vaší situaciDoporučené postupydůvod
Stejná částka se objeví na více místech stránkyOmezte hledání na obdélníkovou oblast, kde se nachází obchodní pole, a poté vyhledejteFulltextové vyhledávání nemůže určit, které pole je oborem podnikání
V oblasti dotazu je více kandidátůVraťte všechny kandidáty v kombinaci se štítky nebo ručním rozlišenímProgramy by neměly rozhodovat o podnikání
V oblasti dotazu nejsou žádné požadavkyOznačte důvod a zkontrolujte původní stránku, žádné nulové odsazeníNesprávná oblast, rozdělená množství nebo chybějící textové vrstvy mohou mít za následek nulové shody
Pozice rámu vypadá přesazeněExplicitní transformační řetězce pro rotaci, oříznutí a měřítko vykreslováníMíchání souřadnic zobrazení a extrahovaných souřadnic způsobí odchylky

Dvě stejné částky v jednom výpisu

1,200.00 se ve výpisu objeví dvakrát: jednou ve sloupci dlužné částky a jednou v textu popisu. Fulltextové vyhledávání je dokáže najít, ale nedokáže za vás rozhodnout, který z nich je obor podnikání.

Pokud je rozvržení formuláře pevné, je obvykle snazší jej interpretovat nejprve omezením známé oblasti a poté prohledáním textu než pokračováním v úpravě regulárního výrazu. Klíčem není „najít pouze jedno pole", ale považovat nulové i vícenásobné shody za jasné výsledky a nenechat program provádět neoprávněné volby.

Nechte pozici slova, ne jen text

`page.get_text("words")` PyMuPDF vrací záznam slova s pozicí, společné pole je (x0, y0, x1, y1, text, block_no, line_no, word_no). Následující příklad zabírá pouze prvních pět polí a poslední tři čísla nejsou prozatím zapojena do regionálního filtrování.

„Slovo"je zde fragment daný extraktorem, který se nemusí nutně rovnat slovu v lingvistickém smyslu, ani není zaručeno, že množství bude vždy úplným fragmentem.1,200.00 lze rozebrat nebo může mít sousední štítky. Tento článek se zabývá pouze přesným párováním úplných fragmentů: Raději předám záznamy, které nesplňují podmínky, ke kontrole, než abych je v tichosti spojil do zdánlivě legálního množství.

Ověřte se dvěma syntetickými stránkami o stejném množství

Vytvoříme novou stránku PDF v paměti a umístíme stejné množství blízko svislých souřadnic 120 a 420. Oblast dotazu pokrývá pouze výše uvedenou částku.

Bod vložení textu je pozice účaří, nikoli levý horní roh textového pole. Výška a šířka skutečného rámečku bude ovlivněna písmem a velikostí písma, takže souřadnice nemohou být pevně zakódovány do pevné hodnoty.

Správný výstup by měl splňovat dvě podmínky:

  • V oblasti dotazu je pouze jeden kandidát a obdélník kandidátů je v oblasti zcela zahrnut.
  • Po rozšíření rozsahu dotazu na celou stránku by měli být získáni dva kandidáti, čímž vstoupíte do větve nejednoznačnosti.

Nakonec zkontrolujte nulový výskyt pomocí řetězce, který na stránce není. To je blíže ke smlouvě požadované skutečným rozhraním, než jen demonstraci úspěšného vyhledávání.

Spustitelný kód: předejte počet kandidátů volajícímu

Závislost je pymupdf, prosím nainstalujte a uzamkněte verzi v testovacím prostředí. Následující kód nepřistupuje k síti, nezapisuje soubory a nemění původní dokument zákazníka. Vytváří pouze demonstrační PDF.

import pymupdf

def locate(page, target, query):
    query = pymupdf.Rect(query)
    candidates = []
    for word in page.get_text("words"):
        x0, y0, x1, y1, text = word[:5]
        box = pymupdf.Rect(x0, y0, x1, y1)
        if text == target and query.contains(box):
            candidates.append(tuple(box))
    return candidates

def decide(candidates):
    if len(candidates) == 0:
        return "missing"
    if len(candidates) > 1:
        return "ambiguous"
    return "unique"

with pymupdf.open() as doc:
    page = doc.new_page(width=595, height=842)
    page.insert_text((80, 120), "1,200.00", fontsize=11)
    page.insert_text((80, 420), "1,200.00", fontsize=11)
    query = pymupdf.Rect(72, 100, 300, 150)
    local = locate(page, "1,200.00", query)
    assert decide(local) == "unique"
    assert query.contains(pymupdf.Rect(local[0]))
    assert decide(locate(page, "1,200.00", page.rect)) == "ambiguous"
    assert decide(locate(page, "999.99", query)) == "missing"
    print("unique / ambiguous / missing cases passed")

contains vyžaduje úplné zahrnutí, spíše než pouhé dotýkání se okraje oblasti. Pokud je pole dotazu příliš těsné, mohou postranní částky spadnout na nulu, což není důvod, proč by se mělo automaticky rozšířit na celou stránku. Než se rozhodnete, jak upravit rozsah, měli byste zkontrolovat souřadnicový systém použitý při měření oblasti.

Pokud podnik dovolí středovému bodu zapadnout, měla by být sepsána další pravidla a měly by být provedeny dodatečné testy na překrytí hranic. Neměňte tajně význam rozsudku ve stejné funkci.

Produkční logika by se při zachycení výjimek neměla spoléhat pouze na assert, protože režimy optimalizace mohou odstranit tvrzení. Tvrzení v příkladu se používají pro regresní kontrolu. Při skutečném přístupu k frontě úloh by měly být použity jasné podmíněné větve a obchodní stavy.

Tři výsledky, tři metody zpracování

Výsledky dotazů jsou obvykle rozděleny do tří kategorií, z nichž každá vyžaduje různé akce zpracování:

  • Pouze jeden přístup: V oblasti je pouze jeden kompletní odpovídající fragment a uloží se číslo stránky, původní text, obdélník a verze pravidla.
  • Nulový zásah: Může se stát, že oblast je nesprávná, množství je rozděleno nebo chybí textová vrstva. Označte kandidáta na příčinu, zkontrolujte původní stránku a nepřidávejte nuly.
  • Multiple Hits: Ve stejné oblasti jsou duplicitní částky, nebo se změnila šablona, vraťte všechny kandidáty, kombinujte štítky nebo ručně vyjasněte.

Další dvě situace je také třeba řešit samostatně:

  • Existuje rámeček, ale hodnota je nesprávná: Samotná textová vrstva může být chybná nebo je nesprávný odpovídající cíl. Měli byste se vrátit na původní stránku a zkontrolovat a zabránit tomu, aby souřadnice podporovaly hodnotu.
  • Odsazení při pohledu na snímek: Souřadnice zobrazení a souřadnice extrakce mohou být smíšené a transformační řetězec rotace, oříznutí a měřítka vykreslování musí být jasný.

📊 Srovnání jádra

Metody zkoumáníKritéria určeníJe třeba být opatrný
Plné začlenění (použitý příklad)Kandidátský obdélník je zcela umístěn v oblasti dotazuPokud je dotazovací pole příliš těsné, může být hodnota na hraně nulová
Středové body padají (pravidla musí být napsána zvlášť)Body pro kandidáty se nacházejí v rámci regionuPřekryv hranic vyžaduje samostatné doplňkové testování
Hledám celé stránkyVyhledat všechny kandidátyVětšina výsledků je nejednoznačná a vyžaduje označování nebo další ruční posouzení

Toto není univerzální extraktor

Kód neanalyzuje měnu, tisíce oddělovačů ani desetinná pravidla, ani neuznává sémantiku jako "aktuální období splatné" a "zůstatek za předchozí období". To, že je jen jeden kandidát, neznamená, že podnik má ten správný význam.

Skenovaná kopie musí být také nejdříve dostupná v textu a lokalitě. Stránky s textovými vrstvami, ale nesprávným obsahem, nesmí být povoleny jen proto, že je lze kopírovat.

Tento článek používá neotočenou stránku eseje. Když se skutečná stránka otáčí, nejprve určeme, zda dotazovací pole pochází z obrazovky nebo extrahuje souřadnice, a převádějte pouze v případě nutnosti. Nenásobte maticí bez ohledu na zdroj.

Při ukládání zdrojových stránek rozlišujte mezi indexy od nuly do nuly a čísly stránek orientovaných na osobu, abyste se při kontrole sousedních stránek nemylně domnívali, že důkazy neexistují.

🎯 Která metoda ti vyhovuje?

Pokud potřebujete extrahovat data z pevného formuláře rozložení

Nejprve omezte oblast, kde se nachází obchodní pole, pak vyhledejte částku a uložte číslo stránky, obdélník a verzi pravidel.

Pokud potkáte více kandidátů

Neberte první možnost přímo; vraťte všechny kandidáty a určete obchodní pole podle štítků nebo ručního posouzení.

Pokud vaše stránka často nejde na nulu

Nejprve zkontrolujte, zda existují souřadnice oblasti, množství a textová vrstva, a pak se rozhodněte, zda upravit rozsah nebo přejít na jiné extrakční cesty.

Pokud chceš dělat překlad dokumentů

Klíčové detaily jako množství, datum a množství jsou zahrnuty v manuální kontrole, s jasným rozdělením práce mezi technickou a manuální kontrolou.

Klíčová čísla nechte k přezkoumání překladu

Překlad dokumentů by neměl být založen pouze na plynulosti vět, ale také na klíčových položkách jako množství, datum a množství. OmniDoc (produktový záznam) nabízí několik portálů pro překlad dokumentů a bilingvní srovnání představené na oficiálních stránkách může sloužit jako vstupní bod pro recenze; Koordinační polohovací skripty jsou vhodné pro zachování původních důkazů a pomoc při lokalizaci problémových oblastí.

Doporučuje se nejprve vyhodnotit pomocí vzorku desenzibilizace, který máte autorizované k nahrání. Jak se překlad prodlužuje, pozice obsahu se může rozumně měnit a "nové a staré souřadnice jsou přesně stejné" by nemělo být považováno za tvrdý požadavek pro správný překlad.

Cennější kontroly jsou: zda je částka ponechána, zda je měna jasně definována a zda příslušný štítek stále odkazuje na stejný obchodní význam.

❓ Často kladené otázky (FAQ)

1. Proč prostě nevzít první tah?

Protože fulltextové vyhledávání vám může říct jen místo, kde se částka nachází, a nemůže určit, která část je obchodní pole. Přímé přijetí prvního zásahu může vypadat správně, ale zdroj už nemusí být špatný.

2. Proč dotazovací pole vyžaduje úplné zahrnutí, místo aby se jen dotýkalo okraje?

Příklad používá plně zahrnutou metodu určení, aby se zabránilo považování neúplných segmentů za platné zásahy. Pokud je dotazovací pole příliš úzké a nezpůsobí žádné výsledky, nejprve zkontrolujte souřadnicový systém a rozsah, místo abyste automaticky rozšiřovali celou stránku.

3. Co dělat, když je výsledek dotazu nulový?

Označte kandidátní příčinu a zkontrolujte původní stránku; nepřidávejte nuly. Nesprávné oblasti, rozdělené množství nebo chybějící textové vrstvy mohou vést k nulovému výskytu.

4. Lze tento kód přímo použít na skutečné účty?

Nelze ji použít přímo. Příklad se nezabývá měnou, oddělovači tisíců ani obchodní sémantikou a syntetický vzorek v tomto článku nepředstavuje test přesnosti skutečných bankovek.

📝 Shrnutí

Při určování částky nejprve definujte oblast, poté uveďte plný počet kandidátů volajícímu k posouzení. Jak nulové, tak vícenásobné zásahy by měly mít jasné postupy manipulace. Nejprve použijte anximizované vzorky k ověření pravidel, poté postupně integrujte skutečné dokumenty.

Zkušenost nyní: Nahrajte svůj dokument a začněte s překladem, přičemž zachováte původní formátování

Aktualizováno 2026-11-14