2011-11-23 10 views
1

私は自分のレールアプリケーションでテキスト解析を追加したいと思っています。この数日間、このチュートリアルやヒントを探しているサークルに行ってきました。jrubyでStanford Parserを使い始める

私はJavaについて全く新しいですが、両足で飛び乗るようなものはありません。

私のコントローラには次のコードが含まれていないと思われます。モデルにあるはずですが、この時点ですべての部分が正しいかどうかを確認しています。

このコードからこのコードを借用しました。implementing custom java class in jruby、私は何らかの種類のサンプルコードを見つけるのが難しかったからです。私は間違ってすべてをやっている

 
lp = LexicalizedParser.new 

が含まれている場合、残念ながら私にとって

 
#my requires/imports/includes, included multiple versions to be safe 
require 'java' 
#include Java 
require '/media/sf_Ruby192/java_progs/parser/stanford-parser.jar' 
#require '/media/sf_Ruby192/java_progs/parser/' 
require 'rubygems' 
include_class 'edu.stanford.nlp.parser.lexparser.LexicalizedParser' 

class ParseController < ApplicationController 

    def index 
lp = LexicalizedParser.new 
    #check if regular Java is working 
list = java.util.ArrayList.new 
a = "1" 
b = "2" 
list.add(a) 
list.add(b) 
d = list[0] 
    return render :text => list 
    end 
end 

は、私はエラー

 
java.lang.NullPointerException: null 

を取得しますか?私がlp = ...をコメントアウトすると、リストの出力が得られるので、jrubyが動作しているので、私は自分のレールアプリケーションにjavaを書き込んで出力を得ることができます。

誰かが正しい方向に私を指し示すことができます。多分、このコードで何が間違っているのか教えてください。しかしうまくいけば、私はどうやってjrubyとレールで作業していると思いますか。うまくいけば、Stanford Parserの意見もあります(私は知っています、それはたくさんあります)。私が見つけたドキュメンテーションやサンプルコードの方法ではほとんどないようです。

答えて

1

私はそうは思わない。しかし、私はあなたがこのパーサーがどのように動作するかを読む必要があると思います。次のようにhttp://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/parser/lexparser/LexicalizedParser.htmlによると、デフォルトコンストラクタが動作

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

つまり、デフォルトのコンストラクタがパーサーを作成するのに十分な情報を見つけられないため、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> 
+0

感謝banzaiman、コード例なしで、私は例のドキュメントを通じて行っていたが、私は認めざるを得ない、私はいつもそれが難しいだけでドキュメントを見て、物事を把握するために見つけます。例えば、あなたがリンクしているlexparserページには、複数のLexicalizedParser()オプションが含まれていますが、そのうちのどれも.newとは言いません。リストの3番目には文法を指すように指定しています。私はしばしばこれで苦労しました。そのため、私は言語の感触を得るためにコード例を好む理由です。しかし、あなたは答えを得ました(メモ、それは私のためにこれを解決したあなたのコードの例でした)。ありがとう – pedalpete