私のアプリケーションでは、mainメソッドなしで実行できないメソッドがあります。メインメソッド内でのみ実行されます。私がサーブレットクラスの中でそのメソッドを呼び出すとき。 [不毛,,世界、:それはそれは、出力メインクラス以外でParserメソッドを呼び出す際の例外
名詞解析の一覧の下に私を与え例外メインメソッド
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);
}
}
と
- 私のクラスを表示します月]
それから私は主な方法とコメントしました。それは私に
はなぜこれをである私のブラウザで以下の例外
とエラー以下を与える私のサーブレットクラスif (name.equals("bkDescription")) {
bookDes = value;
try {
new ParserTest().parserAction();
System.out.println("Nouns Are"+ParserTest.nounPhrases);
} catch (Exception e) {
}
でParserAction()メソッドと呼ばれます起こっている?私はこれをmainメソッドで実行できます。しかし、私はメインメソッドを削除し、私のサーブレットを呼び出しました。それは例外を与えます。この問題を解決する方法はありますか?
注 - OpenNLPのマニュアルでは、以下の手順を読みましたが、明確なアイデアはありません。彼の問題を解決するのを助けてください。パーサーに新しいオペレータを介してパーサを作成するのではなく、使用されるべきである ファクトリメソッドをインスタンス化するための他の成分とは異なり
。 パーサーモデルは、チャンクパーサーまたはツリー パーサーのパーサーの実装を正しく選択する必要があります。 ファクトリメソッドは、モデルから型パラメータを読み込み、対応するパーサ実装の インスタンスを作成します。