2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

スキャンしたPDFのテキスト起こし(OCR)を大量に一気にやってみた

Last updated at Posted at 2021-12-17

目的

本プログラムは複数ディレクトリに保存された各PDFファイルをOCRし、.txt形式で保存することを目的としています。
テキストを取り込んでNLPにかけたいときなど、Rで一気にやれると楽なので作ってみました。

こんな感じのディレクトリ構造を想定しています

こんな感じで整理してください

  カレントディレクトリ
  |--ディレクトリA
  |    |--PDFファイルa1
  |    |--PDFファイルa2
  |    |--PDFファイルa3
  |
  |--ディレクトリB
  |    |--PDFファイルb1
  |    |--PDFファイルb2
  |    |--PDFファイルb3
  |
  |--ディレクトリC
       |--...

まずはパッケージのインストールなどをします

OCRのパッケージは精度が高めなtesseractを使います。なお、そのままだと日本語を認識しないため、日本語パックを使えるようにします。

install.packages("tesseract")#OCRのパッケージ
install.packages("Rcpp")#tesseractを利用するための依存パッケージ
library(tesseract)
tesseract_download('jpn')#日本語パックをダウンロード

正常に動いているか確認します。

>tesseract_info()
$datapath
[1] "C:\\Users\\XXXXXXX\\AppData\\Local\\tesseract4\\tesseract4\\tessdata/"

$available
[1] "eng" "jpn" "osd"

$version
[1] "4.1.1"

$configs
 [1] "alto"             "ambigs.train"     "api_config"       "bigram"           "box.train"        "box.train.stderr"
 [7] "digits"           "get.images"       "hocr"             "inter"            "kannada"          "linebox"         
[13] "logfile"          "lstm.train"       "lstmbox"          "lstmdebug"        "makebox"          "pdf"             
[19] "quiet"            "rebox"            "strokewidth"      "tsv"              "txt"              "unlv"            
[25] "wordstrbox" 

$availableに"jpn"が含まれていれば日本語パックのインストールは成功です。

ではやっていきましょう

今回はEドライブの'PDFバックアップ'というディレクトリで実行しました。
tesseractの挙動は、

  • PDFの各ページ個別に.pngファイルを生成する
  • .pngファイルを生成後にOCRを実行する

という挙動なので実行後に大量のpngファイルが残ります。なのでfor文の最後にpngファイルを消すスクリプトを書いています。

current_dir <- "E:/PDFバックアップ/"
setwd(current_dir)
pdf_dir <- c(list.files()) #PDFを取得するディレクトリの一覧表を取得

for (j in 1:length(pdf_dir)){
  setwd(paste(current_dir,pdf_dir[j], sep=""))
        for (i in 1:length(pdfdata)){
          write(ocr(pdfdata[i], engine ="jpn"), paste(pdfdata[i],".txt", sep=""))
        }
  png_files <- c(list.files(pattern=".png"))
  file.remove(png_files)
}

参考にさせていただいた投稿

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?