PDFからテキストに変換する

PDFからテキストに変換する

英語の参考書があって、左側のページが日本語、右側のページが英語になっていた。それをPDF化したので、テキスト化してエクセルにしたい。

 

こんな感じの参考書を、

 

f:id:yuusukemiyazaki:20210321185826p:plain

 

こんな感じのエクセルにしたい。補足系はいらないし、概要とか不要。最終的に、参考書から、自分だけの単語帳を作りたい感じだ。

 

f:id:yuusukemiyazaki:20210321190032p:plain

最初に、1冊のPDFを、1ページ単位に分割した。ページ数は、200ページぐらいだったので、%03dをつけた。

 

 pdfseparate input.pdf output-%03d.pdf

 

ちなみに、参考書をPDF化するのは、snapscanを使用しているのだが、OCR機能は。あまり役に立たなそう。。。

 

次に、PDFを画像に変換する。画像に変換する際に、不要な部分は、削除している。pdftoppmのオプションを使用して、-x -y -W -Hで切り抜いている。

 

pdftoppm -png -x 0 -y 275 -W 800 -H 750 input.pdf  output.png

 

次に、画像から文字に変換する。変換するソフトは、googleが開発したらしいTesseract OCRを使用した。

 

こちらのサイトが参考になると思う。

tech.mof-mof.co.jp

 

左側のページが日本語で、右側のページが英語なので、ファイル名から左か右を判断して、日本語か英語で変換している。

 

英語は、

tesseract input.pdf  output

日本語は、

tesseract input.pdf  output -l jpn

 

ページ番号の判断は、bashでしていて、${変数名:-1}とすると、最後の文字を取り出してくれるらしい。

 

FILENAME=${filepath%.png}
END_CHAR=${FILENAME: -1}
if [ "1" = $END_CHAR ];then
     tesseract $filepath ${FILENAME} -l jpn
fi

if [ "2" = $END_CHAR ];then
    tesseract $filepath ${FILENAME}
fi

これで、全部のページがテキスト化された。次は、1つのcsvファイルにする。csvにするのは、pythonでやってみた。

 

流れを説明すると、

 

左のページを読み込み。

右のページを読み込み。

左の1行をwrite、右の1行をwriteをページ文繰り返し。

という感じで実行している。

 

あとは、結果を見ると、不要な文字っぽいのが出てきたので、なんとなかく取り出していく。例えば、

 

  • □ は、結構あるけど、不要っぽい。
  • 日本語のページにある。英語は、不要っぽい。
  • 1行の最後にある。一は不要っぽい。
  • 英語のページにある。先頭の数字は不要っぽい。
  • 英語のページにある。@以降の英語は不要っぽい。

 

まぁ、テキスト化した結果をみて、不要っぽいなぁと思う部分を適当に削除するように、プログラム化していった感じだ。

 

テキスト化は、できたけど、参考書を手打ちで入力するより、簡単かどうかは、微妙なきがする。AIとか使えば、もっと簡単にできるかも。。。。

 

使ったスクリプトpythonのコードは、以下においてある。

 

github.com