PDFからテキストに変換する
PDFからテキストに変換する
英語の参考書があって、左側のページが日本語、右側のページが英語になっていた。それをPDF化したので、テキスト化してエクセルにしたい。
こんな感じの参考書を、
こんな感じのエクセルにしたい。補足系はいらないし、概要とか不要。最終的に、参考書から、自分だけの単語帳を作りたい感じだ。
最初に、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を使用した。
こちらのサイトが参考になると思う。
左側のページが日本語で、右側のページが英語なので、ファイル名から左か右を判断して、日本語か英語で変換している。
英語は、
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のコードは、以下においてある。