今日は、PyMuPDFというライブラリを利用し、PDFファイルからテキストを抽出します。
PyMuPDFはUnicodeに対応しているので、中国語や日本語の含まれるファイルも問題なく扱うことができます。なお、PyMuPDFを呼び出すときは「import fitz」と書きます。不思議ですが歴史的経緯があるそうです。
import fitz
# PDFファイルを開く
pdffile = "C:/test/sample.pdf"
doc = fitz.open(pdffile)
# テキストファイルに出力する
txtfile = "C:/test/sample.txt"
with open(txtfile, "w", encoding="utf-8") as f:
# ページごとにテキストを抽出してファイルに書き込む
for page in doc:
text = page.get_text("text")
f.write(text)
注意点としては、PDFから抜き出したテキストは、画面上の表示通りの位置に改行が入ります。句読点や段落ごとに改行してくれるわけではないため、出力されたテキストファイルに対する整形作業が必要になります。以下をご覧ください。
上図はネットから拾ってきた特許公報のPDFファイルの一部です。このテキストを上記のコードで抽出すると、以下のような出力が得られます。
一种墨水瓶 技术领域 [0001] 本实用新型涉及一种办公用品,具体地说是一种墨水瓶。 背景技术 [0002] 钢笔是人们普遍使用的书写工具,它因书写起来圆滑而有弹性,相当流畅而受到 很多人的欢迎,但钢笔需及时添加墨水才能保证正常使用,传统的墨水瓶在钢笔吸完墨水 后会在笔筒和笔尖上留有墨水残留,而该处为手握部位,擦试时浪费时间也很难彻底将墨 水擦干净,同时也造成了墨水的浪费,很容易污染衣物或皮肤,难以清洗。 实用新型内容 [0003] 本实用新型的目的在于提供一种墨水瓶,该墨水瓶在瓶口内壁设有带弹簧的清洁 棉,使用时无需进行专门擦拭即可保持笔外壳的清洁。 [0004] 本实用新型解决其技术问题所采取的技术方案是 :一种墨水瓶,其结构包括瓶盖 和瓶体构成的墨水瓶本体,所述的瓶体在瓶口内壁对应两侧分别设置有一卡槽,所述的卡 槽内分别插接一弹簧,所述的弹簧的自由端分别连接清洁棉。 [0005] 本实用新型的有益效果是 :使用时,自两清洁棉之间的缝隙中插入钢笔,由于弹 簧受力压缩,清洁棉向瓶体内壁方向靠拢并紧贴在钢笔的外壳体上,当钢笔吸完墨水后自 瓶体内拔出时,清洁棉即可将钢笔外壳体上残留的墨水擦拭干净,本实用新型无需进行专 门擦拭即可保持笔外壳的清洁,有效减少和避免了墨水残留的污染,省时省力,使用安全方 便,结构简单。
きちんと抽出されていますが、やはりPDF上の表示通り改行されているほか、ブラケットの後にも改行が加えられています。抽出後は、このあたりを整形することになります。
以上のような注意点はありますが、わずか10行ほどのコードでPDFからテキストが抜き出せるのは素晴らしいです。いろんな場面で活躍しそうですね。