如何检测多集单词OpenNLP

时间:2018-02-05 06:29:59

标签: java machine-learning nlp opennlp ner

我正在使用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]将香港置于香港,而不是将它们分为两类。

感谢。

1 个答案:

答案 0 :(得分:1)

我定义了一个数组列表,包括所有多字地名,例如{“Hong”,“New”,“North”,“South”...}然后用它来检查它是否包含令牌[s。 getStart()]。如果是,请添加tokens[s.getStart()] + " " + tokens[s.getStart() + 1]其他,添加tokens[s.getStart()]。虽然这不是最好的方法,但现在对我来说已经足够了。