Paradigm Shift Design

ISHITOYA Kentaro's blog.

RJBが[BUG] cross-thread violation on rb_gc()で落ちる

もういっちょエラーエントリ。

英語の文章を形態素解析するために、The Stanford NLP (Natural Language Processing) Groupを使ってみたいなと思った訳ですよ。で、リンクにruby bindingというのがあったから、お、gemあんじゃんと思ったら、単にjar呼んでるだけなのね。

で、Ruby Java Bridgeをgemでインストールする訳だけど、

gem install rjb

して、bindingにあった、

equire 'rjb'

Rjb::load('stanford-postagger.jar:stanford-ner.jar', ['-Xmx200m'])
MaxentTagger = Rjb::import('edu.stanford.nlp.tagger.maxent.MaxentTagger')
tagger = MaxentTagger.new("models/left3words-wsj-0-18.tagger")
sent = 'Rails3 / Ryan\'s Scraps: What\'s New in Edge Rails: Cleaner RESTful Controllers w/ respond_with'
puts tagger.tagString( sent )

な、サンプルコードを動かすと、見事に

bash-3.2$ ruby tagger.rb 
[BUG] cross-thread violation on rb_gc()
(null)

Abort trap

なエラーが。OSX+Ruby一筋縄ではいかないね…
で、エラーでググってもよくわからなかったけど OSX, RubyGems and cross-thread violations in rb_gcによれば、別環境用のバイナリがあるとこのエラーが出るみたいなことが書いてある。

ふむ、と思って

gem list rjb

すると、

rjb (1.3.4 universal-darwin-10)

とのこと。よくわからん。darwin先生はuniversalなのにだめらしい。
とりあえず、rjbをアンインストールして、

gem install rjb --platform=ruby

再度インストール。

gem list rjb
rjb (1.3.4)

環境の指定がとれた。


気を取り直して再実行。

bash-3.2$ ruby tagger.rb
Loading default properties from trained tagger models/left3words-wsj-0-18.tagger
Reading POS tagger model from models/left3words-wsj-0-18.tagger ... done [0.9 sec].
Rails3/NNP \//NNP Ryan/NNP 's/POS Scraps/NNS :/: What/WP 's/VBZ New/NNP in/IN Edge/NNP Rails/NNPS :/: Cleaner/NNP RESTful/NNP Controllers/NNPS w/VBD \//CD respond_with/NN

動いた!
どうでもいいけど、エラーメッセージって大事ですね…。