2016-07-11 20 views
2

erkennen Ich verwende derzeit OpenNLP mit UIMA, um Wörter in einem Satz zu kennzeichnen. Es ist wichtig, dass ein einzelnes Wort mehr als einmal beschriftet werden kann. Zum Beispiel sollte David Cronenberg als director und person markiert werden.Mehrere benannte Entitätstypen für eine Nominalphrase mit NLP

Ich weiß, dass der Trainingsprozess korrekt implementiert ist, da ich eine benutzerdefinierte Modelldatei habe und wenn alle Sätze mit einem der Labels aus der Modelldatei entfernt werden, wird das andere Label erkannt.

Ich wäre vorzugsweise in der Lage, weiterhin OpenNLP zu verwenden, um Wörter zu verdoppeln. Gibt es eine Möglichkeit, dies zu tun? Wenn nicht, ist dies mit einer anderen Bibliothek wie Stanford CoreNLP möglich.

Der Code, der die Etiketten bekommt unter:

List<NamedEntity> entities = JCasUtil.selectCovered(NamedEntity.class, aConstituent); 
    if (!entities.isEmpty()) { 
     // is never more than 1 
    } 

Und einige Beispieltrainingsdaten unter (es gibt Hunderte von Zeilen ähnlich wie diese.)

<START:person> David Cronenberg <END> directed <START:film> Crash <END> . 
<START:director> David Cronenberg <END> directed <START:film> Scanners <END> . 
+0

Erreichen Sie die Entwickler von OpenNLP. Vielleicht finden Sie hier Hilfe, aber Sie werden dort wahrscheinlich mehr finden. Wenn es Open Source ist, dann schauen Sie in den Code - Sie können dort nicht nur Ihre Antwort finden, sondern auch eine Lösung. –

Antwort

2

Zug getrennt Klassifizierer für die verschiedene Arten von benannten Einheiten, z eine für person und eine für director. Fügen Sie dann mehrere OpenNlpNamedEntityRecognizer-Komponenten zu Ihrer Pipeline hinzu, die jeweils mit einem Ihrer Modelle konfiguriert sind.