언어 Language/파이썬 Python

PDF를 텍스트로 바꿔주는 pdfminer.six, pypdf2, pdfplumber 비교해보기

Tap to restart 2022. 6. 19. 09:00

여기 2030년 자율주행 서비스 일상화, 미래 모빌리티 선도국가 도약란 국토교통부의 보도자료가 있다. 보도자료는 보통 PDF와 HWP 파일로 공개된다. 이 중 PDF를 텍스트로 변경해보고 싶다.

 

220609(석간)_강남에서_자율주행_택시_달린다(첨단자동차과).pdf
0.41MB

많이 쓰는 것 중심으로 테스트를 해봤다.

pypdf2, pdfminer.six, pdfplumber 3개다.

 

위 pdf 중 두 번째 쪽은 아래와 같다. 아래 PDF를 텍스트로 변경해봤다.

출처: 국토교통부 보도자료

 

 

 

pypdf2

 

2쪽을 하고 싶었으니 아래처럼 index는 1이 된다.

from PyPDF2 import PdfReader

FILE_PATH = "220609(석간)_강남에서_자율주행_택시_달린다(첨단자동차과).pdf"
INDEX_OF_PAGE = 1


def text_to_txt_file(text, file_name):
    with open(file_name, "w") as f:
        f.write(text)


def pdf_to_text_by_pypdf2():
    reader = PdfReader(FILE_PATH)
    page = reader.pages[INDEX_OF_PAGE]
    text = page.extract_text()
    text_to_txt_file(text, "text_by_pypdf2.txt")


if __name__ == '__main__':
    pdf_to_text_by_pypdf2()

 

결과 예 - 앞부분 일부

 - 2 -

ㅇ 
  현재 고속도로나 자동차전용로에서 자율 주행하는 
레벨3 기술은 상용화 
기술이 확보되어 있으나, 
 레벨 이상의 자율주행
4  기술
 
은 세계 각 국이 
개발 실증 중
·
인 상황이다.

text_by_pypdf2.txt
0.00MB

pdfminer.six

from pdfminer.high_level import extract_text

FILE_PATH = "220609(석간)_강남에서_자율주행_택시_달린다(첨단자동차과).pdf"
INDEX_OF_PAGE = 1


def text_to_txt_file(text, file_name):
    with open(file_name, "w") as f:
        f.write(text)


def pdf_to_text_by_pdfminer_six():
    text = extract_text(pdf_file=FILE_PATH, page_numbers=[INDEX_OF_PAGE])
    text_to_txt_file(text, "text_by_pdfminer_six.txt")


if __name__ == '__main__':
    pdf_to_text_by_pdfminer_six()

결과 앞 부분 일부

ㅇ   현재 고속도로나 자동차전용로에서 자율 주행하는 레벨3 기술은 상용화 

기술이 확보되어 있으나, 레벨 이상의 자율주행

4 

기술 

은 세계 각 국이 

개발 실증 중

·

인 상황이다.

text_by_pdfminer_six.txt
0.00MB

 

pdfplumber

import pdfplumber

FILE_PATH = "220609(석간)_강남에서_자율주행_택시_달린다(첨단자동차과).pdf"
INDEX_OF_PAGE = 1


def text_to_txt_file(text, file_name):
    with open(file_name, "w") as f:
        f.write(text)


def pdf_to_text_by_pdfplumber():
    with pdfplumber.open(FILE_PATH) as pdf:
        page = pdf.pages[INDEX_OF_PAGE]
        text = page.extract_text()
        text_to_txt_file(text, "text_by_pdfplumber.txt")


if __name__ == '__main__':
    pdf_to_text_by_pdfplumber()

 

결과 전체다.

굉장히 깔끔하게 나온다. 쪽수도 원래 대로 맨 아래 쪽에 추출되는 것을 볼 수 있다.

 ㅇ 현재 고속도로나 자동차전용로에서 자율 주행하는 레벨3 기술은 상용화 
기술이 확보되어 있으나, 레벨4 이상의 자율주행 기술은 세계 각 국이 
개발·실증 중인 상황이다.
 ㅇ 우리나라도 대표적 혼잡구간인 서울 강남에서 레벨4 기술 실증에 착수
하고 단계적으로 확대하여,  27년에는 레벨4 완전 자율주행을 상용화
해나간다는 계획이다.
운전자 보조 기능 자율주행 기능
Level 0 Level 1 Level 2 Level 3 Level 4 Level 5
레벨 구분
명칭 無 자율주행 운전자 지원 부분 자동화 조건부 자동화 고도 자동화 완전 자동화
작동구간 내  전 구간 
운전주시 항시 필수 항시 필수 항시 필수 시스템 요청시
불필요 불필요
자동화 구간 - 특정구간 특정구간 특정구간 특정구간 전 구간
차선유지 또는 차선유지 및 혼잡구간 지역(Local) 운전자 없는
예시 사각지대 경고
크루즈 기능 크루즈 기능 주행지원 시스템 무인택시 완전자율주행
□ 자율주행 로보라이드는 AI 모빌리티 플랫폼 업체인 진모빌리티 등과 
협업하여 자율주행과 결합한 미래 모빌리티 서비스를 국민 체감형으로 
제공할 예정이다. 
 ㅇ 시범운행을 거쳐 이르면 8월 국민 누구나 체험할 수 있도록 무상으로 
서비스가 공개되며, 모바일 어플을 통해 예약, 차량 호출, 경로 지정 
등을 할 수 있다.
 ㅇ 이번 자율주행 로보라이드 차량은 보행자·대형버스 등이 혼재하는 
도로상황에서 스스로 차선변경, 좌·우회전, 유턴 등이 가능하다.
- 2 -

text_by_pdfplumber.txt
0.00MB

 

일단 기본 제공되는 높은 수준의 텍스트 추출 함수만 비교해봤을 때는 pdfplumber가 가장 깔끔하게 나왔다.