Plik PDF można przeglądać, ale nie można go kopiować. Może to nie być skan: najpierw sprawdź warstwę tekstową i odwzorowanie znaków
Jeśli nie ma tekstu, nie można go bezpośrednio ocenić jako „warstwa tekstowa jest normalna” ani nie można go bezpośrednio ocenić jako zeskanowaną kopię. Poniżej zapisano odpowiednio tekst, znaki alternatywne i odniesienia do obrazów stron, a na wyjściu wyświetlany jest status do sprawdzenia; odniesienia do obrazów nie dowodzą, że obraz zajmuje całą stronę lub że można zidentyfikować tekst.
— Diagnoza przedstawiona w tym artykule opiera się wyłącznie na cechach statystycznych, a w przypadku napotkania zaszyfrowanych czcionek lub specjalnego kodowania nadal wymagana jest ręczna analiza.
- Przed tłumaczeniem sprawdź kolejność stron i integralność tekstu, a po tłumaczeniu sprawdź, czy tytuł, tekst i legendy odpowiadają sobie.
Jeśli widzisz tekst w pliku PDF, ale nie możesz go skopiować, być może nie jest to zeskanowana kopia lub może występować problem z mapowaniem znaków. Ten artykuł jest przeznaczony dla programistów i osób przetwarzających dokumenty, które muszą wyodrębnić, przetłumaczyć lub uporządkować zawartość pliku PDF. Po przeczytaniu będziesz wiedział, jak najpierw rozróżnić problemy na poziomie tekstu od treści obrazu i wykorzystać ujednolicone sygnały, aby określić, co dalej robić.
W kodzie i przykładach wykorzystano próbki syntetyczne, które przeszły weryfikację w odizolowanym środowisku i nie stanowią gwarancji działania wszystkich rzeczywistych plików ani produktu. Przed przystąpieniem do przetwarzania ważnych dokumentów prosimy o zachowanie oryginałów i zapoznanie się z nimi zgodnie z granicami i pozycjami akceptacji w tekście.
Plik PDF można przeglądać, ale nie można go kopiować. Czy to zeskanowana kopia? Wniosek w jednym zdaniu
Nie mogę oceniać bezpośrednio. Najpierw sprawdź warstwę tekstową i mapowanie znaków, następnie spójrz na obraz strony i na koniec ustal, czy jest to błąd skanowania, czy mapowania.
| twoja sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Widzi tekst, kopiuje zniekształcone znaki lub spacje | Sprawdź mapowanie ToUnicode i kodowanie czcionek | Efekt wizualny jest normalny, ale warstwa tekstowa jest uszkodzona, głównie z powodu braku lub nieprawidłowego mapowania. |
| Skopiowane znaki wyglądają rozsądnie, ale mają niepoprawną semantykę | Sprawdź wyniki ekstrakcji z treścią wizualną | Mapowanie heurystyczne może generować nieprawidłowe znaki i przejść kontrolę inną niż null |
| Nie ma tekstu, ale na stronie są zdjęcia | Sprawdź, czy obraz zawiera tekst, a następnie ustal, czy wymagany jest OCR | Cytaty obrazów nie są równoznaczne ze skanami całej strony ani nie dowodzą, że tekst jest czytelny |
| Ani tekst, ani obrazy nie są sprawdzane | Wyświetl zawartość rysunku strony | Nie można stwierdzić, że strona jest pusta |
Dlaczego skopiowany kod jest zniekształcony?
Użytkownicy mogą normalnie widzieć tekst w przeglądarce lub czytniku, ale skopiowany tekst jest zniekształcony, pusty lub zawiera nieistotne symbole. Zwykle nie jest to uszkodzony plik ani niekoniecznie zeskanowana kopia. Główną przyczyną jest brak glifu (Glyph) na tabelę mapowania Unicode (ToUnicode CMap) w pliku PDF lub jest on nieprawidłowy.
Silniki renderujące wykorzystują indeksy glifów do rysowania treści wizualnych, podczas gdy narzędzia do schowka i wyodrębniania tekstu opierają się na tabelach mapowania w celu przywracania znaków semantycznych. Kiedy te dwa elementy zostaną zerwane, pojawia się „wizualnie normalna, nieczytelna dla komputera"warstwa złego tekstu.
Przed wykonaniem tłumaczenia dokumentu lub wyodrębnienia strukturalnego musisz najpierw sprawdzić, czy problem leży w mapowaniu, czy też sama strona jest obrazem. W przeciwnym razie późniejsze procesy OCR lub NLP będą opierać się na błędnych założeniach.
Mechanizm łamania pomiędzy indeksem glifów a mapowaniem Unicode
Specyfikacja PDF umożliwia osadzanie w czcionkach jedynie informacji o zarysie i szerokości glifów, ale nie pozwala na mapowanie kodowania znaków. Następujące warunki mogą spowodować uszkodzenie:
- Oprogramowanie generujące plik PDF nie zapisuje poprawnie tabeli ToUnicode
- Stosowane jest niestandardowe kodowanie, ale nie są dostępne żadne zasady dekodowania
W tym momencie ekstraktor może uzyskać jedynie oryginalny identyfikator glifu (CID). Te identyfikatory mają znaczenie dla modułu renderującego, ale nie mają wartości dla przetwarzania tekstu.
Niektóre narzędzia używają heurystyki do odgadnięcia mapowania, w wyniku czego mogą pojawić się znaki, które wydają się rozsądne, ale w rzeczywistości są błędne, na przykład konwertowanie chińskich znaków interpunkcyjnych na litery łacińskie lub zastępowanie liczb znakami sterującymi. Ten rodzaj „fikcyjnego tekstu"jest bardziej subtelny niż czyste białe znaki, ponieważ może przejść kontrolę inną niż null, ale spowoduje ciche zanieczyszczenie danych w łączach końcowych.
Kluczem do oceny takich problemów nie jest sprawdzenie, czy tekst da się wybrać, ale sprawdzenie, czy wyodrębniony ciąg znaków jest semantycznie spójny z treścią wizualną.
Użyj PyMuPDF do diagnostyki syntezy pamięci
Poniższy kod konstruuje dane wejściowe w pamięci i weryfikuje logikę diagnostyczną:
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
W powyższym kodzie funkcja diagnose_text_layer uzyskuje oryginalny tekst poprzez get_text("text"), używa unicodedata.category do filtrowania znaków sterujących i białych znaków oraz oblicza proporcję efektywnej treści. Jednocześnie wykrywa obecność bloków obrazu za pomocą get_text("blocks").
Te dwa twierdzenia weryfikują dwa przypadki: normalny dokument ze współczynnikiem drukowalności większym niż 0,9 i zeskanowany dokument z zerową liczbą znaków. Obejmuje to podstawową logikę rozgałęziania.
Należy zauważyć, że diagnoza ta opiera się wyłącznie na charakterystyce statystycznej. W przypadku zaszyfrowanych czcionek lub specjalnego kodowania nadal wymagane jest ręczne sprawdzenie.
📊 Porównanie rdzeni
Poniższa tabela przedstawia kierunki kontroli odpowiadające różnym sygnałom oraz wnioski, których nie należy wyciągać:
| Sygnał | Następny krok do sprawdzenia | wnioski, których nie należy wyciągać |
|---|---|---|
| Istnieje tekst do wydrukowania | Sprawdź semantykę, kolejność i źródła | Jeśli da się to wydobyć, oznacza to, że jest prawidłowe. |
| Istnieją alternatywne postacie | Przejrzyj kodowanie i mapowanie czcionek | Wszystkie postacie zostaną utracone |
| Są zdjęcia, ale nie ma tekstu | Sprawdź, czy obraz zawiera tekst | Musi to być skan całej strony |
| Nie wykryto tekstu ani obrazów | Wyświetl zawartość rysunku strony | Musi to być pusta strona |
🎯 Która metoda jest dla Ciebie odpowiednia?
Jeśli widzisz tekst, ale nie możesz go skopiować
Nadaj priorytet sprawdzeniu mapowania ToUnicode i kodowania czcionek, co zwykle jest spowodowane uszkodzonym mapowaniem.
Jeśli skopiowany tekst wygląda normalnie, ale jego treść jest nieprawidłowa
Użyj treści wizualnych, aby porównać wyniki ekstrakcji segment po segmencie, a nie tylko patrz, czy nie jest pusty.
Jeśli strona zawiera tylko obrazy i nie zawiera tekstu
Sprawdź, czy obraz zawiera tekst i zdecyduj, czy wymagany jest OCR. Nie zakładaj, że cała strona to skan.
Jeśli zamierzasz tłumaczyć dokumenty
Przed przekazaniem odczulonych próbek do procesu tłumaczenia przeprowadzana jest kontrola integralności tekstu.
Użyj tej listy kontrolnej do tłumaczenia dokumentów
Najpierw sprawdź kolejność stron, lokalizację źródła i integralność tekstu, a następnie prześlij tę samą pozbawioną czułości próbkę do procesu tłumaczenia. Po tłumaczeniu nadal musisz sprawdzić, czy tytuł, tekst i ilustracje poprawnie odpowiadają sobie. Nie można po prostu sprawdzić, czy tekst jest gładki.
OmniDoc (portal produktowy) udostępnia wieloformatowy portal do tłumaczenia dokumentów, a oficjalna strona internetowa zawiera funkcje OCR, glosariusza i porównywania dokumentów dwujęzycznych. Jeśli chcesz rozpocząć przetwarzanie bezpośrednio z pliku, możesz ocenić tę ścieżkę na prawdziwej próbce.
Użyj plików pozbawionych zabezpieczeń, do przesłania których masz pozwolenie, i skorzystaj z elementów zaznaczonych w tym artykule, aby sprawdzić wyniki. Nie ma twierdzenia, że OmniDoc korzysta z bibliotek open source lub wewnętrznych algorytmów wspomnianych w tym artykule, ani też przykład nie zastępuje testowania wydajności produktu.
❓ Często zadawane pytania (FAQ)
1. Jeśli tekst można wyodrębnić, czy oznacza to, że warstwa tekstowa jest poprawna?
nie mogę. Wyodrębnioną treść należy również sprawdzić pod kątem semantyki, porządku i pochodzenia. W przypadku wystąpienia błędów mapowania mogą zostać wyświetlone pozornie rozsądne znaki.
2. Na stronie znajdują się zdjęcia. Czy to znaczy, że jest to zeskanowana kopia?
niepewny. Cytowanie obrazu nie stanowi dowodu, że obraz zajmuje całą stronę ani że tekst można rozpoznać. Musisz sprawdzić, czy obraz zawiera tekst.
3. Nie można wykryć tekstu ani obrazów. Czy to oznacza, że strona jest pusta?
Nie można z tego wyciągnąć żadnych wniosków. Zanim podejmiesz decyzję, powinieneś sprawdzić zawartość rysunku na stronie.
4. Czy ten skrypt diagnostyczny będzie działał ze wszystkimi plikami PDF?
nie mogę. Opiera się wyłącznie na cechach statystycznych, a w przypadku zaszyfrowanych czcionek lub specjalnego kodowania nadal wymagane jest ręczne sprawdzenie.
📝 Podsumowanie
Niezależnie od tego, czy plik PDF można przeglądać lub kopiować, najpierw sprawdź warstwę tekstową i odwzorowanie znaków, następnie przyjrzyj się zawartości obrazu i na koniec ustal, czy jest to zeskanowany dokument. Zachowaj oryginały przed przetwarzaniem i przeglądaj je pojedynczo wraz z elementami kontroli.
Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ


