Я обучил пользовательской модели извлечения NER и Relation и проверил создание триплетов с сервером corenlp, но когда я использую OpenIEDemo.java
чтобы генерировать тройки, он генерирует тройки, имеющие только отношения «имеет» и «иметь», но не те отношения, на которых я обучал свою модель извлечения отношений.
Я загружаю пользовательскую модель NER и Relation Extraction при запуске одного и того же сценария. Вот мой файл OpenIEDemo.java ...
<code>package edu.stanford.nlp.naturalli;
import edu.stanford.nlp.ie.util.RelationTriple;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.semgraph.SemanticGraph;
import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations;
import edu.stanford.nlp.util.CoreMap;
import edu.stanford.nlp.util.PropertiesUtils;
import java.util.Collection;
import java.util.List;
import java.util.Properties;
/**
* A demo illustrating how to call the OpenIE system programmatically.
* You can call this code with:
*
* <pre>
* java -mx1g -cp stanford-openie.jar:stanford-openie-models.jar edu.stanford.nlp.naturalli.OpenIEDemo
*
*
* /
открытый класс OpenIEDemo {
private OpenIEDemo () {} // статическая главная
public static void main (String [] args) выдает Exception {
Свойства реквизита = новые свойства ();
props.setProperty («аннотаторы», «токенизировать, ssplit, pos, лемма, депарсировать, natlog, openie»);
props.setProperty ("ner.model", "./ner/ner-model.ser.gz");
props.setProperty ("sup.relation.model", "./relation_extractor/relation_model_pipeline.ser.ser");
Трубопровод StanfordCoreNLP = новый StanfordCoreNLP (реквизит);
// Аннотируем пример документа.
Текст строки;
if (args.length> 0) {
text = args [0];
} еще {
text = "Обама родился на Гавайях. Он наш президент.";
}
Аннотация doc = новая аннотация (текст);
pipeline.annotate (док);
// Зацикливание предложений в документе
int sentNo = 0;
for (предложение CoreMap: doc.get (CoreAnnotations.SentencesAnnotation.class)) {
System.out.println ("Предложение №" + ++ sentNo + ":" + предложение.get (CoreAnnotations.TextAnnotation.class));
// Распечатать SemanticGraph
System.out.println (sentence.get (SemanticGraphCoreAnnotations.EnhancedDependenciesAnnotation.class) .ToString (SemanticGraph.OutputFormat.LIST));
// Получаем тройки OpenIE для предложения
Коллекция triples = суждение.get (NaturalLogicAnnotations.RelationTriplesAnnotation.class);
// Распечатать тройки
для (RelationTriple triple: triples) {
System.out.println (triple.confidence + "\ t" +
triple.subjectLemmaGloss () + "\ t" +
triple.relationLemmaGloss () + "\ t" +
triple.objectLemmaGloss ());
}
// Альтернативно, чтобы запустить только, например, разделитель предложений:
List clauses = new OpenIE (реквизит) .clausesInSentence (предложение);
for (предложение SentenceFragment: пункты) {
System.out.println (clause.parseTree.toString (SemanticGraph.OutputFormat.LIST));
}
System.out.println ();
}
}
}
Заранее спасибо.