1 OCR 작업흐름 1

Data Science Toolkit을 통해 원하는 대부분의 경우 데이터를 획득할 수 있다. OCR을 통해 데이터를 추출하는 경우 자동차 조립라인처럼 다양한 프로그래밍 도구를 컨베이어에 태워 흘리는 과정을 거치게 된다.

  1. 내용물 정제작업
  2. 레이아웃(layout) 이해
  3. 페이지별 레이아웃에 따라, 텍스트 조각을 추출.
  4. 텍스트 조각을 재조합해서 유용한 형태로 변환.

OCR 이미지 처리 과정

unpaper를 많이 사용하고 있으며, 스캔당시에 검은 얼룩을 제거하거 하거나, 배경과 출력 텍스트를 정렬하고 기울어진 텍스트를 곧게 펴는 작업 등이 포함된다. OCR 엔진은 .ppm (픽스맵 파일형식, pixmap format)만 지원하기 때문에 이미지를 .ppm 파일 형식으로 변환한다.

2 .pdf 파일에서 텍스트 추출 2 3

광학문자인식(OCR) 기술을 통한 텍스트 추출 과정 이해를 바탕으로 .pdf 파일에서 데이터를 추출하고, .pdf 파일에서 추출된 데이터를 정제하는 기법을 살펴본다. .pdf 파일에서 데이터를 추출하는 작업은 흔한 데이터 랭글링(wrangling, 정제작업)으로 다음 세가지 범주로 설명가능하다.

  • .pdf 파일에서 텍스트 추출
  • .pdf 파일에서 표(Table) 추출
  • .pdf 파일에서 텍스트가 아닌 스캔, 이미지 추출

마지막, .pdf 파일 혹은 고품질 이미지나 사진에서 텍스트를 추출하는 과정은 광학문자인식(Optical character recognition, OCR)과 밀접한 관련이 있다.

2.1 .pdf 파일을 텍스트로 변환하는 도구

2.2 .pdf 파일에서 표를 추출하는 도구

3 .pdf 파일로부터 표 추출 작업 4 5

.pdf 파일로부터 표를 추출하는 경우 tabulizer 팩키지를 활용하는 것도 가능하다. tabulizer 팩키지는 tabula-java를 기반으로 하고 있어, tabulizerjars 파일도 함께 설치한다.

3.1 자바 설치 6

tabulizer 팩키지는 tabula-java를 기반으로 하고 있어 자바가 꼭 필요하다. 이를 위해서 다양한 JAVA 버젼이 있는데 오라클 자바 대신 openjdk를 설치하는 것이 윈도우도 그렇고 맥도 그렇고 정신건강에 좋은 듯 싶다.

먼저, 맥에 오라클 자바가 설치되어 있는 경우 오라클 자바를 제거한다. 자세한 내용은 How do I uninstall Java on my Mac?을 참조하면 된다.

다음으로 현재 기준(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_profileJAVA_HOME도 설정한다.

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home"

3.2 윈도우즈 openjdk 설치 7

윈도우즈에 openjdk를 설치하는 방법은 다음과 같다.

  1. 윈도우용 openjdk 버전 11을 다운로드 받아 압축을 푼다. 압축을 풀어 생성된 jdk-11.0.3 버전을 가정하면 동일한 이름의 디렉토리가 생성된다.
  2. C:\Program Files 아래 jdk-11.0.3\ 압축 푼 전체 디렉토리를 복사하여 붙여넣는다.
    • 탐색기에서 보면 C:\Program Files\jdk-11.0.3\ 디렉토리가 된다.
  3. 제어판에서 “고급 시스템 설정보기”에서 환경변수를 편집한다.
    • Control PannelSystemAdvancedEnvironment Variables
  4. 경로 Path에 Java 경로를 넣어준다.
    • C:\Program Files\jdk-11.0.3\bin 추가
  5. 변수 JAVA_HOME을 추가 C:\Program Files\jdk-11.0.3\

3.3 R에서 JAVA_HOME 설정확인 8

자바가 설치되었다면 자바와 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/Frameworks/R.framework/Versions/3.5/Resources/library"

3.4 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" ...
            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