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を全文検索出来るようになった。うれちい。