我正在使用Java OpenNLP进行NER,我不知道如何使用我训练过的自定义模型检测多个单词(例如纽约,Bruno Mars,香港)。
我的训练数据涵盖多字词跨度:
<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]将香港置于香港,而不是将它们分为两类。
感谢。
答案 0 :(得分:1)
我定义了一个数组列表,包括所有多字地名,例如{“Hong”,“New”,“North”,“South”...}然后用它来检查它是否包含令牌[s。 getStart()]。如果是,请添加tokens[s.getStart()] + " " + tokens[s.getStart() + 1]
其他,添加tokens[s.getStart()]
。虽然这不是最好的方法,但现在对我来说已经足够了。