Начало работы со Стэнфордским парсером в jruby - PullRequest
1 голос
/ 23 ноября 2011

Я собираюсь добавить несколько разборов текста в мое приложение rails, и последние несколько дней ходил кругами в поисках каких-либо руководств или подсказок о том, как заставить это работать.

Я совершенно новичок в Java, но ничего похожего на прыжки обеими ногами.

Я подозреваю, что следующий код не принадлежит моему контроллеру и, скорее всего, должен быть в модели, но я просто проверяю, все ли части в нужном месте на этом этапе.

Я позаимствовал этот код из этого SO вопроса, реализующего пользовательский класс java в jruby , потому что у меня были проблемы с поиском любого примера кода.

#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 = LexicalizedParser.new

я делаю ВСЕ неправильно?когда я закомментирую lp = ..., я получаю вывод списка, поэтому jruby работает, и я могу написать java в своем приложении rails и получить вывод.

Может кто-нибудь направить меня в правильном направлении, может, скажет мне, что не так с этим кусочком кода, но, надеюсь, на самом деле объяснит мне, как я должен работать с jruby и rails.Надеюсь, что-то получится и о Stanford Parser (я знаю, это много, чтобы спросить).Кажется, очень мало документации и примеров кода, которые я нашел.

1 Ответ

1 голос
/ 24 ноября 2011

Я так не думаю.Но я думаю, вам нужно прочитать о том, как работает этот синтаксический анализатор.

Согласно 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>
...