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 sytuacjaZalecane praktykipowód
Widzi tekst, kopiuje zniekształcone znaki lub spacjeSprawdź mapowanie ToUnicode i kodowanie czcionekEfekt 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ęciaSprawdź, czy obraz zawiera tekst, a następnie ustal, czy wymagany jest OCRCytaty obrazów nie są równoznaczne ze skanami całej strony ani nie dowodzą, że tekst jest czytelny
Ani tekst, ani obrazy nie są sprawdzaneWyświetl zawartość rysunku stronyNie 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 sprawdzeniawnioski, których nie należy wyciągać
Istnieje tekst do wydrukowaniaSprawdź semantykę, kolejność i źródłaJeśli da się to wydobyć, oznacza to, że jest prawidłowe.
Istnieją alternatywne postaciePrzejrzyj kodowanie i mapowanie czcionekWszystkie postacie zostaną utracone
Są zdjęcia, ale nie ma tekstuSprawdź, czy obraz zawiera tekstMusi to być skan całej strony
Nie wykryto tekstu ani obrazówWyświetl zawartość rysunku stronyMusi 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

Dalsza lektura

Zaktualizowano 2026-11-14