Извлечь существительные фразы с использованием opennlp в Java
Я пытаюсь извлечь существительные фразы из предложений. Я использую opennlp librari "en-parser-chunking.bin".
пример кода:
ArrayList<opennlp.tools.parser.Parse> nounPhrases = new ArrayList<>();
searchmethod("what is the nickname of the British flag?");
for(int t =0; t<50; t++)
{
str= text.get(t);
InputStream is = new FileInputStream("en-parser-chunking.bin");
ParserModel model = new ParserModel(is);
opennlp.tools.parser.Parser parser = ParserFactory.create(model);
opennlp.tools.parser.Parse[] topParses = ParserTool.parseLine(str, parser, 1);
for (opennlp.tools.parser.Parse p : topParses){
p.show();
if (p.getType().equals("NP")) {
nounPhrases.add(p);
}
}
}
С помощью этого кода я получаю следующий результат:
(TOP (S (NP (NP (DT The) (NN nickname)) (PP (IN for) (NP (DT the) (JJ British) (NN flag)))) (VP (VBZ is) (NP (NP (DT the) (NNP Union) (NNP Jack.)) (SBAR (IN Although) (S (NP (PRP it)) (VP (VBZ is) (ADVP (RB only) (RB correctly)) (VP (VBN known) (PP (IN as) (NP (DT this) (NN when) (NN flown))) (PP (IN on) (NP (DT a) (NN ship.)))))))))))
Как я могу извлечь из этого результата словосочетания?
Любая помощь будет принята с благодарностью.
1 ответ
Вы могли бы извлечь NP
Исходя из этого, но на http://opennlp.sourceforge.net/models-1.5/en-chunker.bin есть модель, которая выполняет только разбиение на части (то есть обнаружение именных фраз) без грамматики. Это может быть проще в использовании (но для его запуска требуется токенизация и шаги по маркировке POS).
Привет, я согласен с Daniel Naber, но если вы внимательно посмотрите на свой результат, в идентифицированном дереве есть проблема, которая приведет к неправильному обнаружению фрагментов деревом.
В приведенном выше примере есть PP, идентифицированный как неправильный, поскольку выполняемый полет никогда не может быть NN. Я считаю, что ключ к успеху - это правильная разметка. Пожалуйста, дайте мне знать, если вам нужно знать, как исправить разметку. Спасибо.
(PP
(IN as)
(NP
(DT this) (NN when) (NN flown)
)
)
)