0

このエラーが発生します:

SyntaxError: hello.rb:13: syntax error, unexpected tIDENTIFIER
public HelloWorld( InputStream data ) throws IOException {

HelloWorld.rbは次のとおりです。

require "java"

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;

public class HelloWorld {
    private POSModel model;

    public HelloWorld( InputStream data ) throws IOException {
    setModel( new POSModel( data ) );
    }

    public void run( String sentence ) {
    POSTaggerME tagger = new POSTaggerME( getModel() );
    String[] words = sentence.split( "\\s+" );
    String[] tags = tagger.tag( words );
    double[] probs = tagger.probs();

    for( int i = 0; i < tags.length; i++ ) {
    System.out.println( words[i] + " => " + tags[i] + " @ " + probs[i] );
    }
    }

    private void setModel( POSModel model ) {
    this.model = model;
    }

    private POSModel getModel() {
    return this.model;
    }

    public static void main( String args[] ) throws IOException {
    if( args.length < 2 ) {
    System.out.println( "HelloWord <file> \"sentence to tag\"" );
    return;
    }

    InputStream is = new FileInputStream( args[0] );
    HelloWorld hw = new HelloWorld( is );
    is.close();

    hw.run( args[1] );
    }
}

走っているときruby HelloWorld.rb "I am trying to make it work"

私が実行すると、HelloWorld.java "I am trying to make it work"それは完全に機能します、もちろん、ステートメント .javaは含まれていません。require java

編集:

次の手順に従いました。

の出力jruby -v

jruby 1.6.7.2 (ruby-1.8.7-p357) (2012-05-01 26e08ba) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_35) [darwin-x86_64-java]
4

2 に答える 2

1

RubyではなくJavaで書かれているからですか?

于 2012-10-20T22:53:54.300 に答える
1

JRubyはJavaでのruby実装です。つまり、JRubyを使用する場合は、ruby構文を使用する必要があります。実際、JRubyではJavaオブジェクトを使用できますが、ruby構文を使用すると、Java構文を使用できなくなります。

たとえば、frame = javax.swing.JFrame.new("Window")を使用しJFrameますが、ruby構文を使用します(つまり、JFrame.newではなくnew JFrame)。

したがって、コードは次のようになります。

require 'java'
# Require opennlp jars
Dir.glob('**/*.jar').each do |jar|
  require jar
end

java_import 'opennlp.tools.postag.POSTaggerME'
java_import 'opennlp.tools.postag.POSModel'

class HelloWorld
  def initialize(data)
    @model = POSModel.new(data)
  end

  def run(sentence)
    tagger = POSTaggerME.new(@model)
    words = sentence.split
    tags = tagger.tag(words)
    probs = tagger.probs

    probs.each_with_index do |p,i|
      puts "#{words[i]} => #{tags[i]} @ #{p}"
    end
  end
end

stream = File.new(ARGV[0]).to_java.getInStream
HelloWorld.new(stream).run(ARGV[1])

全て。ルビー。コード。

于 2012-10-21T09:02:11.210 に答える