#java #parsing #stanford-nlp
#java #синтаксический анализ #stanford-nlp
Вопрос:
Я хочу найти несколько именных фраз в данном предложении, используя синтаксический анализатор stanford. Я использую Java.
Пример предложения:
Качество изображения действительно хорошее.
Теперь мне нужно извлечь «Качество изображения».
Есть ли какой-либо способ обойти дерево зависимостей для достижения желаемого результата?
Кроме того, может ли синтаксический анализатор stanford помечать предложения в формате XML?
Ответ №1:
Если вы хотите найти все именные фразы, то это, вероятно, проще всего сделать, работая с деревом синтаксического анализа структуры фраз, а не с представлением зависимостей. Вы можете либо вручную выполнить итерацию по узлам древовидного объекта и посмотреть, является ли label().value() «NP», либо вы можете использовать TregexPattern «@NP», а затем выполнить итерацию по NPS с помощью TregexMatcher.
Вы можете получить выходные данные в формате XML из синтаксического анализатора, используя флаг командной строки
-outputFormatOptions xml
или в коде путем создания объекта TreePrint со строкой параметров «xml».
Ответ №2:
Просто чтобы расширить ответ @christopher-manning, вот некоторый код, который вы можете использовать:
private List<String> getNounPhrases(Tree parse) {
List<String> result = new ArrayList<>();
TregexPattern pattern = TregexPattern.compile("@NP");
TregexMatcher matcher = pattern.matcher(parse);
while (matcher.find()) {
Tree match = matcher.getMatch();
List<Tree> leaves = match.getLeaves();
System.out.println(leaves);
// Some Guava magic.
String nounPhrase = Joiner.on(' ').join(Lists.transform(leaves, Functions.toStringFunction()));
result.add(nounPhrase);
List<LabeledWord> labeledYield = match.labeledYield();
System.out.println("labeledYield: " labeledYield);
}
return resu<
}