pypdf nie może wyodrębnić tekstu ze zeskanowanego dokumentu. Nie da się tego rozwiązać zmieniając parametry.
Krótki lub pusty tekst jest jedynie sygnałem do dalszej kontroli i nie jest bezpośrednio równoznaczny ze skanem. Poniższa strona rejestruje, czy tekst jest wyodrębniany; puste strony, strony z obrazami i strony z nieprawidłowym kodowaniem wymagają różnych kolejnych ocen. Ekstrakcja tekstu pypdf nie jest OCR.
Kiedy pypdf nie może wyodrębnić tekstu, problem zwykle nie dotyczy parametrów. Czyta obiekty tekstowe w formacie PDF. Jeśli strona jest zasadniczo obrazem, dostosowanie parametrów nie umożliwi odczytania znaków, które nie istnieją. Ten artykuł jest przeznaczony dla programistów i osób zajmujących się dokumentacją, którzy muszą przetwarzać pliki PDF wsadowo i napotykają problem „są słowa, ale wyodrębnianie jest puste". Po przeczytaniu można za pomocą programu ustalić strona po stronie, czy warstwa tekstowa istnieje i czy jest ona prawidłowa, a także zdecydować, czy skorzystać z niej bezpośrednio, wprowadzić OCR, czy też przejść do ręcznego przeglądu.
Wszystkie poniższe przykłady zademonstrowano przy użyciu próbek syntetycznych. Kod został sprawdzony w izolowanym środowisku, ale nie gwarantuje to 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.
Nie można wyodrębnić tekstu z pliku pypdf? Wniosek w jednym zdaniu
Krótki lub pusty tekst jest jedynie sygnałem do dalszej kontroli i nie jest bezpośrednio równoznaczny ze skanem. Ekstrakcja tekstu z pypdf nie jest OCR. Przed podjęciem decyzji o dalszej metodzie przetwarzania należy określić rzeczywistą sytuację warstwy tekstowej strona po stronie.
| twoja sytuacja | Zalecane praktyki | powód |
|---|---|---|
| Wyodrębniony tekst jest krótszy | Zachowaj tekst na pierwszym miejscu i nie wymuszaj OCR, ponieważ jest on mniejszy niż próg. | Krótki tekst jest jedynie sygnałem do dalszej kontroli |
| Wynik ekstrakcji jest pusty | Sprawdź obraz strony i typ treści, nie oceniaj go bezpośrednio jako zeskanowanej kopii | Pusty tekst nie jest równoznaczny ze skanami |
| Strona wizualnie zawiera słowa, ale wynikiem wyodrębnienia są puste lub zniekształcone znaki. | Przejdź do procesu OCR | pypdf odczytuje obiekt tekstowy, brak czytelnego kodowania znaków na obrazie |
| Warstwa tekstowa dwuwarstwowego pliku PDF jest niekompletna lub źle wyrównana z obrazem | Włącz do kolejki ręcznego przeglądu lub wykonaj porównanie wizualne | Warstwa tekstowa może obejmować tylko część treści, a kod można zmienić, ale nie można zagwarantować poprawności semantyki. |
| Błąd podczas procesu analizowania | Nagraj nieprawidłowy etap | Nie należy udawać pustej strony |
Techniczne rozróżnienie między analizowaniem tekstu a rozpoznawaniem obrazu
Kiedy wiele osób napotyka błąd ekstrakcji, ich pierwszą reakcją jest sprawdzenie, czy brakujeextraction_mode="layout" lub czy należy określić kąt obrotu. Jednak w większości scenariuszy inżynierskich jest to raczej niedopasowanie w wyborze narzędzia niż problem z parametrami. pypdf to zasadniczo parser strumienia treści PDF, który odczytuje instrukcje obiektów tekstowych osadzone w pliku. Jeśli plik PDF jest w zasadzie obrazem (skanem), niezależnie od tego, jak ustawiony jest tryb wyodrębniania, znaków nie da się odczytać z powietrza.
Aby to zrozumieć, musimy najpierw rozpoznać pierwotną intencję projektową pliku PDF. PDF jest przeznaczony do precyzyjnego drukowania i prezentacji wizualnej, a nie do przechowywania danych strukturalnych. Cyfrowy natywny plik PDF zawiera zasoby czcionek, mapy kodowania i instrukcje rysowania tekstu z absolutnie pozycjonowanym tekstem. pypdf przywraca tekst, analizując te instrukcje. Zaletą tego mechanizmu jest determinizm: nie myli podobnych słów (takich jak 0 i O), może zachować specjalne symbole i ligatury oraz nie ma na niego wpływu szum obrazu.
Dlaczego nie mogę wyodrębnić zeskanowanego pliku PDF?
Zeskanowane pliki PDF to po prostu pojemniki na obrazy. Widoczny tekst to po prostu matryca pikseli w strukturze pliku i nie ma obiektu tekstowego, który mógłby zostać odczytany przez extract_text().
Dlaczego wynik dwuwarstwowego pliku PDF jest niestabilny?
Niektóre zeskanowane dokumenty są przetwarzane za pomocą oprogramowania OCR i mają osadzoną ukrytą warstwę tekstową, zwaną „dwuwarstwowym plikiem PDF". pypdf może wyodrębnić tylko ten poziom treści. Jeśli oryginalna jakość OCR jest niska, brakuje warstwy tekstowej, kodowanie jest uszkodzone lub znacznie niedopasowane do obrazu, wyniki ekstrakcji będą niekompletne lub nawet całkowicie puste. Kontynuowanie debugowania parametrów pypdf w tej chwili nie ma większego sensu i powinieneś przejść na proces optycznego rozpoznawania znaków (OCR).
Podstawą oceny nie powinna być obserwacja gołym okiem czy na stronie znajdują się słowa, lecz wykorzystanie programu umożliwiającego wykrycie faktycznego istnienia i ważności warstwy tekstowej.
📊 Porównanie rdzeni
| Typ pliku | Czy pypdf można wyodrębnić bezpośrednio? | Podstawa wyroku | Dalsze przetwarzanie |
|---|---|---|---|
| Cyfrowo natywny plik PDF | Móc | Analizuj czcionki, mapy kodowania i instrukcje rysowania tekstu | Skorzystaj bezpośrednio z wyników ekstrakcji |
| Czysto zeskanowany plik PDF | nie mogę | Tylko piksele, żadnych obiektów tekstowych | Wejdź do procesu OCR |
| Dwuwarstwowy plik PDF | Można wyodrębnić tylko ukryte warstwy tekstowe | Może brakować warstwy tekstowej, być uszkodzona lub źle wyrównana | Sprawdź kompletność, w razie potrzeby przejrzyj ręcznie lub porównaj wizualnie |
Przykład syntezy: użyj linii bazowej testu, aby zweryfikować logikę wykrywania
Aby zademonstrować, jak programowo rozróżnić powyższe sytuacje, musimy najpierw skonstruować zestaw standardowych syntetycznych danych wejściowych. Poniższy kod jest jedynie logiczną demonstracją i należy go uruchomić w środowisku, które blokuje własne zależności. Nie jest to faktyczny raport z testów konkretnych plików produkcyjnych. Proszę przygotować dane testowe w następujący sposób:
- Normalny cyfrowy plik PDF: Eksportuj dokument zawierający tekst „Faktura nr 2024-001"przy użyciu programu Word lub LaTeX.
- Pure Scan PDF: Zeskanuj dokument papierowy do formatu JPEG, a następnie zamknij go w jednostronicowy plik PDF, upewniając się, że nie zawiera on żadnej warstwy tekstowej.
- Przykład przypadku granicznego: Utwórz plik PDF „pseudo-OCR"z pustym ciągiem znaków lub wszystkimi białymi znakami w warstwie tekstowej, aby symulować dokument dwuwarstwowy, którego nie można rozpoznać.
Kod wykrywania dostępności warstwy tekstowej
Poniższy przykład języka Python pokazuje, jak zbudować logikę wykrywania w pamięci. Kod zależy odpypdf>=3.0.0, zainstaluj odpowiednią wersję w niezależnym środowisku wirtualnym. Skrypt nie zawiera prawdziwej ścieżki pliku. Przed uruchomieniem zastąp ścieżkę zastępczą powyższym syntetycznym plikiem testowym.
from io import BytesIO
import pymupdf
from pypdf import PdfReader
with pymupdf.open() as doc:
page = doc.new_page()
page.insert_text((50, 50), "Hi")
doc.new_page()
raw = doc.tobytes()
reader = PdfReader(BytesIO(raw))
records = []
for index, page in enumerate(reader.pages):
text = page.extract_text() or ""
records.append({"page": index + 1, "text": text,
"status": "text_present" if text.strip() else "review_empty_text"})
assert len(records) == 2
assert records[0]["status"] == "text_present"
assert records[0]["text"].strip() == "Hi"
assert records[1]["status"] == "review_empty_text"
Decyzja o akceptacji i granice ręcznego przeglądu
Demonstracja kodu rozwiązuje jedynie binarną ocenę „czy istnieje warstwa tekstowa", a aby uzyskać efekt kompleksowy, należy wziąć pod uwagę bardziej praktyczne czynniki. W poniższej tabeli wymieniono typowe zjawiska obserwacyjne i odpowiadające im decyzje dotyczące przetwarzania, wyjaśniając mający zastosowanie zakres zautomatyzowanego procesu i ręczne punkty interwencji:
| przestrzegać | co robić | nie należy wnioskować |
|---|---|---|
| krótki tekst | tekst pozostaje | Nie wymuszaj OCR ze względu na wartość mniejszą niż próg |
| pusty tekst | Sprawdź obrazy stron i typy treści | Nie jest bezpośrednio oceniany jako zeskanowana kopia |
| Analiza nie powiodła się | Nagraj nieprawidłowy etap | Nie udaję pustej strony |
Uwaga specjalna: jeśli dokument zawiera zarówno opcjonalne warstwy tekstowe, jak i graficzne, nie można po prostu ufać integralności warstwy tekstowej. Niektóre skanery generują dwuwarstwowe pliki PDF, w których warstwa tekstowa pokrywa tylko część treści lub współrzędne są poważnie przesunięte w stosunku do obrazu. Takie przypadki należy uwzględnić w kolejce ręcznego przeglądu lub wtórnej weryfikacji za pomocą algorytmu porównania wizualnego.
Referencje
- oficjalny dokument wyodrębniania tekstu w formacie pypdf: Extract Text from a PDF
- pypdf Wyjaśnienie różnicy pomiędzy OCR a ekstrakcją tekstu: To samo co w dokumencie rozdział „OCR a ekstrakcja tekstu"
Użyj list kontrolnych do tłumaczenia dokumentów
Dzielenie plików, szyfrowanie lub przetwarzanie załączników to przygotowania do dostarczenia, a tłumaczenie nie może zastąpić tej kontroli. Zaleca się najpierw zachować oryginalną kopię i listę przetwarzania, a następnie ocenić kolejność stron, linki i integralność treści tłumaczenia.
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. W tym artykule nie twierdzono, że OmniDoc korzysta z bibliotek open source lub wewnętrznych algorytmów opisanych w artykule, a przykłady nie zastępują testowania wydajności produktu.
🎯 Która metoda jest dla Ciebie odpowiednia?
jeśli…
- Uzyskany plik PDF może zaznaczyć tekst: W większości przypadków można go wyodrębnić bezpośrednio za pomocą pliku pypdf, a wynik tekstowy zostanie zachowany.
- Wynik wyodrębnienia jest krótki lub pusty: Najpierw sprawdź obraz strony i typ treści, a następnie ustal, czy potrzebny jest OCR. Nie należy wyciągać bezpośrednich wniosków.
- Słowa są widoczne na stronie, ale nie można ich wyodrębnić: Przejdź do procesu OCR bez wielokrotnego dostosowywania parametrów.
- Przetwarzanie dwuwarstwowego pliku PDF: Sprawdź, czy warstwa tekstowa jest kompletna i wyrównana z obrazem. W razie wątpliwości zapoznaj się z instrukcją obsługi.
❓ Często zadawane pytania (FAQ)
1. Jeśli nie można wyodrębnić tekstu, czy musi to być zeskanowana kopia?
niepewny. Krótki lub pusty tekst jest jedynie sygnałem do dalszej kontroli. Zanim podejmiesz decyzję, musisz sprawdzić obraz strony i typ treści.
2. Czy dostosowanie extraction_mode rozwiąże problem wyodrębniania zeskanowanych dokumentów?
nie mogę. To, co czyta pypdf, to obiekt tekstowy. Na zeskanowanym obrazie nie ma czytelnego kodowania znaków, a tekstu nie można uzyskać z powietrza, dostosowując parametry.
3. Czy pypdf może zastąpić OCR?
nie mogę. Ekstrakcja tekstu w pypdf nie jest OCR, może czytać tylko obiekty tekstowe, które już znajdują się w pliku.
4. Czy można bezpośrednio ufać warstwie tekstowej dwuwarstwowego pliku PDF?
Nie można ufać bezpośrednio. Warstwa tekstowa może zakrywać tylko część treści lub być źle dopasowana do współrzędnych obrazu. Należy to zweryfikować poprzez ręczny przegląd lub porównanie wizualne.
5. Wyodrębniono bardzo mało tekstu. Chcesz od razu zrobić OCR?
Z tego powodu nie ma potrzeby wymuszania OCR. W oryginalnym tekście sugerowano, że najpierw należy zachować krótki tekst, a następnie połączyć go z innymi elementami do sprawdzenia w celu oceny.
📝 Podsumowanie
pypdf nie może wyodrębnić tekstu, więc nie spiesz się jeszcze z dostosowaniem parametrów. Określ stan faktyczny warstwy tekstowej strona po stronie, a następnie zdecyduj, czy użyć jej bezpośrednio, wprowadzić OCR, czy też przejść do ręcznego przeglądu. Wynik będzie bardziej wiarygodny.
Wypróbuj teraz: prześlij dokument, aby rozpocząć tłumaczenie, zachowując oryginalny układ


