我试图使用Apache OpenNLP POSTagger示例代码,我发现了一个错误,下面是代码
public String[] SentenceDetect(String qwe) throws IOException
{
POSModel model = new POSModelLoader().load(new File("/home/jebard/chabacano/Chabacano1/src/en-pos-maxent.bin"));
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
POSTaggerME tagger = new POSTaggerME(model);
String input = "Hi. How are you? This is Mike.";
ObjectStream<String> lineStream = new PlainTextByLineStream(
new StringReader(input));
perfMon.start();
String line;
while ((line = lineStream.read()) != null) {
String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE
.tokenize(line);
String[] tags = tagger.tag(whitespaceTokenizerLine);
POSSample sample = new POSSample(whitespaceTokenizerLine, tags);
System.out.println(sample.toString());
perfMon.incrementCounter();
}
perfMon.stopAndPrintFinalResult();
此行错误
.load(新文件(&#34; /home/jebard/chabacano/Chabacano1/src/en-pos-maxent.bin")
ModelLoader类型中的方法load(java.io.File)不适用于参数(org.apache.tomcat.jni.File)
答案 0 :(得分:1)
这实际上不是OpenNLP中的错误。当您从包(aka namespace)File
加载类org.apache.tomcat.jni.File
时,代码中存在错误。
然而,API of OpenNLP要求您使用标准JDK包File
中的类java.io
,即您应该导入java.io.File
。
一般情况下,这应该可以解决您的问题。
重要提示
您应该迁移代码,因为不应通过POSModelLoader
为命令行工具加载POS Tagger模型。
注意:请勿使用此类,内部使用!
相反,您可以使用构造函数POSModel(InputStream in)
通过引用实际模型文件的InputStream
来加载模型文件。
此外,类POSModelLoader
仅存在于以前的OpenNLP版本中(版本&lt; = 1.5.x)。在最新的OpenNLP版本1.6.0中,它已被完全删除。相反,您现在可以而且应该使用POSModel class的构造函数来加载/初始化您需要的模型。
答案 1 :(得分:0)
XML解析存在一些问题。试试这个,它对我有用。
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
try {
AssetFileDescriptor fileDescriptor =
context.getAssets().openFd("en_pos_maxent.bin");
FileInputStream inputStream = fileDescriptor.createInputStream();
POSModel posModel = new POSModel(inputStream);
posTaggerME = new POSTaggerME(posModel);
} catch (Exception e) {}