I am getting this error:
SyntaxError: hello.rb:13: syntax error, unexpected tIDENTIFIER
public HelloWorld( InputStream data ) throws IOException {
The HelloWorld.rb is:
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] );
}
}
when running ruby HelloWorld.rb "I am trying to make it work"
when I run the HelloWorld.java "I am trying to make it work"
it works perfectly, of course the .java
doesn't contain the require java
statement.
EDIT:
I followed the following steps.
The output for 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]
JRuby is a ruby implementation in Java, this means if you want to use JRuby, you have to use the ruby syntax. You can indeed use Java objects in JRuby, but using the ruby syntax – you just can’t use Java syntax.
For example, frame = javax.swing.JFrame.new("Window")
uses JFrame
, but with a ruby syntax (i.e. JFrame.new
rather than new JFrame
).
And so your code would be something like:
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])
All. ruby. code.