Markeer PDF-zoekwoorden, waarom omkadert de rechthoek de cursieve tekst verkeerd?

Cursieve lettertypen maken het gebied van de gezochte Quad niet noodzakelijkerwijs kleiner dan de omsluitende rechthoek. Wanneer u de informatie over de richting van de vier hoeken wilt behouden, gebruikt u direct het resultaat van quads=True om accentuering toe te voegen; gebruik geen drempelwaarde voor oppervlakteverschil om te bepalen of de markering correct is.

Wanneer het zoekmarkeringsvak voor cursieve tekst scheef staat, komt dat vaak niet omdat er een probleem is met het lettertype zelf, maar omdat het geometrische object dat wordt gebruikt voor het markeren verkeerd is geselecteerd. Dit artikel is bedoeld voor ontwikkelaars die PyMuPDF gebruiken om de positionering van PDF-tekst te verwerken. Het legt uit waarom de omsluitende rechthoek (Rect) niet kan worden gebruikt om te bepalen of de markering van cursieve of geroteerde tekst correct is, en hoe hiermee in verschillende situaties moet worden omgegaan.

Na het lezen van dit artikel kunt u beslissen of u Quad of Rect wilt gebruiken voor zoekresultaten, weet u hoe u moet omgaan met geen treffers, kruisrijen, meerdere treffers en CropBox-bijsnijden tijdens het zoeken, en begrijpt u welke problemen buiten het bereik van geometrische positionering vallen.

De volledige tekst wordt gedemonstreerd met synthetische voorbeelden en de code heeft de voorbeeldcontroles doorstaan in een geïsoleerde omgeving, maar dit biedt geen garantie voor alle echte bestanden of producteffecten. Voordat u belangrijke documenten verwerkt, dient u de originelen te bewaren en ze vervolgens te controleren volgens de onderstaande grenzen en acceptatie-items.

Kies Quad of Rect voor zoekaccentuering van cursieve tekst. Conclusie in één zin

Het cursieve lettertype maakt het door de zoekopdracht verkregen Quad-gebied niet noodzakelijkerwijs kleiner dan de omsluitende rechthoek. Wanneer het nodig is om de informatie over de vierhoekrichtingen te behouden, kunt u direct de resultaten van quads=True gebruiken om highlights toe te voegen. Gebruik geen drempelwaarde voor oppervlakteverschil om te bepalen of de markering correct is.

jouw situatieAanbevolen praktijkenreden
Cursieve of geroteerde tekst, de vierhoekoriëntatie moet behouden blijvenGebruik direct de resultaten van quads=True om hoogtepunten toe te voegenQuad bewaart oriëntatie-informatie over de vier hoeken
Ik wil de drempel voor het gebiedsverschil gebruiken om te bepalen of de markering correct is.doe dit nietHet cursieve lettertype maakt het Quad-gebied niet noodzakelijkerwijs kleiner, en het drempeloordeel is onbetrouwbaar.
De zoektermen beslaan meerdere regels en de engine herkent ze niet als dezelfde woordenschateenheid.Bewaar alle geretourneerde Quad-fragmenten en teken de hoogtepunten afzonderlijkDoor met geweld in een Rect op te gaan, gaat de semantiek van de witte ruimte in het midden verloren.
De pagina heeft een CropBox-bijsnijdingControleer of de inhoud zich nog steeds binnen het zichtbare gebied bevindt nadat u de CropBox hebt hersteldDe door search_for geretourneerde coördinaten zijn gebaseerd op de niet-geroteerde originele paginaruimte en er kan niet van worden uitgegaan dat get_text het bijgesneden gebied standaard negeert
Meerdere treffersHoud paginanummers item voor item bij en verwerk ze één voor éénAlleen het verwerken van de eerste zal de resterende posities missen

Waarom wordt cursieve tekst verkeerd weergegeven?

Veel mensen zullen standaard aannemen dat de omsluitende rechthoek met cursieve tekens veel groter is dan de Quad, dus het gebruik van Rect om te markeren zal de "frameafwijking" veroorzaken. In feite maakt het cursieve lettertype het gebied van de gezochte Quad niet noodzakelijkerwijs kleiner dan de omsluitende rechthoek, dus het is niet betrouwbaar om het gebiedsverschil te gebruiken om te beoordelen of de markering correct is.

Wat echt nodig is, is het behouden van de oriëntatie-informatie van de vier hoeken. Quad registreert deze informatie en het gebruik ervan om direct highlights toe te voegen is betrouwbaarder dan het gebruik van een omsluitende rechthoek om de vorm te raden.

Op zichzelf staand compositievoorbeeld

Zie de importlijst voor bijvoorbeeld afhankelijkheden. De code construeert invoer in het geheugen en vereist geen externe bestanden om te worden uitgevoerd. Operatiegegevens worden afzonderlijk verstrekt en vormen geen garantie dat alle documenten authentiek zijn.

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

Correcte uitvoer- en grensinvoerverwerking

Het bovenstaande synthetische voorbeeld genereert een PDF in het geheugen die wordt gebruikt om het gedrag van de Quad te verifiëren. Hieronder vindt u enkele algemene grensinvoer.

1. Zoekwoorden overspannen lijnen

Als de zoekterm nieuwe regels omvat en de engine deze niet herkent als dezelfde woordenschateenheid, kan search_for een lege lijst retourneren of alleen gedeeltelijke fragmenten matchen.

  • Voeg niet met geweld meerdere niet-aangrenzende Quads samen in één Rect, anders gaat de semantiek van de witte ruimte in het midden verloren.
  • Bewaar alle geretourneerde Quad-fragmenten en teken de hoogtepunten afzonderlijk.

2. De zoekterm bevat reguliere speciale tekens

Als een zoekterm gewone speciale tekens bevat zonder dat er escape-tekens aan worden toegevoegd, zijn de resultaten mogelijk niet zoals verwacht. De invoerreeks moet veilig worden verwerkt voordat deze wordt aangeroepen.

3. CropBox bijsnijden

Als de pagina een CropBox-bijsnijding heeft, zijn de door search_for geretourneerde coördinaten nog steeds gebaseerd op de niet-geroteerde originele paginaruimte. Nadat u de CropBox heeft hersteld, moet u controleren of de inhoud zich nog steeds binnen het zichtbare gebied bevindt. U kunt er niet van uitgaan dat get_text het bijsnijdgebied standaard negeert.

Acceptatiecriteria en grenzen voor handmatige beoordeling

Deze oplossing lost alleen het geometrische positioneringsprobleem op. In de volgende situaties is het geen kwestie van kiezen tussen Quad en Rect:

  • De tekstlaag van de PDF zelf is beschadigd;
  • Abnormale lettertype-insluiting;
  • Er zijn verborgen lagen.

In deze gevallen zijn de resultaten van search_for mogelijk helemaal niet geloofwaardig en moeten ze handmatig worden beoordeeld of opnieuw worden OCR uitgevoerd. De voorbeeldcode verifieert alleen geometrische eigenschappen en het end-to-end-effect moet nog steeds worden geëvalueerd op basis van specifieke documenttypen.

Specifieke beslissingen over de afhandeling van uitzonderingen

ObservatieWat er gedaan moet wordenen niet beoordeeld moeten worden
De zoektocht leverde geen resultaat opControleer de tekstlaag en trefwoordenEr worden geen lege highlights gemaakt
Roteer tekstBehoud de vier hoeken van de QuadNauwkeurigheid raden door geen oppervlakteverschillen te gebruiken
en op veel plekken de juiste snaar raakteElk item moet worden behouden met paginanummersPak niet alleen de eerste aan

📊 Kernvergelijking

DoelInformatie die bewaard kan wordenToepasselijke scenario'sNoten
QuadVier hoekenCursief en roterende tekst vereisen nauwkeurige markeringGebruik direct de resultaten van quads=True
Rechthoek (externe rechthoek)Extern contactbereikEenvoudige selectie van horizontale tekstCursief of roterende tekst kan off-box zijn en niet geschikt om de nauwkeurigheid te controleren
Samengevoegde RectAlgemene reikwijdteNiet aanbevolen voor cross-line searchHierdoor verliest de betekenis van de lege gebieden in het midden

🎯 Welke methode past bij jou?

Als je ......

  • Teksthoeken moeten behouden blijven: Gebruik direct de resultaten van quads=True om highlights toe te voegen.
  • Wil je beoordelen of markeringen correct is op basis van de drempelwaarde voor oppervlakteverschil: Doe dit niet; cursief geschreven lettertypen maken het quad-gebied niet per se kleiner.
  • Als je zoektermen tegenkomt die lijnen overschrijden: Houd alle Quad-segmenten, markeer ze apart en voeg ze niet samen tot één enkele Rect.
  • Pagina's afhandelen met cropBox cropping: Controleer na het herstellen van CropBox of de inhoud nog steeds binnen het zichtbare gebied ligt.

Gebruik deze checklist voor documentvertaling

Controleer eerst de paginavolgorde, bronlocatie en tekstintegriteit grondig, en geef vervolgens hetzelfde geanonimiseerde voorbeeld aan het vertaalproces. Na de vertaling is het nog steeds nodig om te controleren of de titel, hoofdtekst en onderschriften correct overeenkomen; het is niet voldoende om alleen te beoordelen of de tekst vloeiend is.

OmniDoc (Productinvoer) biedt portalen voor documentvertaling in meerdere formaten, en de officiële website introduceert OCR, terminologie en tweetalige referentiefuncties. Voor teams die direct vanaf de bestanden willen beginnen, is dit een pad dat de moeite waard is om te evalueren met echte monsters. Gebruik alstublieft het geanonimiseerde bestand dat u hebt geautoriseerd om te uploaden en de resultaten te verifiëren met de checklist in dit artikel. Dit beweert niet dat OmniDoc de open-source bibliotheken of interne algoritmen gebruikt die in dit artikel worden genoemd, noch vervangen de voorbeelden productprestatietests.

Referenties

❓ Veelgestelde Vragen (FAQ)

1. Maakt cursief schrift het quad-gebied per se kleiner?

Niet per se. Cursieve glyphs geven niet per se een kleiner quad-oppervlak dan een externe rechthoek, dus je kunt niet vertrouwen op oppervlakteverschillen om te bepalen of markering correct is.

2. Wanneer moet de vierhoeksinformatie van de Quad worden bewaard?

Als je de richtingsinformatie voor de vier hoeken moet behouden, moet je direct de resultaten van quads=True gebruiken om markeringen toe te voegen.

3. Wat moet je doen als je zoekterm grenzen overschrijdt en niet de juiste snaar raakt?

Maak geen lege markeringen; controleer eerst de tekstlaag en trefwoorden. Als slechts een deel van het segment wordt teruggegeven, moeten alle teruggestuurde Quad-segmenten apart worden bewaard en gemarkeerd, in plaats van gedwongen samen te voegen tot één enkele Rect.

4. De pagina bevat CropBox. Waar moet je op letten bij het knippen?

De coördinaten die door search_for worden teruggegeven, zijn nog steeds gebaseerd op de oorspronkelijke paginaruimte die niet is geroteerd. Na het herstellen van CropBox moet je controleren of de inhoud nog binnen de weergavelijn valt; je kunt er niet van uitgaan dat get_text standaard het bijsnijdgebied negeert.

📝 Samenvatting

Het markeren van cursief en roterende tekst moet gebaseerd zijn op de Quad, en paginanummers en hoekinformatie moeten voor elk item behouden blijven. Problemen zoals corruptie van de tekstlaag en abnormale lettertype-embedding vereisen nog steeds handmatige controle of her-OCR.

Gratis download van de OmniDoc desktopversie: behandel documenten, tabellen, presentaties en PDF's allemaal op één plek

Bijgewerkt op 2026-11-13