我在尝试创建自定义模型时遇到了问题。问题是我基于培训文件创建了自定义模型,培训成功。 但是,当我使用示例输入测试模型时(实际上是从训练文件本身获取),这不会给出任何输出。 我甚至试过超过15000个句子,但它从来没有给我输出。 1.尝试过的代码: -
package com.tcs.ai.opennlp.anothercustommodel.anothercustommodel;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.Collections;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.NameSample;
import opennlp.tools.namefind.NameSampleDataStream;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.PlainTextByLineStream;
import opennlp.tools.util.Span;
public class AnotherCustomModel {
public static void main(String args[])
{
InputStream is=null;
String trainingDataFile = "en-ner-person.train";
String outputModelFile = "en-ner-person.bin";
String sentence[] = {"Sunil", "61 years old , will join the board as a nonexecutive director Nov. 29" };
train(trainingDataFile, outputModelFile, "person");
try {
predict(sentence, outputModelFile);
}
catch(Exception e)
{
System.out.println("Errror Preditct" + e.getMessage());
}
}
private static void train(String trainingDataFile, String outputModelFile, String tagToFind) {
NameSampleDataStream nss = null;
try {
nss = new NameSampleDataStream(new PlainTextByLineStream(new java.io.FileReader(trainingDataFile)));
} catch (Exception e) {}
TokenNameFinderModel model = null;
try {
model = NameFinderME.train("en", tagToFind, nss, Collections.<String, Object>emptyMap());
} catch(Exception e) {}
try {
File outFile = new File(outputModelFile);
FileOutputStream outFileStream = new FileOutputStream(outFile);
model.serialize(outFileStream);
}
catch (Exception ex) {}
}
private static void predict(String sentence[], String modelFile) throws Exception {
InputStream is1 ;
is1 = new FileInputStream("en-ner-person.bin");
TokenNameFinderModel model1 = new TokenNameFinderModel(is1);
String sd;
NameFinderME nameFinder = new NameFinderME(model1);
StringBuilder fd = new StringBuilder();
Span[] sp = nameFinder.find(sentence);
nameFinder.clearAdaptiveData();
for (Span span : sp) {
for (int i=span.getStart(); i<span.getEnd(); i++) {
fd.append(sentence[i] + "\n");
}
}
sd = fd.toString();
System.out.println("Name Detected:[" + sd + "]");
}
}
en-ner-person.train: -
<START:person> Sunil <END> , 61 years old , will join the board as a
非执行董事11月29日。
我甚至试过超过15000个句子。不幸的是,当我测试我的模型时,没有错误也没有输出(模型创建也是成功的
答案 0 :(得分:0)
首先,您提供的输入为:
String sentence[] = {"Sunil", "61 years old , will join the board as a nonexecutive director Nov. 29" };
这是不必要的。使用maxent modeling训练OpenNLP模型。
你应该尝试给出一个句子或只是一个文本文件,然后让opennlp在那个词包上使用它模型来提取实体。
希望这会有所帮助。
<强>更新强>
这是我在opennlp工作的link,我已经创建了模型并使用它们。代码不言自明。如果你有任何疑问,请回复我。