PDF 문서의 두 버전 간 텍스트를 비교하려고 합니다. 나는 diff를 사용하고 생성하고 pdftotext
일부 대체 항목의 형식을 지정할 수 있었습니다.perl
colordiff
이렇게 하면 많은 차이점이 출력되지만 그 중 많은 부분이 동일한 단락이지만 시작 부분에 작은 변경이 있어 나머지 단락의 줄 바꿈이 달라집니다.
문서를 효율적으로 비교하는 방법에 대한 제안이 있는 사람이 있습니까?
편집: pdf는 디지털 방식으로 생성되며 텍스트 정보를 포함하며, pdf는 스캔된 이미지가 아닙니다.
답변1
pdftotext
아직 이 문제를 해결하기에는 충분하지 않은 것 같습니다 .
실제 OCR 소프트웨어(문서의 텍스트 정보를 준비하지 않음)가 어떻게 수행되는지 확인하세요.
- 원본 이미지의 각 N×N 블록에서 가장 어두운 픽셀을 유지하여 "축소"가 수행되는 축소된 버전의 문서를 만듭니다.
- 공백으로 구분된 가장 큰 사각형을 찾아 문단으로 해석하세요.
- 이러한 단락의 순서에 대해 지식에 근거한 추측을 하십시오(예를 들어 페이지 상단에 페이지 너비의 80% 이상을 차지하는 사각형이 있는 경우 그 아래에는 너비와 높이가 거의 같은 두 개의 블록이 있습니다. 즉, 첫 번째 블록은 제목이고 그 다음 텍스트 본문이며 왼쪽 블록에서 시작하여 오른쪽으로 계속됩니다.)
- 각 사각형에 대해 더 작은 블록으로 유사한 작업을 수행하여 텍스트 줄을 찾습니다.
- 단어로 분할하고 필요한 경우 문자로 분할하고 문장에 나타날 가능성이 있는 내부 모델과 해당 문자 및 단어와 저장된 참조 문자의 유사성을 기반으로 해당 픽셀을 텍스트로 변환합니다.
물론 3단계가 끝나면 완료됩니다. 그리고 스스로 하는 것도 어렵지 않습니다!
따라서 먼저 `mutool draw -r 300 -c grey -o 'rastered_%03d.png'를 사용하여 이미지를 약간 더 높은 해상도(300dpi)로 변환합니다(기본적으로 위의 0단계, 문서를 스캔합니다).
그런 다음 각 결과에 대해 rastered_${pagenumber}.png
축소(1단계) 및 단락 분할(2단계)이 수행됩니다. 그런 다음 간단히 왼쪽 상단을 기준으로 정렬할 수도 있습니다(y가 먼저, 그 다음이 x)(3단계).
세 번째 단계 후에는 사각형의 좌표를 으로 사용하면 됩니다 pdftotext -x ${top_left_x} -y ${top_left_y} -W ${width} -H ${height}
. 그런 다음 생성된 텍스트를 올바른 순서로 연결합니다. :)