ってどうやるの?

文献管理ソフトは、pdf ファイルの名前を pmid.pdf にするのが多そうだけど、手作業はめんどい。
=> 誰か変換スクリプトを〜。
=> ktkr http://www.geocities.jp/researcherinus/perl1
=> うまく text 抽出できない場合がある
=> 自分で書けないもんだろうか?
=> Ruby で pdf から text 抽出どうやるのか見つからなかった

Rubyで pdf から text 抽出してみる

ところが寝る前に HMDT3版を読んでいたら RubyCocoa*1 で pdf からの text 抽出が載っていた
ので、ちょっと Nature とかの pdf から text 抽出して doi を抜き出せるか試してみた。

#!/usr/bin/env ruby
#
#  Created by mako on 2008-01-29.
#  What?
#  This_script.rb extracts text from pdf file
# 参考にした URL
# http://builder.japan.zdnet.com/sp/07leopard/story/0,3800082822,20360029-2,00.htm

begin
  require 'osx/cocoa'
  OSX.require_framework 'Quartz'

#  window = OSX::NSWindow.alloc.initWithContentRect_styleMask_backing_defer([100, 100, 300, 300], 15, 2, 0)
#  window.makeKeyAndOrderFront(nil)
#  pdfview = OSX::PDFView.alloc.initWithFrame(window.contentView.frame)
#  window.contentView.addSubview(pdfview)
  
  pdf_files = ARGV
  pdf_files.each do |pdf_file|
    url = OSX::NSURL.fileURLWithPath("/Users/mako/#{pdf_file}")
    pdfdocument = OSX::PDFDocument.alloc.initWithURL(url)
#    pdfview.setDocument(pdfdocument)
    content = pdfdocument.string unless pdfdocument == nil
    puts ["#{pdf_file} => ", content.scan(/doi[\.|:].*/i)[0]].join("") unless content == nil
  end
rescue Exception => e
  p e.message
  p e.backtrace
end

Ruby で抽出といつつ、どうみても RubyCocoa w
require_framework で Quartz してるのは、それに含まれる PDFKit を使いたいから。
PDFKit については HMDT3版の75ページ付近を参照にするといい。木下さんありがとう。
コメントアウトしてるのは、ここではウインドウを呼び出す必要がないから。
コメントアウトしない状態で Terminal 上にて実行すると

window.makeKeyAndOrderFront(nil)

でエラーになる("NSInternalInconsistencyException - Error (1002) creating CGSWindow")。
ここいら辺、 CocoaRepl だと勝手にやってくれているのかな?

まあ、Ruby でうまく Cocoa を使えると嬉しいね:-)

Happy Macintosh Developing Time Third Edition Cocoaプログラマのための技術解説書

Happy Macintosh Developing Time Third Edition Cocoaプログラマのための技術解説書

*1:すいません、本は Cocoa で書いてあります。エントリー時に書き間違えてました。