gpt4 book ai didi

java - 为什么opennlp库的HelloWorld在Java上工作正常,但在Jruby上却不工作?

转载 作者:行者123 更新时间:2023-12-02 07:30:27 25 4
gpt4 key购买 nike

我收到此错误:

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时“我正在尝试让它工作”

当我运行HelloWorld.java“我试图让它工作”它工作完美,当然.java不包含需要 java 语句。

编辑:

我关注了以下steps .

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 是 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])

全部。 ruby 。代码。

关于java - 为什么opennlp库的HelloWorld在Java上工作正常,但在Jruby上却不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com