2016-04-29 4 views
1

Ich verwende den Stanford NER mit einem 3-Klassen-Modell, um PERSON, LOCATION und ORGANISATION in einer Datei zu identifizieren. Es funktioniert gut, es sei denn, es gibt Namen durch eine neue Zeile getrennt:
JANE DOE
JOHN DOE
JANE SMITH
Stanford NER Classifier Zeilenvorschub Ausgabe

Die NER Tools denkt, diese drei Namen als ein großer Name und nicht drei Namen. Wenn ich nach jedem Namen ein Komma setze, werden die drei Namen angezeigt. Wie kann ich dem Tool mitteilen, dass es die neue Zeile verwenden soll, um die drei Namen zu trennen?

Antwort

1

Wenn die Namen als aufeinanderfolgende Token im selben "Satz" enden, wird das passieren. Die Hauptsache, die Sie tun können, ist, dass das System in Zeilenumbrüchen aufgeteilt wird, dann erhalten Sie einen separaten Satz für jeden Namen und die Dinge werden gut funktionieren. Im Allgemeinen funktioniert das gut, wenn Ihr Text als ein Absatz pro Zeile formatiert ist (mit weichem Zeilenumbruch, wie es in modernen Texten üblich ist), aber schlecht, wenn Sie Text mit harten Zeilenumbrüchen haben (nicht an Satz-/Absatzgrenzen)), denn dann behandelt das System jede Zeile fälschlicherweise als Satz. Befehle, die diese für beide Aufruf Stanford NER direkt tun und durch CoreNLP sind:

java edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators "tokenize,ssplit,pos,lemma,ner" -file taylorswift.txt -outputFormat conll -ssplit.newlineIsSentenceBreak always

java edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier edu/stanford/nlp/models/ner/english.all.3class.distsim.crf.ser.gz -textFile taylorswift.txt -tokenizerOptions tokenizeNLs=true