我正在尝试训练名称查找器模型来检测名称,但它没有给出正确的结果。这是代码。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InputStream is=null;
Resources resources=this.getResources();
assetManager=resources.getAssets();
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 void predict(String sentence[], String modelFile) throws Exception {
InputStream is1 ;
is1 = assetManager.open("en-ner-person.bin",MODE_PRIVATE);
TokenNameFinderModel model1 = new TokenNameFinderModel(is1);
String sd;
NameFinderME nameFinder = new NameFinderME(model1);
Span sp[] = nameFinder.find(sentence);
String a[] = Span.spansToStrings(sp, sentence);
StringBuilder fd = new StringBuilder();
int l = a.length;
for (int j = 0; j < l; j++) {
fd = fd.append(a[j] + "\n");
}
sd = fd.toString();
Log.d("Name Detected:", sd);
}
}
这是iam得到的输出:
检测到的名称:[07-20 19:35:47.516 8799:8799 I/Adreno EGL]
en-ner-person.train内容是:
<START:person> Sunil <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .
请帮忙。
试试这个:
Span[] sp = nameFinder.find(search);
nameFinder.clearAdaptiveData();
for (Span span : sp) {
for (int i=span.getStart(); i<span.getEnd(); i++) {
fd.append(sentence[i] + "\n");
}
}
此外,这一行似乎是错误的,您不需要再次将append tofd
的内容分配给它。
fd = fd.append(a[j] + "\n");
希望这有帮助。
我发现很难创建自己的openNLP模型。谁能告诉我,如何拥有自己的模型。培训应该如何进行。 输入应该是什么,输出模型文件将存储在哪里。
编辑1:主要的问题是在训练完一个NER模型后,我将它应用到令牌上。因此,它不会识别“轮滑”,因为在代币中,它们以“轮滑”和“滑冰”的形式出现,而NER模型现在无法识别这个爱好。
我使用的OpenNLP模型如下: 我想把我的数据附加到训练数据集中,这些模型就是在这个数据集中训练的。那么请告诉我从哪里可以得到原始数据集?
我刚开始使用OpenNLP。我需要创建一个简单的训练模型来识别名称实体。
大家已经提到了这个,这个,这个和这个,但是仍然发现很难建立一个自定义的名字查找器模型。。以下是代码: 我在尝试执行命令行时不断出现错误: 让我把论点1改为 然后我收到一个运行时错误,说你不能强制转换这个。这是我在线程“main”中强制转换 第二个问题是: 给出一个语法错误。不确定这里出了什么问题。如果有任何帮助,我将不胜感激,因为我已经尝试了上述链接上的所有代码片段。 祝好
我试图用下面的代码训练模型,但我一直在方法上收到错误,它告诉我将更改为。为什么?