Python/Utils

파이썬 활용 pdf 파일 내 텍스트 추출 방법 정리(pypdf2, tika)

jimmy_AI 2022. 8. 22. 21:52
반응형

Python pdf text 읽기

파이썬으로 pdf 파일에서 텍스트를 추출해내는 방법에 대하여 다루어보도록 하겠습니다.

 

여기에는 매우 다양한 방법이 있지만 여기서는 간편한 방법 예시 2가지로 pypdf2 모듈과

tika 모듈을 활용한 예제를 살펴보겠습니다.

 

이 두 모듈이 설치되어 있지않다면 먼저 아래 명령어로 사용할 모듈을 설치해주세요.

!pip install pypdf2

!pip install tika

 

아래의 매우 간단한 텍스트 두 줄이 있는 pdf_1.pdf 파일을 예시로 설명하겠습니다.

 

 

pypdf2 모듈 활용 방법

먼저, PdfFileReader를 활용하여 아래의 형식으로

파일 디렉토리와 읽기 모드(rb) 부분을 지정해줍니다.

from PyPDF2 import PdfFileReader

pdf1 = PdfFileReader(open("pdf_1.pdf", 'rb')) # 디렉토리 주의

 

이제 위에서 선언한 변수를 가지고 다음 코드처럼 파싱을 진행해주시면 됩니다.

(n 페이지 부분의 내용을 가져오려면 pages에 대한 인덱스를 n-1로 설정해주세요.)

# 1 페이지의 내용을 가져오는 경우(pages[1], pages[2], ...는 2, 3, ... 페이지 의미)
pdf1.pages[0].extractText().split('\n')

 

위의 코드 실행 결과, 아래처럼 한 줄의 텍스트씩 리스트에 담겨진 결과를 받을 수 있습니다.

['1번 파일입니다 .', '@@@ 1번 파일 내용 @@@']

 

반응형

 

tika 모듈 활용 방법

여기서는 tika 모듈 내의 parser 메소드로 pdf 파일을 읽어오면 되는데,

pypdf2에서와는 달리 input으로 파일의 디렉토리만 지정해주시면 됩니다.

from tika import parser

pdf1 = parser.from_file("pdf_1.pdf") # 디렉토리 주의

 

위에서 읽어들인 변수 내에는 다양한 값들이 딕셔너리와 비슷한 형태로 저장되어 있는데,

이 중 content 인자 내에 읽어들일 텍스트가 들어있습니다.

한 줄의 내용씩 리스트의 원소로 가져오기 위해서는 아래처럼 코드를 작성해주시면 됩니다.

pdf1['content'].strip().split('\n')

 

실행 결과는 다음과 같은데 여러 페이지의 내용이 전부 모아져서 추출된다는 특징이 있으며,

pypdf2를 사용한 경우와 미세한 결과 차이가 있을 수 있습니다.

(해당 예제에서는 첫 줄의 콤마 이전에 공백의 여부가 다릅니다.)

['1번 파일입니다.', '@@@ 1번 파일 내용 @@@']