PDF는 많은 개별 텍스트 개체로 구성됩니다. 종종 이러한 객체는 문서에 나타나는 순서대로 배치되므로 문서 텍스트를 추출하는 작업은 PDF 스트림에 나타나는 순서대로 텍스트 객체를 읽는 것만 큼 간단합니다.PDF에서 텍스트를 추출하는 알고리즘 (뒤죽박죽으로 재 배열 된 텍스트 레이아웃)
그러나 많은 PDF가 좋지 않습니다.
PDF 사양에서는 텍스트를 PDF 스트림 내에서 정렬 할 필요가 없습니다. PDF의 끝 부분이 스트림의 시작 부분에 있고 중간 부분이 끝나고 시작 부분이 중간에있는 PDF를 보는 것은 드문 일이 아닙니다. 극단적 인 경우 스트림은 순서가없는 텍스트 상자의 뒤범벅입니다.
PDF 스트림에서 개체의 적절한 텍스트 흐름을 결정하기위한 알고리즘은 무엇입니까?
간단한 문서의 경우 텍스트 순서를 지정하는 것이 너무 어렵지 않습니다. 개체를 위에서 아래로, 왼쪽에서 오른쪽으로 순서대로 정렬 한 다음 맨 아래 왼쪽 텍스트 상자에서 텍스트를 추출하여 아래로 작업하십시오. 그러나 문서에는 종종 여러 열, 제목, 부제목, 머리글, 바닥 글, 탭 단락 등이 있습니다. 여러 가지 상황에서 견고한 솔루션이 있습니까?
명확성을 위해 다음은 구현하려고하는 함수 프로토 타입의 예입니다.
def sort_according_to_text_flow(objs, page_width, page_height):
# objs A list of objects where each object is a dict containing:
# x, y The top-left corner position of the text box
# width, height The width and height of the text box
# text A string of the text
# page_width/height Width/height of the page
# returns the list of objects, ordered for natural reading
잠시 동안 왼쪽에서 오른쪽 방향 언어 만 처리한다고 가정 해 봅시다.
나는 단순한 코드가 위쪽 2 열과 아래쪽 2 열을 구분할 수 있다고 생각하지 않는다. 수직으로 읽지 만 넓은 표제 나 표로 인해 방해를 받는다. – usr2564301