언어의 한계상 대부분이 그렇듯 영어는 인식률이 높지만 한글은 아직 발전해야 할 부분이 많다.
1. OCR_SPACE
def ocr_space(filename, overlay=False, api_key='', language='eng'):
payload = {'isOverlayRequired': overlay, 'apikey': api_key, 'language': language, }
with open(filename, 'rb') as f:
r = requests.post('https://api.ocr.space/parse/image', files={filename: f}, data=payload, )
return r.content.decode()
서비스는 웹에서 돌아가고 API를 통해 사용할 수 있다. 간단한 작업은 할 수 있지만 많은 양의 PDF를 처리하거나 큰 파일을 처리하려면 다른 친구를 알아보는 것이 좋다. 얘는 테이블 extract보다 ocr을 통한 문자 인식이기 때문에 아름답게 뽑긴 어렵다.
2. TABLUA
import tabula
def tabula_py(filename, options=''):
df = tabula.convert_into(filename, "output.csv", output_format="csv")
tabula-java가 원형이다. 여러 옵션을 통해 입출력 파일을 설정해 줄 수 있는데 특징 중 하나가 data frame으로 넘어온다는 점이다. 그냥 json으로 받을 경우 표 형식으로 다시 가공해주어야 한다는 단점이 있지만 얘는 그렇지 않다. 아직 국내에서는 많은 사람들이 사용하지 않는 듯 하다.
3. CAMELOT
import camelot
def camelot_py(filename, status):
tables = camelot.read_pdf(filename, process_background=status)
# return tables
# df = tables[1].df
# df.to_csv(filename+'.csv')
camelot.plot(tables[0], kind='text')
plt.show()
가장 많이 사용하는 라이브러리다. 다양한 옵션을 가지고 있고 손쉽게 그래프로 그릴 수 있어서 시각화가 편하다.
4. PDFplumber
import pdfplumber
def plum_daldal(filename):
with pdfplumber.open(filename) as pdf:
page = pdf.pages[0]
print(page.extract_table())
옵션도 무지 많고 지원하는 기능도 많은데 visual debugging이 되는 점이 장점이다. git의 공지를 읽어서 숙지하는 것이 좋아보인다.
https://github.com/jsvine/pdfplumber
5. PDFtables
1번과 마찬가지로 API를 사용한다. 비슷한 느낌이므로 PASS
그렇다면 여기서 드는 의문점이 있다. 라이브러리들은 어떻게 표를 구분해 내는 것일까? 이건 깜찍하게도 camelot이 알려주고 있다. 방법은 두 가지이다.
(1) Stream
일반적인 표를 만들어보자.
컬럼1 | 컬럼2 |
내용1 | 내용1 |
내용2 | 내용2 |
표는 일정한 공백을 가지고 있고 horizontal edge라고 부른다. 이 부분을 분석하며 열과 행을 찾아내는 것이다.
(2) Lattice
위의 표를 다시 한 번 보자. 일정한 line을 가지고 있다. pdf를 이미지로 변환한 다음 수평, 수직 선분을 찾아내 이들 선분의 교차점을 찾아낸다. 이 좌표를 가지고 다시 표를 그리고 단어는 좌표에 따라 매핑시키는 것이다. lattice의 문제점은 은 선분을 찾아내지 못하면 표를 인식할 수 없다는 것이다.
'Python > Default' 카테고리의 다른 글
NASA Dataset을 이용하여 predictive - maintenance 하기 전 데이터 살펴보기 (0) | 2019.07.05 |
---|---|
Python 교육 1일차 (0) | 2019.05.30 |
Pyspc를 사용하여 SPC Graph 그리기 (0) | 2019.05.10 |
CentOS7에서 Oracle 연동 오류 (0) | 2019.04.16 |
CentOS 환경에 Python3 설치 후 나타나는 에러 수정 (0) | 2019.04.16 |