在我的应用程序中,我有一个方法,我无法在没有main方法的情况下执行。它只在main方法中运行。当我在servlet类中调用该方法时。它显示异常
- 我的主要方法课程
醇>
package com.books.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.HashSet;
import java.util.Set;
import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;
public class ParserTest {
// download
public void download(String url, File destination) throws IOException, Exception {
URL website = new URL(url);
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
public static Set<String> nounPhrases = new HashSet<>();
private static String line = "The Moon is a barren, rocky world ";
public void getNounPhrases(Parse p) {
if (p.getType().equals("NN") || p.getType().equals("NNS") || p.getType().equals("NNP")
|| p.getType().equals("NNPS")) {
nounPhrases.add(p.getCoveredText());
}
for (Parse child : p.getChildren()) {
getNounPhrases(child);
}
}
public void parserAction() throws Exception {
// InputStream is = new FileInputStream("en-parser-chunking.bin");
File modelFile = new File("en-parser-chunking.bin");
if (!modelFile.exists()) {
System.out.println("Downloading model.");
download("https://drive.google.com/uc?export=download&id=0B4uQtYVPbChrY2ZIWmpRQ1FSVVk", modelFile);
}
ParserModel model = new ParserModel(modelFile);
Parser parser = ParserFactory.create(model);
Parse topParses[] = ParserTool.parseLine(line, parser, 1);
for (Parse p : topParses) {
// p.show();
getNounPhrases(p);
}
}
public static void main(String[] args) throws Exception {
new ParserTest().parserAction();
System.out.println("List of Noun Parse : " + nounPhrases);
}
}
它给我低于输出
Noun Parse名单:[barren ,, world,Moon]
然后我评论了主要方法和。在我的servlet类中调用ParserAction()方法
if (name.equals("bkDescription")) {
bookDes = value;
try {
new ParserTest().parserAction();
System.out.println("Nouns Are"+ParserTest.nounPhrases);
} catch (Exception e) {
}
它给了我以下例外
我的浏览器中出现以下错误
为什么会这样?我可以用main方法运行它。但是当我删除main方法并在我的servlet中调用时。它给了一个例外。有没有办法解决这个问题?
注意 - 我在OpenNLP文档中已阅读以下说明,但我对此并不清楚。请帮我解决他的问题。
与实例化Parser工厂方法的其他组件不同 应该使用而不是通过new运算符创建Parser。 解析器模型要么针对分块解析器或树进行训练 插入解析器必须正确选择解析器实现。该 factory方法将从模型中读取一个类型参数并创建一个 相应解析器实现的实例。
答案 0 :(得分:0)
创建ParserTest类的对象或删除此行中的新关键字new ParserTest().parserAction();