首先我正在使用OpenNLP,但不需要知识,但可能有用。
字符串输入到 FindName
方法中String input = "Billy Smith the chicken crossed the road to visit Fred Jones";
它由tokenizer处理,为namefinder提供输入:
String[] tokenized = "Billy","Smith","the","chicken","crossed","the","road","to","visit","Fred","Jones";
搜索名称的,结果以“for”循环生成的两个字符串给出
"[0..2) person","[9..11) person"
现在我如何将原始名称(“Billy Smith”和“Fred Jones”)放入arraylist或类似的字符串数组?
到目前为止,我已经尝试过:for(Span s: nameSpans){
numbers = s.toString().replace("[", "");
//is "[0..2) person" and "[9..11) person"
sect = numbers.split("\\) ");
}
int x;
for(x=0;x<sect.length;x++){
if(x%2 == 0){
String[] numb = sect[x].split("..");
int n;
int first, second;
first = Integer.parseInt(numb[0]);
second = Integer.parseInt(numb[1]);
for(n=first;n<second;n++){
if(sentence.hashCode() == n){
name.add(sentence[n]);
}
但没有运气。
答案 0 :(得分:0)
Span对象有一个内置的静态方法,可以执行您想要的操作。看到这个答案。 OpenNLP Name Entity Recognizer output
答案 1 :(得分:0)
可以通过将输出字符串解析为整数然后创建一个带有原始输入字符串的字符串数组来创建单词,然后使用正确的数字调用它们,从而提供全名和中间名称。< / p>
工作代码:
for(Span s: nameSpans){
String a = s.toString().replace("[", "").replace(")", "");
String[] b = a.split("\\s");
String[] c = b[0].split("\\..");
int first = Integer.parseInt(c[0]);
int second = Integer.parseInt(c[1]);
String[] word = input.split("\\s");
int n;
for(n=first;n<second;n++){
names.add(word[n]);
System.out.println(word[n]);
}
}