So rufen Sie einen Betrag in PDF und seine Position auf der Seite ab

In diesem Artikel wird die Verwendung von PyMuPDF zum Auffinden wiederholter Textmengen innerhalb eines bestimmten Rechtecks veranschaulicht. Durch das Parsen der ersten fünf Felder des Wortoktetts und die Überprüfung der Anzahl der Kandidaten können Fehleinschätzungen beim Fragment-Spleißen vermieden werden. Bietet Python-Beispiele auf Speicherebene, Grenzverarbeitungsstrategien und Akzeptanztabellen und gibt praktische Vorschläge für die Verbindung mit dem OmniDoc-Dokumentübersetzungsworkflow.

Wie finde ich doppelte Beträge? Fazit in einem Satz

Wenn das Layout festgelegt ist, begrenzen Sie zunächst den bekannten Bereich, überprüfen Sie dann den Text und überlassen Sie die Beurteilung der Anzahl der Kandidaten dem Anrufer. Es ist einfacher zu interpretieren, als weiterhin reguläre Ausdrücke anzuhäufen, und es ist weniger wahrscheinlich, dass stille Fehler gemacht werden.

Ihre SituationEmpfohlene PraktikenGrund
Derselbe Betrag erscheint an mehreren Stellen auf der SeiteBeschränken Sie die Suche auf den rechteckigen Bereich, in dem sich das Geschäftsfeld befindet, und suchen Sie dannDie Volltextsuche kann nicht ermitteln, welches Feld das Geschäftsfeld ist
Es gibt mehrere Kandidaten im AbfragebereichGeben Sie alle Kandidaten zurück, kombiniert mit Labels oder manueller BegriffsklärungProgramme sollten keine Entscheidungen für das Unternehmen treffen
Es liegen keine Treffer im Abfragebereich vorMarkieren Sie den Grund und prüfen Sie die Originalseite, keine NullabständeEine falsche Region, Aufteilungsbeträge oder fehlende Textebenen können dazu führen, dass keine Treffer erzielt werden
Die Position des Rahmens sieht versetzt ausExplizite Transformationsketten für Drehung, Zuschneiden und Rendering-SkalierungDas Mischen von Anzeigekoordinaten und extrahierten Koordinaten führt zu Abweichungen

Zwei identische Beträge in einer Abrechnung

1,200.00 erscheint zweimal in einer Abrechnung: einmal in der Spalte „fälliger Betrag"und einmal im Beschreibungstext. Die Volltextsuche kann sie zwar finden, aber nicht für Sie entscheiden, um welches Geschäftsfeld es sich handelt.

Wenn das Formularlayout fest ist, ist es in der Regel einfacher zu interpretieren, indem man zunächst einen bekannten Bereich einschränkt und dann den Text durchsucht, als den regulären Ausdruck weiter anzupassen. Der Schlüssel besteht nicht darin, „nur ein Kästchen zu finden", sondern sowohl Null- als auch Mehrfachtreffer als eindeutige Ergebnisse zu behandeln und das Programm keine unbefugten Entscheidungen treffen zu lassen.

Belassen Sie die Position des Wortes, nicht nur den Text

`page.get_text("words")` von PyMuPDF gibt einen Wortdatensatz mit Position zurück, das gemeinsame Feld ist (x0, y0, x1, y1, text, block_no, line_no, word_no). Im folgenden Beispiel werden nur die ersten fünf Felder verwendet und die letzten drei Zahlen werden vorerst nicht in die regionale Filterung einbezogen.

Das „Wort"ist hier das vom Extraktor bereitgestellte Fragment, das nicht unbedingt einem Wort im sprachlichen Sinne entspricht, und es kann auch nicht garantiert werden, dass eine Menge immer ein vollständiges Fragment ist.1,200.00 kann zerlegt sein oder angrenzende Etiketten haben. In diesem Artikel geht es nur um die exakte Zuordnung vollständiger Fragmente: Ich würde lieber Aufzeichnungen herausgeben, die die Bedingungen für eine Überprüfung nicht erfüllen, als sie stillschweigend zu einer scheinbar legalen Menge zusammenzufügen.

Überprüfen Sie mit zwei synthetischen Seiten der gleichen Menge

Wir erstellen eine neue PDF-Seite im Speicher und platzieren die gleiche Menge in der Nähe der vertikalen Koordinaten 120 bzw. 420. Der Abfragebereich deckt nur den oben genannten Betrag ab.

Der Texteinfügepunkt ist die Grundlinienposition, nicht die obere linke Ecke des Textfelds. Die Höhe und Breite des echten Felds wird durch die Schriftart und -größe beeinflusst, sodass die Koordinaten nicht fest in einen festen Wert codiert werden können.

Die korrekte Ausgabe sollte zwei Bedingungen erfüllen:

  • Es gibt nur einen Kandidaten im Abfragebereich und das Kandidatenrechteck ist vollständig im Bereich enthalten.
  • Nach der Erweiterung des Abfragebereichs auf die gesamte Seite sollten zwei Kandidaten erhalten werden, wodurch der Mehrdeutigkeitszweig betreten wird.

Überprüfen Sie abschließend, ob Nulltreffer mit einer Zeichenfolge vorliegen, die nicht auf der Seite vorhanden ist. Dies kommt dem für eine echte Schnittstelle erforderlichen Vertrag näher als nur dem Nachweis einer erfolgreichen Suche.

Ausführbarer Code: Übergeben Sie die Anzahl der Kandidaten an den Anrufer

Die Abhängigkeit lautet pymupdf. Bitte installieren und sperren Sie die Version in der Testumgebung. Der folgende Code greift nicht auf das Netzwerk zu, schreibt keine Dateien und ändert das ursprüngliche Kundendokument nicht. Es wird lediglich ein Demonstrations-PDF erstellt.

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 erfordert eine vollständige Einbeziehung, anstatt nur den Rand der Region zu berühren. Wenn das Abfragefeld zu eng ist, können die Seitenbeträge auf null Treffer fallen, was kein Grund dafür ist, dass es automatisch auf die ganze Seite erweitert werden sollte. Sie sollten das beim Messen der Fläche verwendete Koordinatensystem überprüfen, bevor Sie entscheiden, wie Sie den Bereich anpassen.

Wenn das Unternehmen zulässt, dass der Mittelpunkt hineinfällt, sollten zusätzliche Regeln geschrieben und zusätzliche Tests für Grenzüberlappungen durchgeführt werden. Ändern Sie nicht heimlich die Bedeutung des Urteils in derselben Funktion.

Die Produktionslogik sollte sich nicht ausschließlich auf assert verlassen, um Ausnahmen abzufangen, da Optimierungsmodi möglicherweise Behauptungen entfernen. Die Behauptungen im Beispiel werden zur Regressionsprüfung verwendet. Beim tatsächlichen Zugriff auf die Aufgabenwarteschlange sollten klare bedingte Verzweigungen und Geschäftszustände verwendet werden.

Drei Ergebnisse, drei Verarbeitungsmethoden

Abfrageergebnisse werden normalerweise in drei Kategorien unterteilt, die jeweils unterschiedliche Verarbeitungsaktionen erfordern:

  • Nur ein Treffer: Es gibt nur ein vollständig übereinstimmendes Fragment im Bereich und die Seitenzahl, der Originaltext, das Rechteck und die Regelversion werden gespeichert.
  • Nulltreffer: Es kann sein, dass der Bereich falsch ist, die Menge aufgeteilt ist oder die Textebene fehlt. Markieren Sie den Ursachenkandidaten, überprüfen Sie die Originalseite und fügen Sie keine Nullen hinzu.
  • Mehrere Treffer: Es gibt doppelte Beträge im selben Bereich oder die Vorlage hat sich geändert, alle Kandidaten werden zurückgegeben, Beschriftungen kombiniert oder manuelle Begriffsklärung durchgeführt.

Die beiden anderen Situationen müssen ebenfalls separat behandelt werden:

  • Es gibt einen Rahmen, aber der Wert ist falsch: Die Textebene selbst ist möglicherweise falsch oder das passende Ziel ist falsch. Sie sollten zur Originalseite zurückkehren, um zu überprüfen und zu verhindern, dass die Koordinaten den Wert bestätigen.
  • Frame-Looking-Offset: Anzeigekoordinaten und Extraktionskoordinaten können gemischt sein, und die Transformationskette aus Drehung, Zuschneiden und Rendering-Skalierung muss klar sein.

📊 Kernvergleich

AbfragemethodeBeurteilungskriterienVorsicht ist geboten
Vollständige Inklusion (verwendetes Beispiel)Das Kandidatenrechteck wird vollständig innerhalb des Abfragebereichs platziertWenn das Abfragefeld zu eng ist, kann die Menge am Rand null getroffen werden
Mittelpunkt fällt (Regeln müssen separat geschrieben werden)Die Kandidatenzentren befinden sich innerhalb der RegionGrenzüberlappung erfordert separate ergänzende Tests
Suche nach ganzen SeitenSuche alle KandidatenDie meisten Ergebnisse sind mehrdeutig und erfordern Beschriftung oder manuelle weitere Urteilsbeurteilung

Das ist kein universeller Mengenextraktor

Der Code analysiert keine Währung, keine Tausende-Trenner oder Dezimalregeln, noch erkennt er Semantik wie "laufende Laufzeit zahlbar" und "vorheriger Periodensaldo" an. Nur weil es nur einen Kandidaten gibt, heißt das nicht, dass das Geschäft die richtige Bedeutung hat.

Die gescannte Kopie muss außerdem zuerst verfügbar sein, Text und Standort. Seiten mit Textebenen, aber falschem Inhalt können nicht erlaubt werden, nur weil sie kopiert werden können.

Dieser Artikel verwendet eine ungedrehte Kompositionsseite. Wenn die reale Seite rotiert, geben Sie zunächst an, ob das Abfragefeld vom Bildschirm stammt oder Koordinaten extrahiert, und wandeln Sie nur bei Bedarf um. Multiplizieren Sie nicht mit einer Matrix, unabhängig von der Quelle.

Beim Speichern von Quellseiten sollte man zwischen Null- bis Null-Indizes und personenorientierten Seitenzahlen unterscheiden, um zu vermeiden, dass man fälschlicherweise denkt, dass keine Beweise vorhanden sind, wenn benachbarte Seiten überprüft werden.

🎯 Welche Methode passt zu dir?

Wenn Sie Daten aus einem festen Layoutformular extrahieren müssen

Zuerst beschränken Sie den Bereich, in dem sich das Geschäftsfeld befindet, suchen Sie dann den Betrag nach und speichern Sie die Seitenzahl, das Rechteck und die Regelversion.

Wenn du auf mehrere Kandidaten triffst

Nimm nicht direkt die erste Option; gib alle Kandidaten zurück und bestimme die Geschäftsfelder anhand von Tags oder manuellem Urteil.

Wenn deine Seite oft Null-Treffer verliert

Prüfen Sie zunächst, ob die Flächenkoordinaten, die Menge und die Textschicht vorhanden sind, und entscheiden Sie dann, ob Sie den Umfang anpassen oder auf andere Extraktionsrouten wechseln.

Wenn du Dokumentenübersetzung machen willst

Wichtige Details wie Menge, Datum und Menge sind in der manuellen Überprüfung enthalten, mit klarer Arbeitsaufteilung zwischen technischer und manueller Überprüfung.

Lassen Sie die wichtigsten Zahlen zur Übersetzungsprüfung

Die Dokumentenübersetzung sollte nicht nur auf der Satzkompetenz basieren, sondern auch auf wichtigen Punkten wie Menge, Datum und Menge. OmniDoc (Produkteinführung) bietet mehrere Übersetzungsportale für Dokumenten, und der auf der offizielle Website vorgestellte zweisprachige Vergleich kann als Einstiegspunkt für Bewertungen dienen; Koordinatenpositionierungsskripte eignen sich, um Originalbelege zu erhalten und bei der Lokalisierung von Problembereichen zu helfen.

Es wird empfohlen, zunächst mit einer Desensibilisierungsprobe zu vergleichen, die Sie zum Hochladen autorisiert haben. Wenn die Übersetzung länger wird, kann sich die Position des Inhalts angemessen ändern, und "die neue und alte Koordinate sind genau gleich" sollte nicht als Bedingung für eine korrekte Übersetzung angesehen werden.

Wertvollere Überprüfungen sind: ob der Betrag erhalten bleibt, ob die Währung klar definiert ist und ob das entsprechende Etikett weiterhin auf dieselbe geschäftliche Bedeutung hinweist.

❓ Häufig gestellte Fragen (FAQ)

1. Warum nicht einfach den ersten Zug nehmen?

Denn die Volltextsuche kann nur anzeigen, wo der Betrag angezeigt wird, und kann nicht bestimmen, welcher Teil das Geschäftsfeld ist. Den ersten Zug direkt zu nehmen, mag korrekt aussehen, aber die Quelle könnte sich schon irren.

2. Warum muss das Abfragefeld vollständig eingebunden werden, anstatt nur den Rand zu berühren?

Das Beispiel verwendet eine vollständig eingeschlossene Bestimmungsmethode, um unvollständige Segmente nicht als gültige Treffer zu behandeln. Wenn das Abfragefeld zu eng ist und null Treffer verursacht, überprüfe zuerst das Koordinatensystem und den Bereich, anstatt die gesamte Seite automatisch zu erweitern.

3. Was sollten Sie tun, wenn das Abfrageergebnis null ist?

Markiere die Ursache des Kandidaten und überprüfe die Originalseite; füge keine Nullen hinzu. Falsche Regionen, geteilte Mengen oder fehlende Textebenen können alle zu null Treffern führen.

4. Kann dieser Code direkt auf echte Rechnungen verwendet werden?

Es kann nicht direkt verwendet werden. Das Beispiel behandelt keine Währungs-, Tausende-Separator- oder Geschäftssemantik, und die Syntheseprobe in diesem Artikel stellt keinen Genauigkeitstest für echte Scheine dar.

📝 Zusammenfassung

Bei der Festlegung des Betrags definieren Sie zunächst den Bereich und geben dann dem Anrufer die volle Anzahl der Kandidaten zur Beurteilung. Sowohl null- als auch mehrfache Treffer sollten klare Handhabungsmaßnahmen haben. Zuerst verwenden Sie angsimisierte Beispiele, um Regeln zu validieren, und integrieren Sie dann nach und nach reale Dokumente.

Erleben Sie jetzt: Laden Sie Ihr Dokument hoch, um mit der Übersetzung zu beginnen, wobei Sie die ursprüngliche Formatierung bewahren

Aktualisiert am 2026-11-14