如何使用NLP Java提取主语-动词-宾语?每一句话



我想为每个句子找到一个主语、动词和宾语,然后它将被传递到自然语言生成库simpleNLG以形成一个句子。

我尝试了多个库,如Cornlp、opennlp、Standford解析器。但是我不能准确地找到它们。

现在,在最坏的情况下,我将不得不写一长串if else来找到每个句子的主语、动词和宾语,这对于简单的NLG 来说并不总是准确的

比如

  • NN、nsub等为主语,VB、VBZ为动词

我试过词法分析器

LexicalizedParser lp = **new LexicalizedParser("englishPCFG.ser.gz");**
String[] sent = { "This", "is", "an", "easy", "sentence", "." };
Tree parse = (Tree) lp.apply(Arrays.asList(sent));
parse.pennPrint();
System.out.println();
TreePrint tp = new TreePrint("penn,typedDependenciesCollapsed");
tp.print(parse);

提供此输出,

nsubj(use-2, I-1)
root(ROOT-0, use-2)
det(parser-4, a-3)
dobj(use-2, parser-4)

我想要这样的东西

subject = I
verb = use
det = a
object = parser

在JAVA中有没有更简单的方法可以找到它,或者我应该使用其他方法吗?请帮我。

您可以使用openie注释器来获取三元组。您可以在命令行运行此操作,也可以使用这些注释器构建管道。

命令:

java -Xmx10g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,depparse,natlog,openie -file example.txt

Java:

Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,depparse,natlog,openie");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Annotation result = pipeline.process("..."); 

输入:

Joe ate some pizza.

输出:

Extracted the following Open IE triples:
1.0     Joe     ate     pizza

更多详细信息请点击此处:https://stanfordnlp.github.io/CoreNLP/openie.html

最新更新