OCR
작업흐름 1Data Science Toolkit을 통해 원하는 대부분의 경우 데이터를 획득할 수 있다. OCR을 통해 데이터를 추출하는 경우 자동차 조립라인처럼 다양한 프로그래밍 도구를 컨베이어에 태워 흘리는 과정을 거치게 된다.
unpaper를 많이 사용하고 있으며, 스캔당시에 검은 얼룩을 제거하거 하거나, 배경과 출력 텍스트를 정렬하고 기울어진 텍스트를 곧게 펴는 작업 등이 포함된다. OCR 엔진은 .ppm
(픽스맵 파일형식, pixmap format)만 지원하기 때문에 이미지를 .ppm
파일 형식으로 변환한다.
.pdf
파일에서 텍스트 추출 2 3광학문자인식(OCR) 기술을 통한 텍스트 추출 과정 이해를 바탕으로 .pdf
파일에서 데이터를 추출하고, .pdf
파일에서 추출된 데이터를 정제하는 기법을 살펴본다. .pdf
파일에서 데이터를 추출하는 작업은 흔한 데이터 랭글링(wrangling, 정제작업)으로 다음 세가지 범주로 설명가능하다.
.pdf
파일에서 텍스트 추출.pdf
파일에서 표(Table) 추출.pdf
파일에서 텍스트가 아닌 스캔, 이미지 추출마지막, .pdf
파일 혹은 고품질 이미지나 사진에서 텍스트를 추출하는 과정은 광학문자인식(Optical character recognition, OCR)과 밀접한 관련이 있다.
.pdf
파일을 텍스트로 변환하는 도구libpoppler
기반.pdf
파일로부터 표 추출 작업 4 5.pdf
파일로부터 표를 추출하는 경우 tabulizer 팩키지를 활용하는 것도 가능하다. tabulizer
팩키지는 tabula-java를 기반으로 하고 있어, tabulizerjars
파일도 함께 설치한다.
tabulizer
팩키지는 tabula-java를 기반으로 하고 있어 자바가 꼭 필요하다. 이를 위해서 다양한 JAVA 버젼이 있는데 오라클 자바 대신 openjdk
를 설치하는 것이 윈도우도 그렇고 맥도 그렇고 정신건강에 좋은 듯 싶다.
먼저, 맥에 오라클 자바가 설치되어 있는 경우 오라클 자바를 제거한다. 자세한 내용은 How do I uninstall Java on my Mac?을 참조하면 된다.
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java
다음으로 현재 기준(2019년 7월) tabulizer
는 자바 11버전이 필요하다. Java SE 11.0.3 (LTS) 버전을 다운로드 받아 설치한다.
맥운영체제를 사용하는 경우 /usr/libexec/java_home -V
명령어를 사용해서 설치된 자바 버젼을 확인한다.
Matching Java Virtual Machines (1):
11.0.3, x86_64: "Java SE 11.0.3" /Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
더 나아가 사용자 홈디렉토리에서 .bash_profile
에 JAVA_HOME
도 설정한다.
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home"
openjdk
설치 7윈도우즈에 openjdk
를 설치하는 방법은 다음과 같다.
openjdk
버전 11을 다운로드 받아 압축을 푼다. 압축을 풀어 생성된 jdk-11.0.3
버전을 가정하면 동일한 이름의 디렉토리가 생성된다.C:\Program Files
아래 jdk-11.0.3\
압축 푼 전체 디렉토리를 복사하여 붙여넣는다.
C:\Program Files\jdk-11.0.3\
디렉토리가 된다.환경변수
를 편집한다.
Control Pannel
→ System
→ Advanced
→ Environment Variables
Path
에 Java 경로를 넣어준다.
C:\Program Files\jdk-11.0.3\bin
추가JAVA_HOME
을 추가 C:\Program Files\jdk-11.0.3\
자바가 설치되었다면 자바와 R을 연결시켜 주는 rJava
팩키지를 설치한다. 이런 와중에 rJava fails to load #2254 오류가 발생하는 경우 다음 명령어르 쉘에서 실행해 준다. 혹은 rJava
팩키지 dyn.load("/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home/lib/server/libjsig.dylib")
명령어가 도움도 될 수 있다.
R에서 JAVA_HOME
이 설정된 것이 확인되어야 tabulizer
사용이 가능하다. 이를 위해서 다음 명령어로 설정된 JAVA_HOME
을 확인한다. 만약 설정이 되지 않았다면 Sys.setenv()
함수도 사용한다.
[1] ""
tabulizer
팩키지를 설치하게 되면, examples/data.pdf
파일에 유명한 mtcars
, iris
데이터를 PDF 파일에 표로 출력되어 있다. 이를 extract_tables()
함수를 사용해서 원래 데이터를 복원한다.
#1. 환경설정-------------------------------
#library(devtools)
#install_github(c("ropenscilabs/tabulizerjars", "ropenscilabs/tabulizer"), args = "--no-multiarch")
#2. 표추출-------------------------------
library(tabulizer)
# 경로 확인
.libPaths()
[1] "/Library/Frameworks/R.framework/Versions/3.5/Resources/library"
iris
데이터 복원examples/data.pdf
파일 2페이지에 iris
데이터가 표형식으로 찍혀있다. 이를 extract_tables(f, pages = 2, method = "data.frame")
명령어로 추출한다.
List of 4
$ : chr [1:32, 1:10] "mpg" "21.0" "21.0" "22.8" ...
$ : chr [1:7, 1:5] "Sepal.Length" "5.1" "4.9" "4.7" ...
$ : chr [1:7, 1:6] "" "145" "146" "147" ...
$ : chr [1:15, 1] "supp" "VC" "VC" "VC" ...
iris_ocr <- extract_tables(f, pages = 2)
# 3. 데이터프레임 변환--------------------------
library(tidyverse)
iris_ocr[[1]] %>%
as.data.frame()
V1 V2 V3 V4 V5
1 Sepal.Length Sepal.Width Petal.Length Petal.Width Species
2 5.1 3.5 1.4 0.2 setosa
3 4.9 3.0 1.4 0.2 setosa
4 4.7 3.2 1.3 0.2 setosa
5 4.6 3.1 1.5 0.2 setosa
6 5.0 3.6 1.4 0.2 setosa
7 5.4 3.9 1.7 0.4 setosa