PDF에서 텍스트를 추출하는 방법? [닫은]


152

PDF에서 텍스트와 이미지를 추출하기 위해 라이브러리 / API를 추천 할 수 있습니까? 문서의 미리 알려진 영역에 포함 된 텍스트를 얻을 수 있어야합니다. 따라서 API는 페이지의 각 요소에 대한 위치 정보를 제공해야합니다.

해당 데이터를 형식 xml또는 json형식 으로 출력하고 싶습니다 . 우리는 현재 꽤 좋은 것처럼 보이지만 다른 사람들의 경험과 제안을 듣고 싶은 PdfTextStream 을 보고 있습니다.

프로그래밍 방식으로 pdf에서 텍스트를 추출하는 대안 (상업적 또는 무료)이 있습니까?



1
정말 간단한 것을 원한다면 (위치 정보 없음)이 펄 정규 표현식으로 충분합니다 : /^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg. PDF의 모든 일반 텍스트를 나타내는 Tj / TJ 연산자 만 찾습니다.
— Alex R

1
TomRoush PdfBox 라이브러리를 사용 하면 안드로이드에서 잘 작동합니다
— FaisalAhmed

답변:


113

가져와야 할 데이터 테이블이 포함 된 400 페이지 pdf 파일이 제공되었습니다. 운 좋게도 이미지가 없습니다. Ghostscript 가 나를 위해 일했습니다.

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

출력 파일은 헤더 등으로 페이지로 분할되었지만 빈 줄 등을 제거하고 30,000 개의 레코드를 모두 빠는 앱을 쉽게 작성할 수있었습니다. -dSIMPLE그리고 -dCOMPLEX이 경우에 차이 않았다.


37
linux 및 cygwin에서 명령은 gs대신에 사용 gswin64c됩니다. 완벽하게 작동합니다. 특허받은 유료 쓰레기가 없습니다. 그냥 작동합니다.
— Jannes

4
네, 잘 작동합니다! 이제 내 pdf 파일에 "grep"을 불명확하게 사용할 수 있습니다. 내가 읽을 수있는 것보다 더 잘 잡을 수 있기 때문에 승리입니다! (:-) 공감.
— David Elson

1
내가 가진 유일한 문제는 포함 된 '오래된'글꼴이있는 pdf에서 사용하는 것입니다. 로컬에서 생성 된 PDF에는 완벽하게 작동하지만 모호한 소스에서는 더 어렵습니다. 그렇지 않으면 훌륭한 스크립틀릿입니다.
— Jon M

무엇을 -sDEVICE=txtwrite합니까? 내가 읽은 후 많은 이해하지 않는 방법을 사용하여 고스트 스크립트로 | 출력 장치 선택
— Ooker

텍스트 파일로 저장하는 대신 stdout 출력의 경우을 사용하십시오 gswin64c -sDEVICE=txtwrite -o- input.pdf. 출처 (나에 의해 약간 변경됨) : gist.github.com/drmohundro/560d72ed06baaf16f191ee8be34526ac
— LuH

33

나는 그것을 알고 오늘부터 다음 PDF 파일에서 텍스트 추출을위한 가장 좋은 방법이 있다 TET, 텍스트 추출 툴킷 . TET은 PDFlib.com 제품군의 일부입니다.

PDFlib.com은 Thomas Merz의 회사입니다. 그의 이름을 모르는 경우 : Thomas Merz는 "PostScript and PDF Bible"의 저자입니다.

TET의 첫 번째 화신은 도서관 입니다. 그것은 페이지의 모든 요소에 대한 위치 정보를 포함하여 Budda006이 원했던 모든 것을 할 수 있습니다. 아, 그리고 이미지를 추출 할 수도 있습니다. 조각으로 조각난 이미지를 재결합합니다.

pdflib.com은이 기술의 또 다른 화신 인 Acrobat 용 TET 플러그인을 제공 합니다. 그리고 세 번째 화신은 PDFlib TET iFilter 입니다. 사용자 데스크탑을위한 독립형 도구입니다. 이 두 가지 모두 비 상업용 목적으로 무료로 사용할 수 있습니다 (맥주 에서처럼).

그리고 정말 강력합니다. Adobe 자체 텍스트 추출보다 훨씬 좋습니다. 다른 도구 (Adobe 포함)가 쓰레기를 뱉어내는 텍스트를 추출했습니다.

방금 데스크톱 독립형 도구를 테스트했으며 웹 페이지에서 말하는 내용이 사실입니다. 매우 좋은 명령 줄이 있습니다. 이 도구가 처리 한 "문제가있는"PDF 테스트 파일 중 일부가 만족스럽게 처리되었습니다.

이제부터는 모든 정교하고 까다로운 PDF 텍스트 추출 요구 사항에 대한 권장 사항이 될 것입니다.

TET은 정말 대단합니다. 테이블을 감지합니다. 테이블 내부에서 여러 열에 걸쳐있는 셀을 식별합니다. 각 테이블 셀의 테이블 행과 내용을 개별적으로 식별합니다. 하이픈을 매우 잘 처리합니다. 하이픈을 제거하고 완전한 단어를 복원합니다. 비 ASCII 언어 (CJK, 아랍어 및 히브리어 포함)를 지원합니다. 합자를 만나면 원래 문자가 복원됩니다.

시도 해봐.


32
평가판이 없으며 440 달러는 "시도해주세요".
— Rok Strniša


이 서비스는 API를 통해 제공됩니까?
— bart

1
나는 그것을 테스트했지만 열을 인식하지 못합니다. 영어 타블로이드 첫 페이지를 스캔했습니다. 텍스트는 종이에 3 개의 열로 나뉘어졌지만이 플러그인은 문장을 혼합하여 혼란스럽게 보이게합니다. 무료로 제공되는 고스트 스크립트는 정확히 동일한 출력을 가졌습니다.
— NoWhereToBeSen2012 년

1
@RedHotScalability : 또한 BTW, TET 은 올바른 매개 변수와 함께 사용하면 열을 인식합니다. 그러나 야심 찬 JS 스크립터가 문서를 읽고 방법을 익히기 위해 연습으로 남겨 두었습니다.
— Kurt Pfeifle

29

Linux 및 Windows에서 모두 사용할 수있는 효율적인 명령 줄 도구 인 오픈 소스이며 무료로 제공됩니다. 간단히 pdftotext라고합니다. 이 도구는 xpdf 라이브러리의 일부입니다.

http://en.wikipedia.org/wiki/Pdftotext


4
참고 사항 : -layout스위치를 사용하여 테이블을 보존하고 잘 작동합니다.
— sebastian


12

여기 내 제안이 있습니다. PDF에서 텍스트를 추출하려면 pdf 파일을 Google 문서로 가져온 다음 .html, .odf, .rtf, .txt 등과 같은보다 친숙한 형식으로 내보낼 수 있습니다.이 모든 것을 Drive API를 사용하여 . 무료이며 견고합니다. 보세요:

https://developers.google.com/drive/v2/reference/files/insert https://developers.google.com/drive/v2/reference/files/get

나머지 API이므로 모든 프로그래밍 언어와 호환됩니다. 내가 aboove에 게시 한 링크에는 Java, .NET, Python, PHP, Ruby 등의 많은 언어에 대한 실제 예제가 있습니다.

도움이 되길 바랍니다.


2
나는 그 옵션을 사용했지만 권장하지 않습니다. Google의 PDF 텍스트 추출은 많은 대안 (영어 이외의 경우)만큼 좋지 않으며 매우 빠릅니다.
— Björn Lindqvist

10

PdfTextStream (당신이보고 있다고 말함 )은 이제 단일 스레드 응용 프로그램에서 무료 입니다. 제 생각에는 그 품질이 다른 라이브러리보다 훨씬 뛰어납니다 (예 : 펑키 임베디드 글꼴 등).

또는 오픈 소스 인 Apache PDFBox를 살펴보아야 합니다.


PdfTextStream은 안드로이드에서 지원되지 않습니다. 이와 같은 좋은 라이브러리가 안드로이드에 있습니까?
— FaisalAhmed

@FaisalAhmed PDFBox는 어떻습니까?
— Renaud

예 PdfBox는 안드로이드에서도 지원되지 않습니다 .... PdfTextStream과 PdfBox는 모두 안드로이드에서 지원되지 않는 awt 부분을 사용합니다
— FaisalAhmed

나는 안드로이드에 좋은 작품이 라이브러리 사용하고 github.com/TomRoush/PdfBox-Android
— FaisalAhmed


6

여기 주석 중 하나는 Windows에서 gs를 사용했습니다. Linux / OSX에서도 다음과 같은 구문으로 성공했습니다.

gs \
 -q \
 -dNODISPLAY \
 -dSAFER \
 -dDELAYBIND \
 -dWRITESYSTEMDICT \
 -dSIMPLE \
 -f ps2ascii.ps \
 "${input}" \
 -dQUIET \
 -c quit

후자는 줄 당 1 문자를 출력하기 때문에 dSIMPLE대신에 사용 했습니다 dCOMPLEX.


5

질문은 특히 PDF 에서 데이터를 XML 로 가져 오는 대체 도구에 대한 것이므로 정확하게 수행 할 수있는 상용 도구 "ByteScout PDF Extractor SDK" 를 살펴 보는 것이 좋습니다 . 위치 데이터 (x, y) 및 글꼴 정보 :

소스 PDF의 텍스트 :

Products | Units | Price 

출력 XML :

 <row>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="212" y="126" width="47" height="11">Products</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="428" y="126" width="27" height="11">Units</text> 
  </column>
 <column>
  <text fontName="Arial" fontSize="11.0" fontStyle="Bold" x="503" y="126" width="26" height="11">Price</text> 
  </column>
</row>

추신 : 또한 텍스트를 테이블 기반 구조로 나눕니다.

공개 : ByteScout에서 일합니다.


3

현재 "단순한"도구 목록 내에서 생각할 수있는 가장 좋은 방법은 Ghostscript (현재 버전은 v.8.71 임)와 PostScript 유틸리티 프로그램 ps2ascii.ps입니다. 고스트 스크립트는이를 lib서브 디렉토리에 제공합니다. 이것을 시도하십시오 (Windows) :

gswin32c.exe ^
   -q ^
   -sFONTPATH=c:/windows/fonts ^
   -dNODISPLAY ^
   -dSAFER ^
   -dDELAYBIND ^
   -dWRITESYSTEMDICT ^
   -dCOMPLEX ^
   -f ps2ascii.ps ^
   -dFirstPage=3 ^
   -dLastPage=7 ^
   input.pdf ^
   -dQUIET ^
   -c quit

이 명령은의 3-7 페이지를 처리합니다 input.pdf. ps2ascii.ps파일 자체 의 주석을 읽고 "이상한"숫자와 추가 정보의 의미를 확인하십시오 ( 문자열, 위치, 너비, 색상, 그림, 사각형, 글꼴 및 페이지 나누기 ... ). "간단한"텍스트 출력을 얻으려면 -dCOMPLEX부분을로 바꿉니다 -dSIMPLE.


2
짐작 하시겠지만 ASCII 테스트 만 출력합니다. 무료이지만 영어 이외의 언어로 사용하려는 소프트웨어에는 적합하지 않습니다.
— userx

3
@userx : 당신이 짐작할 수 있듯이, 이것은 자유 소프트웨어입니다. 그러므로 소스 코드를 사용할 수 있습니다. 비 ASCII 지원 연장 가능
— Kurt Pfeifle

@userx : 오늘 저는 pdflib.com에서 텍스트 추출 툴킷 인 'TET'을 발견했습니다. 내 다른 답변을 참조하십시오.
— 커트 파이 플

Ghostscript 9.07의 ps2ascii 는 OpenBSD 시스템에서 훌륭하게 작동했습니다. 방금 526 페이지 PDF를 일반 텍스트로 변환했습니다. 이제 노트의 텍스트를 쉽게 grep하고 추출 할 수 있습니다. 간단한 명령을 사용했습니다 ps2ascii book.pdf notes.txt. 문서가 주로 ASCII라면 운이 좋을 것입니다.
— 클린트 Pachl

3

나는이 주제가 상당히 오래되었다는 것을 알고 있지만, 이러한 요구는 여전히 살아있다. 많은 문서, 포럼 및 스크립트를 읽고 압축 및 압축되지 않은 pdf를 지원하는 새로운 고급 문서를 작성합니다.

https://gist.github.com/smalot/6183152

보안상의 이유로 명령 행이 금지되는 경우가 있습니다. 따라서 네이티브 PHP 클래스는 많은 요구를 충족시킬 수 있습니다.

그것이 영원히 도움이되기를 바랍니다





0

매킨토시 시스템에서 "Adobe Reader"가 상당히 잘 작동한다는 것을 알았습니다. 바탕 화면에 "Adobe Reader.app"를 가리키는 별칭을 만들었습니다. 별칭에 pdf 파일을 놓기 만하면 Adobe Reader에서 활성 문서가되고 파일 메뉴에서 "텍스트로 저장 ..."을 선택하고 이름과 저장 위치를 ​​지정하고 "저장"을 클릭하면 완료됩니다.


5
OP는 프로그래밍 방식으로 pdf에서 텍스트 를 추출 하는 솔루션을 찾았습니다 . 귀하의 답변은 수동 루틴을 제안합니다.
— mkl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.