2013-02-20 4 views
3

pdftotext를 사용하여 PDF에서 텍스트를 추출했습니다. Ghostscript로이 작업을 수행했습니다. 최근 유틸리티 공급 업체가 PDF를 변경하여 일부는이 방법으로 추출하지 못합니다. 특히, 나는 만기일과 총 기한을 놓치고있다. 독자가 PDF를 열면 누락 된 텍스트를 강조 표시하고 복사하여 외부 편집기에 붙여 넣을 수 있습니다. Acrobat Pro에서 열고보기 (보기 -> 표시/숨기기 -> 탐색 패널 -> 내용)의 내용을 볼 때 필요한 텍스트가 있습니다. 수동으로 복사하여 붙여 넣지 않고 어떻게 제거 할 수 있습니까? (이것은 수천 개의 PDF에서이 작업을 수행 할 것이기 때문에 선택 사항이 아닙니다.)PDF에서 텍스트 내용 추출

여기 제가 다루고있는 예입니다. 난 당신이 (Google 드라이브에서 호스팅) 파일에 대한 링크를 수행 할 때, 당신이 선택할 수있는 것이 게시 한 후 발견 및 대부분의 텍스트를 복사 :

link to PDF

편집 : 나는 모든 중요한 데이터를 삭제 한 페이지,하지만 내가 누락 된 것들. 파일을 다운로드 할 때 PDF 판독기에서 누락 된 텍스트를 선택할 수 있습니다.

답변

1

나는 gitscript의 최신 미발매 버전을 git에서 가져 와서 빌드함으로써이 문제를 해결했다. 이제 txtwrite 장치는 필자에게 필요한 것을 정확하게 제공합니다. 그의 답변에 대한 chrisl과 올바른 방향으로 나를 안내하는 의견에 감사드립니다.

+0

안녕하세요, pdf에서 이미지를 제거하여 pdf가 텍스트로만 구성되도록 시도해 보셨나요? 나는 그것을 할 길을 찾고있다. ghostScript 또는 다른 cli 도구를 사용하는 해결책이 있습니까? 친절하게 도와주세요. – codin

2

Ghostscript의 최신 릴리스에는 시도해 볼 가치가있는 txtwrite 장치가 있습니다.

+0

나는 txtwrite 장치를 시험해 보았고 나에게 pdftotext와 같은 결과를 주었다. 아직 만기일과 계좌의 누락이 여전히있다. –

+0

정확히 무엇이 누락 되었습니까? 나는 그것이 "2012 년 11 월 12 일 - 12 월 12 일"이라고 가정했지만, txtwrite의 결과에서 보았습니다. – chrisl

+0

오른쪽 상단에 "Please Pay By Dec 28, 2012"및 "Total Due $ 1,839.42" –

0

데이터를 추출하는 데 VERY HACKY 방법이 있지만 8.51 또는 8.62와 같은 이전 버전의 고스트 스크립트에서만 작동합니다. 이전 버전의 ghostscript에서 PDF 명령은 /lib/pdf_ops.ps에 정의되어 있습니다. 새 버전은 다른 작업을 수행합니다.

버전 8.62의 테스트 버전을 사용할 수 있습니다.

http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/8.62/gs862w32.exe/download 

당신이 후에있는 텍스트는 각 정의의 시작 부분에 dup ==을 추가하여 /Tj {} def/TJ {} def를 사용하여 인쇄됩니다. (이것은 좀더 정교해질 수 있습니다.) 폰트 경고 메시지에 대해 걱정할 필요도 없었지만, 데이터가 파일에 쓰여지는 경우 필터링되지 않았습니다.

커닝이 완료되고 있기 때문에 일부 단어는 조각과 개별 문자로 나뉩니다. 시간이 주어진다면, 이것도 걸러 낼 수 있습니다.

는 pdf_ops.ps

발/TJ
/TJ { dup == 
    0 0 moveto { 
    dup type /stringtype eq { 
     Show 
    } { -1000 div 
     currentfont /ScaleMatrix .knownget { 0 get mul } if 
     0 Vexch rmoveto 
    } ifelse 
    } forall settextposition 
} bdef 

출력

(Help a neighbor within your county each month by contributing to The Salvation) 
(Army's Project SHARE and Georgia Power will match your gift. To help, simply check) 
($1, $2, $5, or $10 on the return portion of this bill. Starting next month, your pledge) 
(amount will be included on your monthly bill.) 
(Our business offices will be closed on December 24 and 25 for Christmas and January) 
(1 for New Year's Day. In case of an emergency, please call us at the number on your) 
(bill 24 hours a day, 7 days a week.) 
(PLEASE KEEP THIS PORTION FOR YOUR RECORDS.) 
(PLEASE RETURN THIS PORTION WITH YOUR PAYMENT, MAKING SURE THE RETURN ADDRESS SHOWS IN THE ENVELOPE WINDOW.) 
(Account Number) 
(Mail To:) 
변성

bdef pdf_ops.ps /TJ {DUP == 0 0의 moveTo 쇼 settextposition }에서 TJ/수정

포스트 스크립트 재미 아닌가요?

+0

ghostscript를 실행하려고하면 "gs_init.ps 초기화 파일을 찾을 수 없습니다"라는 메시지가 나타납니다. 8.62 사용. 또한 내 pdf_ops.ps는 bin \이 아닌 lib \에 있습니다. 나는 lib \에 그대로 있어야한다고 생각했다. –

+0

및 lib \에 gs_init.ps가 있습니다. –

+0

매우 이상한 gs_init.ps는 pdf_ops.ps에 도달하기 전에 읽히므로 관련없는 문제 일 수 있습니다. 수정없이 GS를 실행하고 오류가 사라지는지 확인하십시오. gs_init.ps는'GPL Ghostscript 8.62' (2008-02-29) 이전에 읽혀집니다. 그 메시지를 보시겠습니까? pdf_ops.ps는'이 소프트웨어는 보증이 제공되지 않습니다 : 자세한 내용은 PUBLIC 파일을 참조하십시오 .' 후에 읽습니다.이 메시지 전에 오류가 발생하면 확실히 다른 일이 발생합니다. 예, 디렉터는 \ lib가 아니고 \ bin이어야하며 파일은 \ lib에 있어야합니다. –