Hoe u een bedrag in PDF kunt ophalen, de positie ervan op de pagina

Dit artikel demonstreert het gebruik van PyMuPDF om herhaalde hoeveelheden tekst binnen een opgegeven rechthoek te lokaliseren. Door de eerste vijf velden van de woorden octet te ontleden en het aantal kandidaten te verifiëren, kunnen verkeerde inschattingen bij het splitsen van fragmenten worden vermeden. Biedt Python-voorbeelden op geheugenniveau, strategieën voor grensverwerking en acceptatietabellen, en geeft praktische suggesties voor verbinding met de OmniDoc-documentvertaalworkflow.

Hoe vind ik dubbele bedragen? Conclusie in één zin

Als de lay-out vaststaat, beperk dan eerst het bekende gebied en controleer vervolgens de tekst, en laat het aantal kandidaten ter beoordeling over aan de beller. Het is gemakkelijker te interpreteren dan het blijven opstapelen van reguliere expressies, en het is minder waarschijnlijk dat er stille fouten worden gemaakt.

jouw situatieAanbevolen praktijkenreden
Hetzelfde bedrag verschijnt op meerdere plaatsen op de paginaBeperk de zoekopdracht tot het rechthoekige gebied waar het bedrijfsveld zich bevindt en zoek vervolgensZoeken in volledige tekst kan niet bepalen welk veld het bedrijfsveld is
Er zijn meerdere kandidaten in het zoekgebiedRetourneer alle kandidaten, gecombineerd met labels of handmatige ondubbelzinnigheidProgramma's mogen geen keuzes maken voor het bedrijf
Er zijn geen treffers in het zoekgebiedMarkeer de reden en controleer de originele pagina, zonder nulvullingVerkeerde regio's, gesplitste bedragen of ontbrekende tekstlagen kunnen resulteren in nul treffers
De positie van het frame lijkt verschovenExpliciete transformatieketens voor rotatie, bijsnijden en weergaveschalingHet combineren van weergavecoördinaten en geëxtraheerde coördinaten zal afwijkingen veroorzaken

Twee identieke bedragen op één afschrift

1,200.00 komt twee keer voor in een afschrift: één keer in de kolom voor het verschuldigde bedrag en één keer in de beschrijvingstekst. Zoeken in de volledige tekst kan ze vinden, maar kan niet voor u beslissen welk vakgebied het zakelijke veld is.

Als de formulierindeling vaststaat, is het meestal gemakkelijker te interpreteren door eerst een bekend gebied te beperken en vervolgens de tekst te doorzoeken, dan door de reguliere expressie verder aan te passen. De sleutel is niet om "slechts één vakje te vinden", maar om zowel nulhits als meerdere hits als duidelijke resultaten te behandelen, en het programma geen ongeoorloofde keuzes te laten maken.

Laat de positie van het woord staan, niet alleen de tekst

`page.get_text("words")` van PyMuPDF retourneert een woordrecord met positie, het gemeenschappelijke veld is (x0, y0, x1, y1, text, block_no, line_no, word_no). In het volgende voorbeeld worden alleen de eerste vijf velden gebruikt, en de laatste drie getallen worden voorlopig niet betrokken bij regionale filtering.

Het "woord" is hier het fragment dat door de extractor wordt gegeven, dat niet noodzakelijkerwijs gelijk is aan een woord in taalkundige zin, en het is ook niet gegarandeerd dat een bedrag altijd een volledig fragment zal zijn. 1,200.00 kan worden gedemonteerd of kan aangrenzende tags hebben. In dit artikel wordt alleen ingegaan op het exact matchen van complete fragmenten: ik geef liever stukken over die niet aan de voorwaarden voor beoordeling voldoen, dan ze stilletjes op te splitsen tot een ogenschijnlijk legaal bedrag.

Verifieer met twee synthetische pagina's van hetzelfde aantal

We maken een nieuwe PDF-pagina in het geheugen en plaatsen dezelfde hoeveelheid respectievelijk in de buurt van de verticale coördinaten 120 en 420. Het zoekgebied heeft alleen betrekking op het bovenstaande bedrag.

Het tekstinvoegpunt is de basislijnpositie, niet de linkerbovenhoek van het tekstvak. De hoogte en breedte van het echte vak worden beïnvloed door het lettertype en de lettergrootte, zodat de coördinaten niet hardgecodeerd kunnen worden in een vaste waarde.

Correcte uitvoer moet aan twee voorwaarden voldoen:

  • Er is slechts één kandidaat in het zoekgebied en de kandidaat-rechthoek is volledig in het gebied opgenomen.
  • Nadat de reikwijdte van de zoekopdracht is uitgebreid naar de hele pagina, moeten er twee kandidaten worden verkregen, waarmee de ambiguïteittak wordt betreden.

Controleer ten slotte op nul treffers met een string die niet op de pagina staat. Dit komt dichter in de buurt van het contract dat vereist is voor een echte interface dan alleen het demonstreren van een succesvolle zoekopdracht.

Uitvoerbare code: geef het aantal kandidaten door aan de beller

De afhankelijkheid is pymupdf. Installeer en vergrendel de versie in de testomgeving. De volgende code heeft geen toegang tot het netwerk, schrijft geen bestanden en wijzigt het originele klantdocument niet. Er wordt alleen een demonstratie-PDF gemaakt.

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 vereist volledige integratie, in plaats van alleen maar de rand van de regio aan te raken. Als het zoekvak te krap is, kunnen de nevenbedragen in nul treffers terechtkomen, wat geen reden is waarom het automatisch zou moeten worden uitgebreid naar de volledige pagina. Controleer het coördinatensysteem dat wordt gebruikt bij het meten van het gebied voordat u beslist hoe u het bereik aanpast.

Als het bedrijf toestaat dat het middelpunt binnenvalt, moeten aanvullende regels worden geschreven en moeten aanvullende tests voor grensoverlap worden uitgevoerd. Verander niet in het geheim de betekenis van het oordeel in dezelfde functie.

Productielogica mag niet uitsluitend afhankelijk zijn van assert om uitzonderingen te onderscheppen, aangezien optimalisatiemodi beweringen kunnen verwijderen. De beweringen in het voorbeeld worden gebruikt voor regressiecontrole. Bij daadwerkelijke toegang tot de takenwachtrij moeten duidelijke voorwaardelijke vertakkingen en bedrijfsstatussen worden gebruikt.

Drie resultaten, drie verwerkingsmethoden

Queryresultaten worden gewoonlijk onderverdeeld in drie categorieën, die elk verschillende verwerkingsacties vereisen:

  • Slechts één treffer: er is slechts één volledig overeenkomend fragment in het gebied en het paginanummer, de originele tekst, de rechthoek en de regelversie worden opgeslagen.
  • Zero hit: het kan zijn dat het gebied verkeerd is, de hoeveelheid is gesplitst of de tekstlaag ontbreekt. Markeer de oorzaakkandidaat, controleer de originele pagina en voeg geen nullen toe.
  • Meerdere treffers: er zijn dubbele bedragen in hetzelfde gebied, of de sjabloon is gewijzigd, retourneer alle kandidaten, combineer labels of handmatige ondubbelzinnigheid.

De andere twee situaties moeten ook afzonderlijk worden behandeld:

  • Er is een kader maar de waarde is verkeerd: de tekstlaag zelf is mogelijk verkeerd, of het overeenkomende doel is verkeerd. U moet teruggaan naar de oorspronkelijke pagina om te controleren en te voorkomen dat de coördinaten de waarde onderschrijven.
  • Frame-achtige offset: weergavecoördinaten en extractiecoördinaten kunnen gemengd zijn, en de transformatieketen van rotatie, bijsnijden en weergaveschaling moet duidelijk zijn.

📊 Kernvergelijking

OnderzoeksmethodenBepalingscriteriaVoorzichtigheid is geboden
Volledige inclusie (gebruikt voorbeeld)De kandidaatrechthoek wordt volledig binnen het querygebied geplaatstAls het queryveld te krap is, kan het aantal op de rand nul worden bereikt
Middenpunt valt (regels moeten apart worden geschreven)De kandidaat-centra bevinden zich binnen de regioGrensoverlap vereist aparte aanvullende tests
Zoeken naar volledige pagina'sZoek alle kandidatenDe meeste resultaten zijn dubbelzinnig en vereisen labeling of handmatig nader oordeel

Dit is geen universele hoeveelheid extractor

De code ontleedt geen valuta, duizenden scheiders of decimale regels, noch erkent het semantiek zoals "huidige termijn te betalen" en "saldo van vorige periode." Alleen omdat er maar één kandidaat is, betekent dat niet dat het bedrijf de juiste betekenis heeft.

De gescande kopie moet ook eerst beschikbaar zijn, tekst en locatie. Pagina's met tekstlagen maar onjuiste inhoud mogen niet worden toegestaan alleen omdat ze gekopieerd kunnen worden.

Dit artikel gebruikt een niet-geroteerde compositiepagina. Wanneer de echte pagina roteert, geef dan eerst aan of het queryvakje van het beeldscherm komt of coördinaten extraheert, en converteer alleen indien nodig. Vermenigvuldig niet met een matrix, ongeacht de bron.

Bij het opslaan van bronpagina's moet je onderscheid maken tussen indexen van nul tot nul en paginanummers gericht op een persoon, om te voorkomen dat je ten onrechte denkt dat er geen bewijs bestaat bij het controleren van aangrenzende pagina's.

🎯 Welke methode past bij jou?

Als je data uit een vaste lay-out wilt halen

Beperk eerst het gebied waar het bedrijfsveld zich bevindt, zoek dan het bedrag op en sla het paginanummer, de rechthoek en de regelversie op.

Als je meerdere kandidaten tegenkomt

Kies niet direct de eerste optie; stuur alle kandidaten terug en bepaal de bedrijfsgebieden op basis van tags of handmatig oordeel.

Als je pagina vaak zero-hit gaat

Controleer eerst of de areacoördinaten, hoeveelheid en tekstlaag bestaan, en beslis vervolgens of je de scope aanpast of overstapt naar andere extractieroutes.

Als je documentvertaling wilt doen

Belangrijke details zoals hoeveelheid, datum en hoeveelheid worden opgenomen in de handmatige beoordeling, met een duidelijke taakverdeling tussen technische inspectie en handmatige controle.

Laat de sleutelcijfers achter voor vertaalbeoordeling

Documentvertaling moet niet alleen gebaseerd zijn op zinsvloeiendheid, maar ook op belangrijke punten zoals hoeveelheid, datum en hoeveelheid. OmniDoc (Productinvoer) biedt meerdere portalen voor documentvertaling, en de tweetalige vergelijking die op de officiële website wordt geïntroduceerd, kan dienen als toegangspunt voor recensies; Coördinatenpositioneringsscripts zijn geschikt om origineel bewijs te behouden en te helpen probleemgebieden te lokaliseren.

Het wordt aanbevolen om eerst te testen met een desensitisatiemonster dat je hebt toegestaan te uploaden. Naarmate de vertaling langer wordt, kan de positie van de inhoud redelijk veranderen, en "de nieuwe en oude coördinaten zijn exact hetzelfde" moet niet als een harde voorwaarde voor correcte vertaling worden gezien.

Waardevollere controles zijn: of het bedrag behouden blijft, of de munt duidelijk is gedefinieerd, en of het bijbehorende label nog steeds naar dezelfde zakelijke betekenis wijst.

❓ Veelgestelde Vragen (FAQ)

1. Waarom neem je niet gewoon de eerste klap?

Omdat volledige tekst zoeken alleen kan aangeven waar het bedrag voorkomt, en niet kan bepalen welk deel het bedrijfsveld is. Direct de eerste trek nemen kan er correct uitzien, maar de bron kan het al mis hebben.

2. Waarom moet het queryvak volledig worden opgenomen, in plaats van alleen de rand aan te raken?

Het voorbeeld gebruikt een volledig opgenomen bepalingsmethode om te voorkomen dat onvolledige segmenten als geldige treffers worden behandeld. Als het queryvak te krap is en nul treffers veroorzaakt, controleer dan eerst het coördinatensysteem en bereik, in plaats van automatisch de hele pagina te verbreden.

3. Wat moet je doen als het zoekresultaat nul is?

Markeer de kandidaatoorzaak en controleer de originele pagina; voeg geen nullen toe. Verkeerde regio's, gesplitste hoeveelheden of ontbrekende tekstlagen kunnen allemaal resulteren in nul treffers.

4. Kan deze code direct worden gebruikt op echte rekeningen?

Het kan niet direct worden gebruikt. Het voorbeeld behandelt geen valuta-, duizend-scheidings- of bedrijfssemantiek, en het synthesevoorbeeld in dit artikel is geen nauwkeurigheidstest voor echte biljetten.

📝 Samenvatting

Bij het bepalen van het aantal bepaal je eerst het gebied en geef je vervolgens het volledige aantal kandidaten aan de beller voor beoordeling. Zowel nul- als meervoudige treffers moeten duidelijke afhandelingsacties hebben. Gebruik eerst geanximiseerde voorbeelden om regels te valideren, en integreer daarna geleidelijk echte documenten.

Ervaar nu: upload je document om te beginnen met vertalen, waarbij je de originele opmaak behoudt

Bijgewerkt op 2026-11-14