1

Railsアプリにテキスト解析を追加しようと考えており、これを機能させる方法に関するチュートリアルやヒントを探して、過去数日間サークルに参加しています。

私は Java をまったく初めて使用しますが、両足で飛び込むようなものは何もありません。

次のコードはコントローラーに属しておらず、おそらくモデルに含まれているはずですが、この時点ですべてのピースが適切な場所にあるかどうかを確認しているだけです。

このSOの質問からこのコードを借りて、カスタムJavaクラスを jrubyに実装しました。これは、あらゆる種類のサンプルコードを見つけるのに問題があったためです。

#my requires/imports/includes、安全のために複数のバージョンを含める
「Java」が必要
#Java を含める
「/media/sf_Ruby192/java_progs/parser/stanford-parser.jar」が必要です
#必要 '/media/sf_Ruby192/java_progs/parser/'
「ルビジェム」が必要
include_class 'edu.stanford.nlp.parser.lexparser.LexicalizedParser'

class ParseController < ApplicationController

    デフインデックス
lp = LexicalizedParser.new
    # 通常の Java が動作しているかチェック
リスト = java.util.ArrayList.new
= "1"
b = "2"
list.add(a)
list.add(b)
d = リスト[0]
    return render :text => list
    終わり
終わり

残念ながら、エラーが発生します

java.lang.NullPointerException: null

私が含めるとき

lp = LexicalizedParser.new

私はすべて間違っていますか?lp = ... をコメントアウトすると、リスト出力が得られるので、jruby が動作し、Rails アプリで Java を記述して出力を取得できます。

誰かが私を正しい方向に向けることができますか、このコードのどこが悪いのか教えてください. Stanford Parser についても情報を提供していただければ幸いです (質問することはたくさんあります)。私が見つけたドキュメントやサンプルコードはほとんどないようです。

4

1 に答える 1

1

私はそうは思わない。しかし、このパーサーがどのように機能するかを読む必要があると思います。

http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/parser/lexparser/LexicalizedParser.htmlによると、デフォルトのコンストラクタは次のように機能します。

プロパティ edu.stanford.nlp.SerializedLexicalizedParser、またはデフォルトのファイルの場所から読み取った、以前にシリアル化された文法から新しい LexicalizedParser オブジェクトを構築します。

つまり、デフォルトのコンストラクターがパーサーを作成するのに十分な情報を見つけることができないため、NPE を取得しています。

スタンフォードからバイナリ ディストリビューションを取得すると、ディレクトリ内に適切な文法が見つかりgrammarます。例えば:

$ jruby -S irb
irb(main):001:0> require 'java'
=> true
irb(main):002:0> require 'stanford-parser.jar'
=> true
irb(main):003:0> java_import Java::edu.stanford.nlp.parser.lexparser.LexicalizedParser
=> Java::EduStanfordNlpParserLexparser::LexicalizedParser
irb(main):004:0> lp = LexicalizedParser.new("grammar/englishPCFG.ser.gz")
Loading parser from serialized file grammar/englishPCFG.ser.gz ... done [2.5 sec].
=> #<Java::EduStanfordNlpParserLexparser::LexicalizedParser:0x7d627b8b>
于 2011-11-24T03:05:15.687 に答える