java如何检测多集合词OpenNLP
我正在使用Java OpenNLP进行NER,我不确定如何使用我训练过的自定义模型检测多个单词(例如纽约、布鲁诺火星、香港)
我的培训数据确实涵盖多词跨度:
<START:place> Hong Kong <END> ... <START:person> Putin <END>
我很确定我训练过的模型和训练数据运行良好。只是我不知道如何获得多词集。这就是我所做的
// testing the model
NameFinderME nameFinder = new NameFinderME(nameFinderModel);
String sentence = "India may US to Japan France so Putin should Hong Kong review Trump";
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
// Tokenizing the given paragraph
String tokens[] = whitespaceTokenizer.tokenize(sentence);
Span nameSpans[] = nameFinder.find(tokens);
for (Span s : nameSpans)
System.out.println(s.toString() + " " + tokens[s.getStart()]);
下面是我得到的:
[0..1) place India
[0..1) place US
[0..1) place Japan
[0..1) place France
[0..1) person Putin
[0..1) place Hong
[0..1) person Trump
但是我想得到(0。1)香港,而不是把它们分成两类。
谢谢
# 1 楼答案
我定义了一个数组列表来包含所有多单词的地名,例如{“Hong”、“New”、“North”、“South”…}然后使用它检查它是否包含令牌[s.getStart()]。如果是,添加
tokens[s.getStart()] + " " + tokens[s.getStart() + 1]
否则,添加tokens[s.getStart()]
。虽然这不是最好的方法,但现在对我来说已经足够了