有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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