Как извлечь объект объекта Verb используя NLP Java? за каждое предложение - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу найти субъект, глагол и объект для каждого предложения, а затем он будет передан в библиотеку генерации естественного языка simpleNLG для формирования предложения.

Я пробовал несколько библиотек, таких как Cornlp, opennlp, Standford парсеры . Но я не могу их точно найти.

Теперь в худшем случае мне придется написать длинный набор if-else, чтобы найти предмет, глагол и объект из каждого предложения, что не всегда точно для simpleNLG

как,

  • NN, nsub et c идет к предмету, 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 или я должен go с if-else? пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете использовать аннотатор 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("..."); 

input:

Joe ate some pizza.

выход:

Extracted the following Open IE triples:
1.0     Joe     ate     pizza

Подробнее здесь: https://stanfordnlp.github.io/CoreNLP/openie.html

...