pdftotextで PDFからのテキスト抜き出し

UNIX MAGAZINE Classic with DVDを手に入れたので、
PDFからのテキスト抽出と全文検索を試みてみる。

pdftotextを探したが発見できず、googleさまにお伺いを立てると、
FreeBSD Portsの xpdfの中に含まれるパッケージのようだ。
xpdfを portsから入れて、pdftotextをゲットする。

しかし、ユニマガのPDFからうまくテキストを抜けないので何でかなあと思い、
とりあえず何も考えずエンコードEUC-JP, Shift-JISなどと変えてみるが、やっぱりダメ。

ここに至ってしょーがなくエラーを読む(ぉぃ

Unknown CMap '90ms-RKSJ-V' for character collection 'Adobe-Japan1'

というエラーで探すと、ハマっている人が他にもいた。

次に、別のpdfで、
Error: Couldn't find '90ms-RKSJ-H' CMap file for 'Adobe-Japan1' collection
とか言われた。adobe-cmapsは入れてあるし、当然aj16/CMapの下にそのファイルはあるのに何言ってるのと思いながらソースを追いかけると、xpdfrcで指定されたcMapDir「しか」探さないようだ。ということは、ja-xpdfのデフォルトがタコなんじゃんと文句をいいつつ、cMapDirのうしろに/aj16/CMapを追加。

# in /etc/xpdfrc

cMapDir Adobe-Japan1 /usr/local/share/fonts/adobe-cmaps
cMapDir Adobe-Japan1 /usr/local/share/fonts/adobe-cmaps/aj16/CMap

と一行付け加えて、無事にテキストを抜けるようになった。めでたい。


namazuあたりを使おうかとも思ったけど、pdftotextをフィルタとして使うことで PDFも検索できそう、ということで、
全文検索エンジンには Hypere Estraierを選んだ。

FreeBSD Portsから make; make installしてインストールはオワリ。

PATH=$PATH:/usr/local/share/hyperestraier/filter ; export PATH
estcmd gather -cl -fx ".pdf" "H@estfxpdftohtml" -fz -ic UTF-8 -sd -cm casket .

で pdftohtmlをフィルタとして PDFに対してインデックスを作成してくれるようなのだが、
UNIX MAGAZINEの PDFは 60MBを超えていたので、エラーが出た。

estcmd: ERROR: $home$/um/1986/um198611.pdf: exceeding the file size limitation
estcmd: ERROR: $home$/um/1986/um198612.pdf: exceeding the file size limitation

estcmdの中に textサイズ 128KB, 元のファイルサイズ30MBという制限があったので、
これを 1MB, 96MBに緩和して食わせてみた。

# /usr/ports/textproc/hyperestraier/work/hyperestraier-1.4.10/estcmd.c

#define LIMITTSIZ (1024*1024) /* text size limitation */
#define LIMITFSIZ (1048576*96) /* file size limitation */

こんな感じ。make; make installしたところ、無事に処理できた。



estseek.confの replaceを適当にいじって http:://hostname/~user/dir/という prefixが付くようにして、
無事に UNIX MAGAZINE全文検索出来るようになった。うれちい。