Jak odzyskać kwotę w formacie PDF, jej pozycję na stronie
W tym artykule pokazano użycie PyMuPDF do lokalizowania powtarzającego się tekstu w określonym prostokącie. Analizując pierwsze pięć pól słowa oktet i weryfikując liczbę kandydatów, można uniknąć błędnych ocen dotyczących łączenia fragmentów. Zawiera przykłady języka Python na poziomie pamięci, strategie przetwarzania granic i tabele akceptacji oraz praktyczne sugestie dotyczące łączenia się z przepływem pracy tłumaczenia dokumentów OmniDoc.
Jak znaleźć zduplikowane kwoty? Wniosek w jednym zdaniu
Po ustaleniu układu najpierw ogranicz znany obszar, a następnie sprawdź tekst, a liczbę kandydatów pozostaw osobie dzwoniącej do oceny. Łatwiej jest to zinterpretować niż ciągłe układanie wyrażeń regularnych i jest mniej prawdopodobne, że popełnisz ciche błędy.
| twoja sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Ta sama kwota pojawia się w wielu miejscach na stronie | Ogranicz wyszukiwanie do prostokątnego obszaru, w którym znajduje się pole biznesowe, a następnie wyszukaj | Wyszukiwanie pełnotekstowe nie pozwala określić, które pole jest polem biznesowym |
| W obszarze zapytań znajduje się wielu kandydatów | Zwróć wszystkich kandydatów w połączeniu z etykietami lub ręcznym ujednoznacznieniem | Programy nie powinny dokonywać wyborów za firmę |
| W obszarze zapytania nie ma żadnych trafień | Zaznacz przyczynę i sprawdź stronę oryginalną, bez dopełnienia zerowego | Zły region, podzielone kwoty lub brakujące warstwy tekstowe mogą skutkować zerową liczbą trafień |
| Położenie ramki wygląda na przesunięte | Jawne łańcuchy transformacji do obracania, kadrowania i skalowania renderowania | Mieszanie wyświetlanych współrzędnych i wyodrębnionych współrzędnych spowoduje odchylenia |
Dwie identyczne kwoty w jednym wyciągu
1,200.00 pojawia się w zestawieniu dwukrotnie: raz w kolumnie należnej kwoty i raz w tekście opisu. Wyszukiwanie pełnotekstowe może je znaleźć, ale nie może zdecydować, która z nich jest dziedziną działalności.
Jeśli układ formularza jest stały, zwykle łatwiej jest zinterpretować tekst, ograniczając najpierw znany obszar, a następnie przeszukując tekst, niż poprzez dalsze dostosowywanie wyrażenia regularnego. Kluczem nie jest „znalezienie tylko jednego pola", ale traktowanie zarówno trafień zerowych, jak i wielokrotnych trafień jako wyraźnych wyników i niedopuszczenie, aby program dokonywał nieautoryzowanych wyborów.
Pozostaw pozycję słowa, a nie tylko tekst
`page.get_text("words")` PyMuPDF zwraca rekord słowa z pozycją, wspólnym polem jest (x0, y0, x1, y1, text, block_no, line_no, word_no). Poniższy przykład uwzględnia tylko pierwsze pięć pól, a trzy ostatnie liczby nie są obecnie uwzględniane w filtrowaniu regionalnym.
„Słowo"to tutaj fragment podany przez ekstraktor, który niekoniecznie jest równy słowu w sensie językowym, ani też nie ma gwarancji, że dana ilość będzie zawsze pełnym fragmentem.1,200.00 może być zdemontowany lub może mieć sąsiadujące znaczniki. W tym artykule mowa jest jedynie o dokładnym dopasowaniu całych fragmentów: wolę oddać do recenzji nagrania, które nie spełniają warunków, niż po cichu złożyć je w pozornie legalną kwotę.
Sprawdź, używając dwóch stron syntetycznych o tej samej wartości
Tworzymy nową stronę PDF w pamięci i umieszczamy tę samą ilość w pobliżu współrzędnych pionowych odpowiednio 120 i 420. Obszar zapytania obejmuje tylko powyższą kwotę.
Punktem wstawiania tekstu jest pozycja linii bazowej, a nie lewy górny róg pola tekstowego. Na wysokość i szerokość prawdziwego pudełka będzie miała wpływ czcionka i jej rozmiar, zatem współrzędnych nie można zakodować na stałe w postaci stałej wartości.
Prawidłowe wyjście powinno spełniać dwa warunki:
- W obszarze zapytania znajduje się tylko jeden kandydat, a prostokąt kandydata jest w całości uwzględniony w obszarze.
- Po rozszerzeniu zakresu zapytania na całą stronę należy uzyskać dwóch kandydatów, wchodząc tym samym do gałęzi niejednoznaczności.
Na koniec sprawdź, czy nie ma trafień w przypadku ciągu, którego nie ma na stronie. Jest to bliższe kontraktowi wymaganemu przez prawdziwy interfejs niż po prostu zademonstrowanie udanego wyszukiwania.
Kod wykonywalny: przekaż liczbę kandydatów dzwoniącemu
Zależność to pymupdf, proszę zainstalować i zablokować wersję w środowisku testowym. Poniższy kod nie uzyskuje dostępu do sieci, nie zapisuje plików i nie modyfikuje oryginalnego dokumentu klienta. Tworzy jedynie demonstracyjny plik 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 wymaga całkowitego włączenia, a nie tylko dotykania krawędzi regionu. Jeśli pole zapytania jest zbyt wąskie, wartości poboczne mogą spaść do zera, co nie jest powodem, dla którego powinno ono automatycznie rozszerzać się na całą stronę. Przed podjęciem decyzji o dostosowaniu zakresu należy sprawdzić układ współrzędnych używany do pomiaru obszaru.
Jeśli firma pozwala na opadanie punktu środkowego, należy napisać dodatkowe zasady i przeprowadzić dodatkowe testy pod kątem nakładania się granic. Nie zmieniaj potajemnie znaczenia wyroku w tej samej funkcji.
Logika produkcji nie powinna opierać się wyłącznie na assert w celu przechwytywania wyjątków, ponieważ tryby optymalizacji mogą usuwać asercje. Twierdzenia w przykładzie służą do sprawdzania regresji. Podczas uzyskiwania dostępu do kolejki zadań należy używać wyraźnych gałęzi warunkowych i stanów biznesowych.
Trzy wyniki, trzy metody przetwarzania
Wyniki zapytań są zwykle podzielone na trzy kategorie, z których każda wymaga innych działań przetwarzania:
- Tylko jedno trafienie: W obszarze znajduje się tylko jeden kompletny pasujący fragment, a numer strony, oryginalny tekst, prostokąt i wersja reguły są zapisywane.
- Zerowe trafienie: Być może obszar jest nieprawidłowy, kwota jest podzielona lub brakuje warstwy tekstowej. Zaznacz kandydata na przyczynę, sprawdź stronę oryginalną i nie dodawaj zer.
- Wiele trafień: W tym samym obszarze znajdują się zduplikowane kwoty lub szablon został zmieniony. Zwróć wszystkich kandydatów, połącz etykiety lub ręczne ujednoznacznienie.
Pozostałe dwie sytuacje również należy rozpatrywać oddzielnie:
- Istnieje ramka, ale wartość jest nieprawidłowa: Sama warstwa tekstowa może być nieprawidłowa lub pasujący cel jest nieprawidłowy. Powinieneś wrócić do oryginalnej strony, aby sprawdzić i zapobiec potwierdzaniu wartości przez współrzędne.
- Przesunięcie wyglądu ramki: Współrzędne wyświetlania i współrzędne ekstrakcji mogą być mieszane, a łańcuch transformacji obejmujący obrót, kadrowanie i skalowanie renderowania musi być jasne.
📊 Porównanie rdzeni
| Metoda zapytania | Kryteria oceny | potrzebuję uwagi |
|---|---|---|
| Całkowite włączenie (przykład przyjęty) | Prostokąt kandydujący całkowicie mieści się w obszarze zapytania | Gdy pole zapytania jest zbyt ciasne, kwota z boku może mieć zero trafień. |
| Punkt środkowy spada (trzeba napisać kolejną regułę) | Kandydat na punkt środkowy mieści się w regionie | Nakładanie się granic wymaga osobnego testowania |
| Zapytanie na całą stronę | Przeszukaj wszystkich kandydatów | Wyniki są w większości niejednoznaczne i wymagają oznakowania lub ręcznej dalszej oceny. |
To nie jest uniwersalny ekstraktor ilości
Kod nie analizuje waluty, separatorów tysięcy ani reguł dziesiętnych, ani nie rozpoznaje semantyki, takiej jak „płatność w tym okresie"czy „saldo w poprzednim okresie". To, że jest tylko jeden kandydat, nie oznacza, że sens biznesowy jest prawidłowy.
Skan musi także najpierw zawierać dostępny tekst i lokalizację. Strony z warstwą tekstową, ale nieprawidłową treścią, nie mogą zostać udostępnione tylko dlatego, że można je skopiować.
W tym artykule wykorzystano nieobrócone strony syntetyczne. Gdy obracana jest strona rzeczywista, należy najpierw wskazać, czy pole zapytania pochodzi z ekranu wyświetlacza, czy z wyodrębnionych współrzędnych, a następnie w razie potrzeby je przekonwertować. Nie mnożymy przez macierz niezależnie od źródła.
Podczas zapisywania stron źródłowych należy także rozróżnić indeksy liczone od zera od numerów stron zorientowanych na człowieka, aby po otwarciu sąsiednich stron recenzenci nie pomyśleli, że dowody nie istnieją.
🎯 Która metoda jest dla Ciebie odpowiednia?
Jeśli chcesz uzyskać liczby z formularza o stałym układzie
Najpierw ogranicz obszar, na którym znajduje się pole biznesowe, następnie wyszukaj kwotę i zapisz numer strony, prostokąt i wersję reguły.
Jeśli spotkasz wielu kandydatów
Nie bierz bezpośrednio tego pierwszego, zwróć wszystkich kandydatów i określ pola biznesowe na podstawie etykiet lub ręcznej oceny.
Jeśli Twoja strona często nie ma żadnych trafień
Zanim podejmiesz decyzję o dostosowaniu zasięgu lub skorzystaniu z innej drogi ekstrakcji, sprawdź współrzędne obszaru, czy kwota jest podzielona i czy istnieje warstwa tekstowa.
Jeśli chcesz wykonać tłumaczenie dokumentu
Uwzględnij kluczowe treści, takie jak kwota, data, ilość itp., w przeglądzie ręcznym i zapewnij jasny podział pracy pomiędzy przeglądem technicznym a przeglądem ręcznym.
Kluczowe dane zostaw do sprawdzenia po tłumaczeniu
Tłumaczenie dokumentu zależy nie tylko od tego, czy zdania są płynne, ale także od tego, czy kluczowe treści, takie jak kwota, data i ilość, muszą zostać potwierdzone jedna po drugiej. OmniDoc (portal produktowy) udostępnia portale tłumaczeniowe dla różnych dokumentów. Dwujęzyczne porównanie wprowadzone na oficjalnej stronie internetowej może służyć jako portal recenzyjny; skrypt pozycjonowania współrzędnych nadaje się do zachowania oryginalnych dowodów tekstowych i pomaga zlokalizować obszary problematyczne.
Zaleca się, aby najpierw użyć odczulonych próbek, które można przesłać do oceny. Gdy tłumaczenie stanie się dłuższe, pozycja treści może ulec rozsądnej zmianie. „Stare i nowe współrzędne są dokładnie takie same"nie może być traktowane jako trudny warunek poprawnego tłumaczenia.
Bardziej wartościowe kontrole to: czy kwota została zatrzymana, czy waluta jest czysta i czy odpowiednia etykieta nadal wskazuje na to samo znaczenie biznesowe.
❓ Często zadawane pytania (FAQ)
1. Dlaczego po prostu nie przyjąć pierwszego trafienia?
Ponieważ wyszukiwanie pełnotekstowe może jedynie wskazać, gdzie pojawia się kwota, nie jest w stanie określić, które miejsce jest obszarem działalności. Wystarczy przyjąć pierwsze trafienie, a wynik może wyglądać poprawnie, ale źródło może być błędne.
2. Dlaczego pole zapytania musi być całkowicie uwzględnione, a nie tylko dotykać krawędzi?
W przykładzie zastosowano metodę określania pełnego włączenia, aby uniknąć traktowania niekompletnych fragmentów jako prawidłowych trafień. Jeśli pole zapytania jest zbyt wąskie i skutkuje zerową liczbą trafień, należy najpierw sprawdzić układ współrzędnych i zakres, zamiast automatycznie rozszerzać je na całą stronę.
3. Co zrobić, gdy wynik zapytania wynosi zero?
Zaznacz kandydatów na przyczynę i sprawdź oryginalną stronę bez zerowego dopełnienia. Niewłaściwe obszary, podzielone kwoty lub brakujące warstwy tekstowe mogą skutkować zerowymi trafieniami.
4. Czy ten kod można wykorzystać bezpośrednio na realne rachunki?
Nie można go używać bezpośrednio. Przykłady nie dotyczą waluty, separatorów tysięcy i semantyki biznesowej, a syntetyczne przykłady w tym artykule nie reprezentują testu dokładności prawdziwych rachunków.
📝 Podsumowanie
Ustalając kwotę, najpierw ogranicz obszar, a następnie przekaż całą liczbę kandydatów dzwoniącemu w celu oceny. Powinny istnieć jasne działania związane z przetwarzaniem w przypadku trafień zerowych i trafień wielokrotnych. Najpierw użyj odczulonych próbek, aby zweryfikować zasady, a następnie stopniowo uzyskaj dostęp do prawdziwych dokumentów.
Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ


