이중 열 PDF가 연속적으로 추출되는 이유는 무엇입니까? 좌표를 먼저 두고 읽는 순서를 이야기해 보세요
이중 열 PDF 텍스트 직렬화는 형식의 의미 구조 부족으로 인해 발생한다고 설명하고 정렬 매개변수는 기하학적 정렬일 뿐이라는 점을 명확히 합니다. 좌표 분할을 기반으로 한 합성 Python 예제가 제공되어 시퀀스 재구성 논리를 보여주고 적용 가능한 경계와 수동 검토 빨간색 선을 명확히 하며 OmniDoc 번역 작업 흐름을 연결하는 실용적인 수용 경로를 제공합니다.
이중 열 PDF에서 추출된 텍스트 시퀀스는 잘못 인식되지 않고 잘못된 순서로 읽혀지는 경우가 많습니다. 이 문서는 논문, 보고서 등 2단 PDF에서 텍스트를 추출한 후 번역하거나 정리해야 하는 독자를 대상으로 합니다.
독자는 일반적으로 이러한 상황에 직면합니다. 왼쪽 열의 중간에 다음 문장 뒤에 오른쪽 열의 수식 설명이 나옵니다. 문자가 모두 올바르게 인식될 수 있지만 순서가 깨졌습니다. 이 기사에서는 먼저 직렬화가 발생하는 이유를 설명한 다음 합성 예제를 사용하여 좌표별로 분할하여 순서를 재구성하는 방법을 보여줍니다. 마지막으로, 자신의 파일에 사용할 수 있는지 여부를 쉽게 판단할 수 있도록 적용 가능한 경계 및 허용 목록을 제공합니다.
이중 열 PDF가 연속적으로 추출되는 이유는 무엇입니까? 한 문장 결론
좌표와 원본 페이지를 먼저 유지한 다음 지역 규칙에 따라 정렬합니다. 전체 페이지를 긴 문자열로 직접 압축하지 마세요.
| 당신의 상황 | 권장 사례 | 이유 |
|---|---|---|
| 일반 2단 논문, 텍스트 연재 | 섹션의 왼쪽 열을 먼저 읽은 다음 오른쪽 열을 읽으십시오. | 한 줄씩 교대로 연결하면 단락이 손상됩니다. |
| 그냥 빨리 시도해 보고 싶었어요 | sort를 켰을 때와 껐을 때의 결과를 비교해보세요 | sort는 규칙 페이지에 적합한 기하학적 정렬만 수행합니다. |
| 페이지에는 교차 열 제목, 보조 메모 및 각주가 있습니다. | 지역별로 별도 처리 및 지역관계 확인 | 기하학적 정렬만으로는 이러한 콘텐츠의 속성을 결정할 수 없습니다. |
| 번역 모델에 넘겨야 함 | 좌표와 페이지 번호를 유지하고 순서를 먼저 정리한 후 번역하세요 | 잘못된 순서의 컨텍스트는 모델을 변경하더라도 수정하기 어렵습니다. |
순서가 왜 뒤틀리나요?
PDF는 "이것은 어느 단락이고 어느 열에 속하는가?"가 아니라 텍스트의 각 단락의 위치를 기록합니다. 추출 도구가 좌표로 출력할 때 면적 규칙이 없으면 왼쪽 열과 오른쪽 열의 텍스트가 인터레이스될 수 있습니다.
이러한 문제는 식별 단계에서 반드시 발생하는 것은 아닙니다. 어쩌면 단어가 모두 올바르게 언급되었지만 순서가 잘못되었을 수도 있습니다. 따라서 솔루션 아이디어는 인식이나 번역 링크를 반복적으로 변경하기보다는 정렬 및 구역화에 중점을 두어야 합니다.
좌표를 먼저 두고 읽는 순서에 대해 이야기해 보세요
순서 문제를 해결하기 전에 텍스트의 원본 좌표와 페이지를 보존하세요. 전체 페이지를 하나의 긴 문자열로 압축하려고 서두르지 마십시오.
- 이후의 영역 소유권 판단을 용이하게 하기 위해 각 텍스트 블록의 4개 좌표를 유지합니다.
- 역추적 및 수동 확인이 용이하도록 소스 페이지 번호를 유지하세요.
- 지역 정보가 손실되면 후속 번역에서 잘못된 문맥이 나타나게 되며, 번역 모델을 변경해도 문제가 해결되지 않을 수 있습니다.
sort=True는 시도해 볼 가치가 있지만 레이아웃 이해자는 아닙니다.
PyMuPDF는 텍스트, 단어, 블록 등과 같은 다양한 추출 형식을 제공합니다. sort의 특정 처리는 출력 유형 및 버전에 따라 다릅니다. 일반적으로 고정된 조판 알고리즘이라고 설명할 수 없으며, 모든 문서의 읽기 순서를 복원한다고 약속할 수도 없습니다.
사용 제안은 다음과 같습니다.
- 규칙 페이지에서는 먼저 정렬을 켰을 때와 껐을 때의 결과를 비교할 수 있습니다.
- 교차제목, 보조주, 각주 등이 포함된 페이지의 경우에는 영역관계를 다시 확인해야 합니다.
- PDF에 구조적 태그가 포함될 수 있지만 이는 현재 사용되는 추출 인터페이스가 필요한 의미론적 단락 트리를 자동으로 제공한다는 의미는 아닙니다.
이 문서에서는 범용 레이아웃 인식을 구현하지 않고 "기존 지역 규칙에 따라 정렬하는 방법"만 보여주고 기능의 경계를 명확하게 설명합니다. 인터페이스 및 추출 형식은 PyMuPDF 공식 텍스트 추출 가이드를 참조하세요.
5개의 합성된 텍스트 블록을 사용하여 문제를 설명하세요.
예제 페이지의 너비는 600포인트이고 열 사이의 경계는 300포인트입니다. 상단에서 80포인트 이내에는 교차 열 제목 영역이 있고 그 아래에는 텍스트 영역이 있습니다. 입력은 의도적으로 뒤섞여 있습니다. 오른쪽 열의 두 번째 문단이 먼저 오고, 왼쪽 열의 첫 번째 문단이 마지막에 옵니다. 각 튜플에는 사각형과 텍스트의 4개 좌표가 포함되어 있습니다. 이는 데모 목적으로 정의된 단순화된 구조이며 get_text("blocks")의 전체 반환 값과 동일하지 않습니다.
예상되는 결과는 제목, 왼쪽 열의 첫 번째 단락, 왼쪽 열의 두 번째 단락, 오른쪽 열의 첫 번째 단락, 오른쪽 열의 두 번째 단락이어야 합니다. 열 경계를 넘는 텍스트 블록은 조용히 버려지거나 왼쪽 열에 들어가지 않고 예외 목록에 들어가야 합니다.
완전히 실행할 수 있는 작은 예
다음 예제에서는 Python 표준 라이브러리만 사용합니다. PyMuPDF에 연결할 때 블록 추출 결과의 처음 5개 필드를 유지하고 텍스트가 아닌 블록을 먼저 제외할 수 있습니다. 이 예에서는 외부 파일을 열지 않고 OCR이 필요하지 않으며 열 경계를 자동으로 유추하지 않습니다.
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")
예제의 80과 300은 이 합성 페이지의 설정에서 나온 것이며 모든 PDF에 적용되는 경험적 임계값은 아닙니다. 다음 페이지의 왼쪽, 오른쪽 열 너비가 변경된 경우 이전 페이지의 매개 변수를 사용하면 "프로그램은 정상적으로 실행되지만 내용이 잘못되었습니다."가 발생할 수 있습니다. 지역 규칙은 페이지를 따라야 하며 최소한 규칙 버전과 페이지 크기를 기록해야 합니다.
📊 핵심 비교
| 가공방법 | 무엇을 할 수 있나요? | 주의할 점 |
|---|---|---|
sort=True를 직접 사용 | 좌표를 기준으로 기하학적 정렬을 수행합니다. 먼저 규칙 페이지에서 시도해 볼 수 있습니다. | 교차 열 제목, 보조 메모 및 각주의 소유권을 이해하지 못합니다. |
| 좌표 파티션을 기준으로 정렬 | 먼저 영역을 나눈 다음 검사를 용이하게 하기 위해 섹션별로 읽어 보십시오. | 파티션 임계값은 페이지에 따라 다르며 페이지 단위로 확인해야 합니다. |
| 수동으로 주석이 달린 읽기 순서 | 결과는 가장 제어하기 쉽고 주요 문서 검증에 적합합니다. | 높은 비용, 즉석 점검 및 벤치마크에 적합 |
접수 시 오류가 있는지만 확인하지 마세요
| 확인항목 | 무엇을 볼 것인가 | 일치하지 않을 때 대처 방법 |
|---|---|---|
| 면적 순서 | 제목 뒤, 먼저 왼쪽 열 전체, 그 다음 오른쪽 열 전체 | 파티션 규칙을 확인하고 문자열을 변경하여 패치하지 마십시오. |
| 콘텐츠 보존 | 허용된 블록 수에 거부된 블록 수를 더한 값은 입력 블록 수와 같습니다. | 전달을 차단하고 자동 차단 손실이 있는지 확인 |
| 크로스바 텍스트 | 거부 목록에 나타납니다 | 새로운 장애물 섹션을 추가하거나 직접 판단에 제출하세요. |
| 회전 및 자르기 | 입력 블록은 파티션과 동일한 좌표계를 사용합니다. | 좌표를 먼저 통일한 후 포함 여부 판단 |
| 머리글, 바닥글 | 비즈니스 룰별로 별도 분류 | 하단 텍스트를 모두 삭제하지 마세요 |
실제 논문도 다음과 같은 구조를 가질 수 있습니다. 중앙에 교차 열 그림을 삽입하고 그림 아래에 이중 열을 다시 시작합니다. 이때 페이지를 먼저 상단과 하단으로 나눈 후 별도로 정렬해야 합니다. 이 문서에 있는 일회성 세 개의 파티션 그룹으로는 충분하지 않습니다. 여기서 읽는 방향은 중국어 세로 레이아웃, 오른쪽에서 왼쪽 텍스트, 복잡한 여백에 적용되어서는 안 됩니다.
🎯 어떤 방법이 당신에게 적합합니까?
만약 당신이…
- 규칙 처리가 필요한 단일 열 또는 이중 열 페이지만: 먼저
sort를 켜고 끄는 결과를 비교한 다음 파티션 규칙이 필요한지 여부를 결정합니다. - 제목, 그림, 각주가 여러 장으로 구성된 문서를 처리합니다: 페이지를 섹션별로 나누고, 여러 장의 내용에 대한 예외 목록을 설정합니다.
- 번역물을 다른 사람에게 전달해야 합니다: 좌표와 페이지 번호를 보관하고 수락 목록에 따라 하나씩 확인합니다. 단순히 작업 중에 오류가 있는지 확인하지 마십시오.
- 스크립트를 직접 유지하고 싶지 않음: 기성 문서 번역 도구를 직접 사용하고 동일한 순차적 체크리스트 세트로 번역을 확인할 수 있습니다.
OmniDoc 번역과정을 받아보는 방법
자체 제작 스크립트의 가치는 승인 규칙을 명확하게 작성하는 데 있습니다. 기성 번역 도구의 가치는 파일과 번역 간의 운영 링크를 줄이는 데 있습니다. 둘 사이에는 갈등이 없습니다. OmniDoc(제품 포털)는 문서 번역 포털을 제공하며, 공식 홈페이지에서도 OCR, 용어집, 이중언어 비교 등의 기능을 소개하고 있다. 업로드 권한이 있는 둔감화 논문을 선택하고 동일한 순차 체크리스트를 사용하여 번역을 확인할 수 있습니다.
다음 항목을 중점적으로 확인하세요.
- 교차 컬럼 제목 뒤 첫 번째 문장이 올바르게 연결되어 있는지 여부.
- 그림 캡션이 본문에 포함되어 있습니까?
- 각주 참조가 여전히 올바른 위치에 매핑되는지 여부.
이는 OmniDoc의 내부 알고리즘을 추론하는 것이 아니라 결과물을 평가하는 것입니다. 결과가 요구 사항을 충족하지 못하는 경우 원본 페이지와 오류 부분을 보관하고 먼저 인식, 정렬 또는 번역 과정에 문제가 있는지 확인한 후 수정 방법을 결정하십시오.
❓ 자주 묻는 질문(FAQ)
1. 2열 PDF 연재물, 잘못 인식되나요?
불확실한. 단어는 모두 올바르게 인식될 수 있지만 읽는 순서에 문제가 있는 경우가 많으므로 정렬 및 지역 규칙을 먼저 확인해야 합니다.
2. sort=True는 이중 열 순서 문제를 직접 해결할 수 있나요?
일반화할 수는 없습니다. sort의 처리는 출력 유형 및 버전에 따라 다르며 레이아웃 이해자가 아니며 모든 문서의 읽기 순서 복원을 약속할 수 없습니다. 먼저 규칙 페이지를 시도해 볼 수 있으며, 교차 열 콘텐츠가 있는 페이지의 지역 관계도 확인해야 합니다.
3. 왜 전체 페이지를 긴 문자열로 압축할 수 없나요?
좌표와 영역 정보가 손실되면 후속 번역에서 잘못된 컨텍스트가 발생하며 번역 모델을 변경해도 이를 해결하지 못할 수 있습니다.
4. 예시의 80포인트와 300포인트를 다른 PDF에서도 바로 사용할 수 있나요?
할 수 없습니다. 이는 이 복합 페이지에 대한 설정일 뿐입니다. 페이지 크기나 열 너비가 변경되면 규칙 버전을 페이지별로 별도로 확인하고 기록해야 합니다.
📝 요약
2단 PDF로 주문한 경우 좌표와 소스 페이지를 먼저 보관한 후 지역 규칙에 따라 처리하고 승인 체크리스트에 따라 항목별로 확인해야 합니다. 자체 제작 스크립트는 규칙을 명확하게 작성하는 데 적합하고, 기성 도구는 작업 링크를 줄이는 데 적합합니다. 두 개를 함께 사용할 수 있습니다.


