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.