Waarom wordt de PDF met dubbele kolommen serieel geëxtraheerd? Houd eerst de coördinaten bij en praat dan over de leesvolgorde
Leg uit dat de serialisatie van PDF-tekst met dubbele kolommen voortkomt uit het gebrek aan semantische structuur van het formaat, en verduidelijk dat de sorteerparameter slechts een geometrische sortering is. Er wordt een synthetisch Python-voorbeeld gegeven op basis van coördinatenpartitionering om de logica van de sequentiereorganisatie te demonstreren, toepasselijke grenzen te verduidelijken en rode lijnen handmatig te beoordelen, en een pragmatisch acceptatiepad te bieden dat de vertaalworkflow van OmniDoc met elkaar verbindt.
De tekstreeksen die uit dubbelkoloms-PDF's worden gehaald, worden vaak niet verkeerd herkend, maar worden in de verkeerde volgorde gelezen. Dit artikel is bedoeld voor lezers die tekst willen extraheren uit pdf's met dubbele kolommen, zoals artikelen en rapporten, en deze vervolgens willen vertalen of ordenen.
Meestal komen lezers deze situatie tegen: halverwege de linkerkolom wordt de volgende zin gevolgd door de formule-uitleg in de rechterkolom. De karakters worden weliswaar allemaal correct herkend, maar de volgorde wordt verstoord. In dit artikel wordt eerst uitgelegd waarom serialisatie plaatsvindt, en wordt vervolgens een synthetisch voorbeeld gebruikt om aan te tonen hoe de volgorde kan worden gereorganiseerd door te verdelen op basis van coördinaten. Ten slotte worden de toepasselijke grenzen en acceptatielijst vermeld, zodat u beter kunt beoordelen of het in uw eigen dossiers kan worden gebruikt.
Waarom wordt de PDF met dubbele kolommen serieel geëxtraheerd? Conclusie in één zin
Bewaar eerst de coördinaten en de bronpagina en sorteer vervolgens volgens regionale regels. Comprimeer niet de hele pagina rechtstreeks in een lange reeks.
| jouw situatie | Aanbevolen praktijken | reden |
|---|---|---|
| Gewoon papier met twee kolommen, tekstserialisering | Lees eerst de linkerkolom van een sectie en lees vervolgens de rechterkolom | Afwisselend regel voor regel splitsen zal alinea's vernietigen |
| Ik wilde het gewoon snel proberen | Vergelijk de resultaten van het in- en uitschakelen van sort | sort voert alleen geometrisch sorteren uit, geschikt voor regelpagina's |
| Pagina's hebben kolomtitels, kanttekeningen en voetnoten | Verwerk afzonderlijk per regio en controleer regionale relaties | Geometrische sortering alleen kan de toeschrijving van deze inhoud niet bepalen. |
| Moet worden overgedragen aan het vertaalmodel | Houd coördinaten en paginanummers bij, orden eerst de volgorde en vertaal dan | Contexten in de verkeerde volgorde zijn moeilijk te verhelpen, zelfs door het model te veranderen. |
Waarom is de bestelling in de war?
PDF registreert de positie van elke paragraaf tekst, niet "welke paragraaf is dit en tot welke kolom behoort deze?" Wanneer de extractietool uitvoer op basis van coördinaten en er geen gebiedsregels zijn, kan de tekst in de linker- en rechterkolom geïnterlinieerd zijn.
Dergelijke problemen ontstaan niet noodzakelijkerwijs tijdens de identificatiefase. Misschien worden de woorden allemaal correct genoemd, maar in de verkeerde volgorde. Daarom moet het oplossingsidee gericht zijn op sorteren en zoneren, in plaats van het herhaaldelijk wijzigen van de herkennings- of vertaalkoppelingen.
Houd eerst de coördinaten bij en praat dan over de leesvolgorde
Voordat u het ordeningsprobleem oplost, moet u de coördinaten en de herkomstpagina van de tekst behouden. Haast je niet om de hele pagina in één lange reeks te comprimeren.
- Bewaar de vier coördinaten van elk tekstblok om latere beoordeling van gebiedseigendom te vergemakkelijken.
- Bewaar het bronpaginanummer om backtracking en handmatige verificatie te vergemakkelijken.
- Zodra de regionale informatie verloren is gegaan, zullen daaropvolgende vertalingen de verkeerde context krijgen, en het veranderen van een vertaalmodel kan dit mogelijk niet verhelpen.
sort=Waar is het proberen waard, maar het begrijpt de lay-out niet
PyMuPDF biedt verschillende extractievormen zoals tekst, woorden, blokken, enz. De specifieke verwerking van sort varieert afhankelijk van het uitvoertype en de versie. Het kan niet algemeen worden omschreven als een vast zetalgoritme, noch kan worden beloofd dat het de leesvolgorde van alle documenten zal herstellen.
Suggesties voor gebruik zijn als volgt:
- Voor de regelspagina kunt u eerst de resultaten vergelijken van het in- en uitschakelen van sorteren.
- Voor pagina's met kolomtitels, kanttekeningen en voetnoten moet de gebiedsrelatie opnieuw worden gecontroleerd.
- PDF kan structurele tags bevatten, maar dit betekent niet dat de momenteel gebruikte extractie-interface u automatisch de semantische alineaboom geeft die u nodig heeft.
Dit artikel implementeert geen universele lay-outherkenning, maar demonstreert alleen "hoe te sorteren volgens bestaande regionale regels" en legt duidelijk de grenzen van de mogelijkheden uit. Voor de interface en het extractieformulier verwijzen wij u naar PyMuPDF Officiële Tekstextractiegids.
Gebruik vijf samengestelde tekstblokken om het probleem uit te leggen
De voorbeeldpagina is 600 punten breed, met 300 punten tussen de kolommen; Binnen de top 80 punten bevindt zich het hordetitelgebied, waaronder het hoofdtekstgedeelte. Invoer bewust versleuteld: het tweede segment van de rechterkolom wordt eerst vermeld, het eerste segment van de linkerkolom wordt later geplaatst. Elke tuple bevat de vier coördinaten en tekst van de rechthoek. Dit is een vereenvoudigde structuur die voor demonstratiedoeleinden is gedefinieerd en niet gelijkwaardig aan de volledige retourwaarde van get_text("blocks").
Het verwachte resultaat zou moeten zijn: titel, eerste alinea van de linkerkolom, tweede alinea van de linkerkolom, eerste alinea van de rechterkolom, tweede alinea van de rechterkolom. Blokken die de grens tussen kolommen overschrijden, moeten in de uitzonderingslijst terechtkomen, en mogen niet stilletjes worden weggegooid of gedwongen in de linker kolom te worden geplaatst.
Een klein voorbeeld dat volledig kan lopen
Het volgende voorbeeld gebruikt alleen de Python-standaardbibliotheek. Bij het integreren van PyMuPDF kun je de eerste vijf velden uit de blokextractieresultaten behouden en eerst niet-tekstblokken uitsluiten. Het voorbeeld opent geen externe bestanden, vereist geen OCR en leidt kolomgrenzen niet automatisch af.
def order_known_layout(blocks, split_x=300, title_bottom=80):
groups = {"title": [], "left": [], "right": []}
rejected = []
for block in blocks:
x0, y0, x1, y1, text = block
if x1 <= x0 or y1 <= y0:
rejected.append(block)
continue
if y1 <= title_bottom:
region = "title"
elif y0 < title_bottom:
rejected.append(block)
continue
elif x1 <= split_x:
region = "left"
elif x0 >= split_x:
region = "right"
else:
rejected.append(block)
continue
groups[region].append(block)
ordered = []
for region in ("title", "left", "right"):
ordered.extend(sorted(groups[region], key=lambda b: (b[1], b[0])))
return [b[4] for b in ordered], rejected
sample = [(330, 160, 550, 190, "R2"), (40, 100, 270, 130, "L1"),
(40, 20, 550, 50, "TITLE"), (330, 100, 550, 130, "R1"),
(40, 160, 270, 190, "L2")]
ordered, rejected = order_known_layout(sample)
assert ordered == ["TITLE", "L1", "L2", "R1", "R2"]
assert rejected == []
wide = (40, 220, 550, 250, "FULL WIDTH BODY")
assert order_known_layout(sample + [wide])[1] == [wide]
assert order_known_layout([]) == ([], [])
print("known-layout examples: 3 assertions passed")
De waarden van 80 en 300 in het voorbeeld komen uit de instellingen van deze samengestelde pagina, die niet de ervaringsdrempels zijn die op alle PDF's van toepassing zijn. Wanneer de breedte van de linker- en rechterkolom op de volgende pagina verandert, kan het gebruik van parameters van de vorige pagina resulteren in "programma normaal draait maar inhoudsfouten." Regionale regels moeten de pagina volgen, waarbij in ieder geval de regelversie en paginagrootte worden vastgelegd.
📊 Kernvergelijking
| Afhandelingsmethoden | Wat kan er gedaan worden? | Wat moet worden opgemerkt? |
|---|---|---|
Gebruik sort=True direct | Sorteer geometrisch op coördinaten; probeer eerst de regelpagina | Ik begrijp het eigendom van hindernistitels, zijnoten en voetnoten niet |
| Sorteren op coördinatenpartitionering | Verdeel eerst het gebied en lees dan per segment voor een gemakkelijkere inspectie | De partitiedrempel hangt af van de pagina en moet per pagina worden geverifieerd |
| Handmatig geannoteerde leesvolgorde | De resultaten zijn het meest beheersbaar en geschikt voor het verifiëren van sleuteldocumenten | Hoge kosten, geschikt voor steekproefcontroles en benchmarking |
Kijk niet alleen naar fouten tijdens de acceptatie
| Inspectie-items | Wat gezien moet worden | Wat te doen als het niet aan de eisen voldoet |
|---|---|---|
| Regionale orde | Na de titel eerst de volledige linkerbalk, dan de volledige rechterbalk | Controleer de partitieregels; vertrouw niet op het wisselen van strings om de patch te patchen |
| Consistentie in inhoud | Het aantal geaccepteerde blokken plus het aantal afgewezen blokken is gelijk aan het aantal invoerblokken | Bloklevering en controleer op stille ontbrekende blokken |
| Hoofdtekst van de horden | Op de afwijzingslijst verschijnen | Voeg hordesecties of handmatig oordeel toe |
| Rotatie en snijwerk | Invoerblokken en partities gebruiken hetzelfde coördinatensysteem | Eerst de coördinaten unificeren, en dan inclusie-oordelen maken |
| Koppen en voetnoten | Classificatie apart volgens bedrijfsregels | Verwijder niet alle tekst onderaan tegelijk |
In echte artikelen kan een dergelijke structuur ook voorkomen: voeg een hordediagram in het midden in en start de dubbele kolom onder de afbeelding opnieuw. Op dit punt moet je eerst de pagina opdelen in boven- en ondersecties en ze vervolgens apart sorteren. De eenmalige opdeling van drie secties in dit artikel is niet voldoende. Chinese verticale lay-out, tekst van rechts naar links en complexe randnotities mogen hier niet worden gebruikt voor leesrichtingen.
🎯 Welke methode past bij jou?
Als je ......
- Alleen pagina's met één of twee kolommen die alleen regels hoeven te hanteren: Vergelijk eerst de resultaten van het inschakelen en sluiten van
sort, en beslis vervolgens of partitieregels worden gebruikt. - Omgaan met artikelen met kruisbalktitels, grafieken of voetnoten: Verdeel pagina's per sectie en stel uitzonderingslijsten in voor kruisbalkinhoud.
- Je moet de vertaling aan anderen overdragen: Houd de coördinaten en paginanummers bij, controleer elk item volgens de acceptatiechecklist, en kijk niet alleen of de bewerking fout is.
- Als je zelf geen scripts wilt onderhouden: Je kunt direct kant-en-klare documentvertaaltools gebruiken en de vertaling controleren met dezelfde sequentiële checklist.
Hoe ontvang je OmniDoc vertaalworkflow
De waarde van zelfgebouwde scripts ligt in het duidelijk aangeven van acceptatieregels; De waarde van kant-en-klare vertaaltools ligt in het verkorten van de stappen tussen documenten en vertalingen. De twee botsen niet. OmniDoc (Productinvoer) biedt een portaal voor documentvertaling, en de officiële website introduceert ook functies zoals OCR, terminologie en tweetalige vergelijking. Je kunt een desensibiliseerd artikel selecteren met het recht om de vertaling te uploaden en te controleren met dezelfde set checklists.
Belangrijke controles zijn onder andere:
- Controleer of de openingszin na de hindernistitel verbonden is.
- Zijn de bijschriften samengevoegd met de hoofdtekst?
- Controleer of voetnootreferenties nog steeds overeenkomen met de juiste posities.
Dit is het evalueren van leveringsresultaten, niet het afleiden van de interne algoritmen van OmniDoc. Als het resultaat niet aan de eisen voldoet, behoud dan de originele pagina en de foutsectie, bepaal eerst of het probleem in identificatie, sortering of vertaling ligt, en beslis vervolgens hoe dit te corrigeren.
❓ Veelgestelde Vragen (FAQ)
1. Dubbelkoloms PDF-serienummer — wordt het verkeerd geïdentificeerd?
Niet per se. Alle tekens kunnen correct worden herkend; problemen liggen vaak in de leesvolgorde, dus je moet eerst de volgorde en gebiedsregels controleren.
2. sort=True: Kunt u het probleem van de dubbele kolomvolgorde direct oplossen?
Het kan niet worden gegeneraliseerd. De afhandeling van sort varieert afhankelijk van het uitvoertype en de versie. Het is geen layoutbegrip en kan niet garanderen dat de leesvolgorde van alle documenten wordt hersteld. Voor regelpagina's kun je het eerst proberen; voor pagina's met dwarsdoorsnede-inhoud moet je ook de regionale relaties controleren.
3. Waarom kun je de hele pagina niet samenpersen tot een lange string?
Zodra coördinaten en gebiedsinformatie verloren gaan, krijgen latere vertalingen alleen maar verkeerde context, en zelfs een ander vertaalmodel kan dit mogelijk niet herstellen.
4. Kunnen de 80 en 300 punten in het voorbeeld direct worden toegepast op andere PDF's?
Nee. Dit zijn slechts instellingen voor deze samengestelde pagina. Wanneer de paginagrootte of kolombreedte verandert, moet de regelversie per pagina worden geverifieerd en apart geregistreerd.
📝 Samenvatting
Voor PDF-bestellingen met dubbele kolommen moeten coördinaten en bronpagina's eerst worden bewaard, daarna worden afgehandeld met regionale regels, en elk item worden gecontroleerd volgens de acceptatiechecklist. Zelfgebouwde scripts zijn geschikt om regels duidelijk te schrijven, terwijl kant-en-klare tools beter zijn om operationele stappen te verminderen; beide kunnen samen worden gebruikt.
Ervaar nu: upload je document om te beginnen met vertalen, waarbij je de originele opmaak behoudt


