さり海馬

Thoughts walk away, blog stays.

PDF からのテキスト抽出をいろいろ試してみた

PDF の英文ルールブックを OmegaT で翻訳する際には、まずテキスト抽出(PDF→英文テキストファイルにする)をする必要があります。前回のエントリーでは、その段階でいろいろと問題がありそうなことが分かりました。とりあえず、いろいろなツール(もしくは手法)を使って試してみたのでメモしておきます。

サンプル

市販ルールブックのサンプルとして Earthdawn Third Edition の Preview3 を使ってみました。

追記:ファイルによって(たいていはその PDFファイルを作っている会社やその方針によって)は、以下の評価は大きく異なる場合があります。*1ですから、今回はこのファイルに限っての評価だということをご了承ください。

手法

ざっとググってみて、いくつかのツールを探してみました。とりあえずは Windows XP で使えること、保護ファイルでも出力できる手段があること、を前提とします。

これ以外にも、王道として

  • Acrobat Readerのテキスト書き出し機能

も試してみました。

評価基準

評価の基準として、以下のようなものを挙げてみました。

  • 処理速度:短時間で終わること
  • 手間:できるだけ人手を介さずに変換処理が終わること
  • 後工程:処理後のテキストに手を入れる手間
  • 文字欠落: 画面上にある文字情報を取りこぼさないこと
  • 画面構成: 画面上にある枠、表などの位置ができるだけ原本に近いものになること

結果

手段 処理速度 手間 後工程 文字欠落 画面構成 備考
xdoc2txt × リガチャ対応に抜けがある?
pdftotext × 埋め込み飾り文字の周辺がおかしい
AdobeReader 処理速度に問題があるかも

どれも一長一短。決め手に欠けます。ただ、あえて選ぶなら、×のない AcrobatReader になりそうです。

各論

xdoc2txt

単体では保護ファイルのテキスト抽出はできないが、一緒に配布されているライブラリを使うことで可能になる。

よかったところ:

  • 使いやすくて処理も高速
  • ページ数出力のサプレス機能があり、余計な出力をしなくてすむ
  • 段組もきちんと解釈してくれる
  • 段落の認識を行間隔で行うことができ、後工程の手間を減らせる

うまく行かないところ:

  • リガチャの対応に抜けがあるようで、"ft"(unicodeでは fb05)が"t"に置換される。

pdftotext

初期状態のままでオプションなしで使うと、段組文書の抽出順序がおかしくなる、リガチャに対応できていない、という大きな問題がある。このため、前者は "-raw" オプションをつけることで、後者は日本語対応した上で、置換マッピングを追加する方法で対応した。

よかったところ:

  • 使いやすくて処理も高速
  • リガチャは正しく変換できる。ただし、今のファイルには使われていない3文字リガチャ "ffi"(fb03)や "ffl"(fb04) が使われているファイルだとちょっと小細工*2が必要になる。

うまく行かなかったところ:

  • 行頭の飾り文字や固有の埋め込み文字列(商品名みたいな)と出会うと、その周辺の単語間の空白が消えて、しばらく単語が連結された状態に変換されてしまう( raw モードのせいだと思う )。

Acrobat Readerのテキスト書き出し

よかったところ:

  • 何のツールもいらない。単独で作業が終わる
  • リガチャは正しく変換できる
  • 構成も基本的には問題なく落とされる

うまく行かなかったところ

  • 処理速度が少し遅い
  • 手作業になる

備考

リガチャについて

リガチャ(日本語だと「合字(ごうじ)」と言うんだそうです)は、製版で使われるものらしいです。見栄えを浴するために、特定の文字並びを特別なフォントで置き換えます。ラテンアルファベットで言うと、例えば ff とか、fi みたいな部分ですね。

unicode 上では、このリガチャは別のフォントとして配置されています。この合字を使っているファイルと使っていないファイルとでは、同じ単語でも文字並びが違っていることになります。ですから単に文字情報をそのまま引き出してくるだけでは、上手く読み取れないことになります。リガチャはソレを構成しているはずの複数文字に変換してあげなければならないわけです。

必ずしも全てのリガチャが使われるわけではなく、使うフォントによって(ひょっとすると使用者の設定で?)決まるみたいです。

実際にどういうリガチャがあるかについては、こちらをご覧ください。

pdftotext の日本語対応とリガチャ対応

本当は日本語対応が目的じゃなくて、そのおまけとしてやっているリガチャ対応が目当てだったのですが、以下を参考にしました。

ありがとうございました。

*1:例えば、AcrobatReader のテキスト書き出しではうまくリガチャ(後述)が処理できないなどのケースがそれです。参照→グローランサ翻訳wiki

*2:一度別の文字に置き換えて抽出し、あとでテキスト一括置換で置き換える