2013年7月26日金曜日

[Ruby][Solr][PDF] PDF解析ライブラリを作成

PDF文書のテキスト抽出

Solrを使ってPDF文書の全文検索システムを作ろうかといろいろと調査中である。
Solr Cellを使うと、PDF文書やWord文書を簡単に取り込めるようだけど、ワードが含まれる場所(ページ番号)は関連付けされないようだ。
ページ番号が不明だと、対象となるPDF文書が分かっても、その文書を開いてから、そのワードを再検索しなければならない。それは面倒なので、ページ番号も一緒に取得できるようにして、コマンドラインから、ページ番号を指定して、PDF文書を開きたい。
まずは、PDF文書からページ単位でテキストを抽出する必要があるので、Rubyのpdf-reader を使い、手持ちの日本語のPDF文書を処理してみたが、最初のページは正しくテキストを抽出できたが、以降のページは文字化けし、正しくテキストを抽出できなかった。
Ubuntu12.04のXPDF(pdfinfo, pdftotextコマンド)では文字化けすることなくテキストを抽出できたので、これをラップしたRubyのライブラリを作成した。

ソースはこちらから。
https://github.com/takeisa/xpdf-ruby

サンプルコード

require './xpdf'

doc = XPDF::Reader.read('sample.pdf')

puts "Title: #{doc.title}"
puts "Author: #{doc.author}"
puts "PDF Version: #{doc.pdf_version}"

doc.pages.each do |page|
  puts page
end


何も難しいところはない。
XPDF::Document#pagesにページ毎に抽出したテキストを格納している。

参考

pdf-reader https://github.com/yob/pdf-reader