Zaznacz wyszukiwane słowa w pliku PDF. Dlaczego prostokąt nieprawidłowo obramowuje tekst kursywą?

Kursywa niekoniecznie powoduje, że obszar szukanego Quada jest mniejszy niż otaczający go prostokąt. Jeśli chcesz zachować informacje o kierunku czterech narożników, użyj bezpośrednio wyniku quads=True, aby dodać podświetlenie; nie używaj żadnego progu różnicy obszarów w celu ustalenia, czy podświetlenie jest prawidłowe.

Kiedy pole wyróżnienia wyszukiwania tekstu pisanego kursywą jest przekrzywione, często dzieje się tak nie dlatego, że występuje problem z samą czcionką, ale dlatego, że obiekt geometryczny używany do podświetlania jest błędnie wybrany. Ten artykuł jest przeznaczony dla programistów korzystających z PyMuPDF do przetwarzania pozycjonowania tekstu PDF. Wyjaśnia, dlaczego prostokąt otaczający (Rect) nie może zostać użyty do określenia, czy podświetlanie tekstu pochylonego lub obróconego jest prawidłowe, i jak sobie z tym poradzić w różnych sytuacjach.

Po przeczytaniu tego artykułu możesz zdecydować, czy w wynikach wyszukiwania używać Quad czy Rect, wiedzieć, jak radzić sobie z brakiem trafień, krzyżowaniem wierszy, wieloma trafieniami i przycinaniem CropBox podczas wyszukiwania, a także zrozumieć, które problemy wykraczają poza zakres pozycjonowania geometrycznego.

Pełny tekst jest pokazany na syntetycznych próbkach, a kod przeszedł pomyślnie testy w odizolowanym środowisku, ale nie gwarantuje to wszystkich rzeczywistych plików lub efektów produktu. Przed przetwarzaniem ważnych dokumentów prosimy o zachowanie oryginałów, a następnie zapoznanie się z nimi zgodnie z poniższymi granicami i punktami akceptacji.

Aby wyróżnić tekst kursywą, wybierz opcję Quad lub Rect? Wniosek w jednym zdaniu

Kursywa niekoniecznie powoduje, że obszar Quad uzyskany w wyniku wyszukiwania jest mniejszy niż otaczający go prostokąt. Jeśli konieczne jest zachowanie informacji o kierunku czterech narożników, bezpośrednio użyj wyników quads=True, aby dodać światła. Nie używaj żadnego progu różnicy obszarów w celu ustalenia, czy podświetlenie jest prawidłowe.

twoja sytuacjaZalecane praktykipowód
Tekst kursywą lub obrócony; należy zachować orientację czterech narożnikówBezpośrednio użyj wyników quads=True, aby dodać najważniejsze momentyQuad zachowuje informacje o orientacji w czterech narożnikach
Chcę użyć progu różnicy obszarów, aby określić, czy podświetlanie jest prawidłowe.nie rób tegoKursywa niekoniecznie zmniejsza obszar Quad, a ocena progu jest zawodna.
Wyszukiwane hasła rozciągają się w różnych wierszach i silnik nie rozpoznaje ich jako tej samej jednostki słownictwa.Zachowaj wszystkie zwrócone fragmenty Quada i rysuj podświetlenia indywidualnieWymuszone połączenie z Rect spowoduje utratę semantyki białej przestrzeni pośrodku.
Strona posiada przycięcie CropBoxPo przywróceniu pola CropBox sprawdź, czy zawartość nadal znajduje się w widocznym obszarzeWspółrzędne zwrócone przez search_for opierają się na nieobróconym obszarze strony oryginalnej i nie można zakładać, że get_text domyślnie ignoruje przycięty obszar
Wiele trafieńZapisuj numery stron element po elemencie i przetwarzaj je jeden po drugimDopiero przetworzenie pierwszego spowoduje pominięcie pozostałych pozycji

Dlaczego tekst kursywy jest wyświetlany nieprawidłowo?

Wiele osób domyślnie zakłada, że prostokąt otaczający znaki kursywy jest znacznie większy niż Quad, więc użycie Rect do podświetlenia spowoduje „odchylenie ramki". Tak naprawdę czcionka kursywa niekoniecznie powoduje, że obszar przeszukiwanego kwadratu jest mniejszy niż otaczający go prostokąt, dlatego nie można polegać na różnicy obszaru w celu oceny, czy podświetlenie jest prawidłowe.

Naprawdę potrzebne jest zachowanie informacji o orientacji czterech rogów. Tak się składa, że Quad rejestruje te informacje i użycie ich do bezpośredniego dodania podświetleń jest bardziej niezawodne niż użycie otaczającego prostokąta do odgadnięcia kształtu.

Przykład samodzielnej kompozycji

Zobacz listę importów, na przykład zależności. Kod konstruuje dane wejściowe w pamięci i nie wymaga do działania plików zewnętrznych. Zapisy operacyjne są dostarczane oddzielnie i nie stanowią gwarancji, że wszystkie dokumenty są autentyczne.

import pymupdf
with pymupdf.open() as source:
    page = source.new_page(width=300, height=300)
    page.insert_text((100, 250), "Searchable", fontsize=14, rotate=90)
    hits = page.search_for("Searchable", quads=True)
    assert len(hits) == 1
    assert isinstance(hits[0], pymupdf.Quad)
    page.add_highlight_annot(hits)
    assert page.search_for("Missing", quads=True) == []
    raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
    page = doc[0]  # Keep the owning page alive while using annotations.
    annotations = list(page.annots())
    assert len(annotations) == 1
    assert len(annotations[0].vertices) == 4

Poprawne przetwarzanie danych wyjściowych i wejściowych

Powyższy syntetyczny przykład generuje plik PDF w pamięci, który służy do weryfikacji zachowania Quada. Poniżej znajduje się kilka typowych danych wejściowych granic.

1. Wyszukiwane słowa obejmują różne linie

Jeśli wyszukiwane hasło obejmuje znaki nowej linii i silnik nie rozpoznaje go jako tej samej jednostki słownikowej, funkcja search_for może zwrócić pustą listę lub dopasować tylko częściowe fragmenty.

  • Nie łącz na siłę wielu niesąsiadujących ze sobą kwadratów w jeden prostokąt, w przeciwnym razie semantyka białej przestrzeni pośrodku zostanie utracona.
  • Zachowaj wszystkie zwrócone fragmenty Quada i narysuj najważniejsze fragmenty osobno.

2. Wyszukiwane hasło zawiera zwykłe znaki specjalne

Jeśli wyszukiwane hasło zawiera zwykłe znaki specjalne bez zmiany znaczenia, wyniki mogą nie być zgodne z oczekiwaniami. Ciąg wejściowy powinien zostać bezpiecznie przetworzony przed wywołaniem.

3. Przycinanie CropBoxa

Jeśli strona ma przycięcie CropBox, współrzędne zwrócone przez search_for nadal są oparte na nieobróconym oryginalnym obszarze strony. Po przywróceniu CropBox musisz sprawdzić, czy zawartość nadal znajduje się w widocznym obszarze. Nie można założyć, że get_text domyślnie ignoruje obszar przycięcia.

Kryteria akceptacji i granice ręcznego przeglądu

To rozwiązanie rozwiązuje jedynie problem pozycjonowania geometrycznego. Następujące sytuacje nie podlegają wyborowi pomiędzy Quad i Rect:

  • Warstwa tekstowa samego pliku PDF jest uszkodzona;
  • Nieprawidłowe osadzanie czcionek;
  • Istnieją ukryte warstwy.

W takich przypadkach wyniki search_for mogą w ogóle nie być wiarygodne i należy je poddać ręcznemu przeglądowi lub ponownemu OCR. Przykładowy kod weryfikuje jedynie właściwości geometryczne, a całościowy efekt nadal wymaga oceny w oparciu o określone typy dokumentów.

Konkretne decyzje dotyczące obsługi wyjątków

przestrzegaćco robićnie należy wnioskować
Poszukiwania nie przyniosły rezultatówSprawdź warstwę tekstową i słowa kluczoweNie tworzą się pustych podświetleń
Obróć tekstZachowaj cztery rogi QuadZgadywanie dokładności poprzez nieużywanie różnic powierzchni
i trafił w sedno w wielu miejscachKażdy element powinien być zachowany pod numerem stronNie zajmuj się tylko pierwszym

📊 Porównanie rdzenia

CelInformacje, które można zachowaćDostępne scenariuszePrzypisy
QuadCztery rogiKursywa i obracanie tekstu wymagają precyzyjnego podświetlaniaBezpośrednio wykorzystaj wyniki quads=True
Rect (prostokąt zewnętrzny)Zasięg styków zewnętrznychProsty wybór tekstu poziomegoTekst kursywy lub obracania może być poza ramą i nieodpowiedni do sprawdzania dokładności
Połączony RectOgólny zakresNie zaleca się do wyszukiwania międzyliniowegoTo straci znaczenie pustych obszarów pośrodku

🎯 Która metoda ci odpowiada?

Jeśli ......

  • Należy zachować narożniki tekstu: Bezpośrednio użyj wyników quads=True do dodawania podświetleń.
  • Chcę ocenić, czy podświetlanie jest poprawne na podstawie progu różnicy obszarów: Nie rób tego; czcionki kursywą niekoniecznie zmniejszają powierzchnię quad.
  • Jeśli napotkasz przecięcie się przez linie haseł: zachowaj wszystkie segmenty Quad, zaznacz je osobno i nie łącz ich w jeden Rect.
  • Obsługa stron przy przycinaniu CropBox: Po przywróceniu CropBox sprawdź, czy treść nadal znajduje się w obszarze widocznym.

Użyj tej listy kontrolnej do tłumaczenia dokumentów

Najpierw dokładnie sprawdź kolejność stron, lokalizację źródła i integralność tekstu, a następnie przekaż tę samą zanonimizowaną próbkę procesowi tłumaczeniowemu. Po tłumaczeniu nadal konieczne jest sprawdzenie, czy tytuł, główny tekst i podpisy prawidłowo się zgadzają; nie wystarczy oceniać tylko na podstawie płynności tekstu.

OmniDoc (wpis produktu) oferuje wieloformatowe portale tłumaczeniowe dokumentów, a jego oficjalna strona internetowa wprowadza OCR, terminologię oraz funkcje dwujęzyczne. Dla zespołów, które chcą zacząć bezpośrednio od plików, jest to ścieżka warta oceny na podstawie rzeczywistych próbek. Prosimy o użycie zanonimizowanego pliku, który uznałeś, aby przesłać i zweryfikować wyniki za pomocą listy kontrolnej opisanej w tym artykule. Nie oznacza to, że OmniDoc korzysta z bibliotek open-source ani wewnętrznych algorytmów wymienionych w tym artykule, ani nie zastępują tych przykładów testów wydajności produktu.

Bibliografia

❓ Najczęściej zadawane pytania (FAQ)

1. Czy tekst kursywy koniecznie zmniejsza obszar kwadratu?

Niekoniecznie. Glify kursywy niekoniecznie dają mniejszą powierzchnię czworokątną niż zewnętrzny prostokąt, więc nie można polegać na różnicach powierzchni, by określić, czy podświetlenie jest poprawne.

2. Kiedy należy przechowywać informacje o czterech narożnikach Quadu?

Jeśli musisz zachować informacje o kierunku dla czterech rogów, powinieneś bezpośrednio użyć wyników quads=True do dodania podświetleń.

3. Co powinieneś zrobić, jeśli Twoje hasło wyszukiwania przekracza granice i nie trafia w sedno?

Nie twórz pustych podkreśleń; najpierw sprawdź warstwę tekstową i słowa kluczowe. Jeśli zwracana jest tylko część segmentu, wszystkie zwrócone segmenty Quad powinny być zachowane i podświetlone osobno, zamiast przymusowo łączyć się w jeden Rect.

4. Strona zawiera CropBox. Na co powinieneś zwrócić uwagę podczas cięcia?

Współrzędne zwracane przez search_for nadal opierają się na oryginalnej przestrzeni strony, która nie została obrócona. Po przywróceniu CropBox musisz sprawdzić, czy zawartość nadal znajduje się w linii widoku; nie możesz zakładać, że get_text domyślnie ignoruje obszar przycinania.

📝 Podsumowanie

Podświetlanie kursywą i obracanie tekstu powinno być oparte na Quad, a numery stron i informacje o narożnikach powinny być zachowane dla każdego elementu. Problemy takie jak uszkodzenie warstwy tekstowej czy nieprawidłowe osadzanie czcionek nadal wymagają ręcznej weryfikacji lub ponownego OCR.

Darmowe pobranie wersji desktopowej OmniDoc: obsłuż dokumenty, tabele, prezentacje i pliki PDF w jednym miejscu

Zaktualizowano 2026-11-13