Dieser Artikel richtet sich an Personen, die noch nie mit Stanford nlp gearbeitet haben und die Notwendigkeit haben, ihn zu studieren und so schnell wie möglich anzuwenden.
Diese Software ist weit verbreitet, und insbesondere unser Unternehmen -
BaltInfoCom - verwendet dieses Programm.
Zuerst müssen Sie eine einfache Sache verstehen: Stanford NLP arbeitet nach dem Prinzip der Annotation von Wörtern, dh einer oder mehrerer Annotationen, wie POS (Teil der Sprache - Teil der Sprache), NER (Named-Entity Recognizing - Named Entity) und usw.
Das erste, was ein Anfänger sieht, wenn er die Stanford NLP-Website im Abschnitt "
Schnellstart " besucht, ist das folgende Design:
Properties props = new Properties(); props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,regexner,parse,depparse,coref"); StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Hier ist StanfordCoreNLP ein Förderer, zu dessen Eingabe unser Text in ein CoreDocument-Objekt vorverpackt ist. StanfordCoreNLP, dies ist das wichtigste und am häufigsten verwendete Objekt in der gesamten Struktur, mit dem alle Hauptarbeiten ausgeführt werden.
Zuerst legen wir die Parameter in StanfordCoreNLP fest und geben die Implementierung der von uns benötigten Aktionen an. Darüber hinaus finden Sie alle möglichen Kombinationen dieser Parameter auf der offiziellen Website unter
diesem Link.
- Tokenize - dementsprechend Tokenization
- ssplit - Aufteilung in einen Satz
- pos - Definition eines Wortteils
- Lemma - Hinzufügen zu jedem Wort seine ursprüngliche Form
- ner - Definition benannter Entitäten wie "Organisation", "Gesicht" usw.
- Regexner - Definieren benannter Entitäten mithilfe regulärer Ausdrücke
- Analyse jedes Wortes nach Semantik (Geschlecht, Anzahl usw.)
- depparse - Analysiert Syntaxabhängigkeiten zwischen Wörtern in einem Satz
- Kernsuche nach Verweisen auf dieselbe benannte Entität im Text, zum Beispiel „Mary“ und „she“
Hier ist ein Beispiel dafür, wie Annotatoren (parse und depparse) zusammenarbeiten:

Wenn Sie die Anmerkungen zu den Token nicht verstehen, finden Sie auf diesen Websites deren Bedeutung:
Bedeutungen von Verbindungen in Sätzen ,
Bedeutungen von Wortarten .
Für jeden dieser Parameter finden Sie
hier im Abschnitt "Annotatoren" zusätzliche Flags zur weiteren Feinabstimmung.
Diese Konstrukte werden festgelegt, wenn Sie die integrierten Stanford NLP-Modelle verwenden möchten. Sie können sie jedoch auch manuell mithilfe der Methode addAnnotator (Annotator ...) oder durch Auffüllen der Parameter vor dem Erstellen des StanfordCoreNLP-Objekts festlegen.
Nun erfahren Sie, wie Sie benannte Entitäten aus dem Text extrahieren können. Zu diesem Zweck verfügt Stanford NLP über drei integrierte Klassen, die auf regulären Ausdrücken basieren, und eine Klasse zum Markieren von Token im Modell.
Klassen für reguläre Ausdrücke:
- TokensRegexAnnotator - Annotator, der nach den Regeln arbeitet - SequenceMatchRules .
Betrachten Sie ein Beispiel für eine Zuordnung, die auf diesen Regeln basiert.
ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" } $EMAIL = "/.*([A-z0-9-]+?)(@)([A-z0-9-]+?).*/" { ruleType: "tokens", pattern: (([]) ($EMAIL)), action: (Annotate($0, ner, "MAIL")), priority:0 }
Die erste Zeile gibt an, welche Art von Tags in diese Vorlage eingefügt werden.
Im zweiten erstellen wir eine Variable, die gemäß den Regeln mit dem Zeichen "$" beginnen und am Anfang der Zeile stehen soll.
Erstellen Sie danach einen Block, in dem wir den Regeltyp festlegen. Dann eine Vorlage zum Vergleich (in unserem Fall sagen wir, dass wir "[]" brauchen - jedes Token, nach dem unsere Variable $ EMAIL kommt. Danach setzen wir die Aktion, in unserem Fall möchten wir das Token mit Anmerkungen versehen.
Bitte beachten Sie, dass im Beispiel "[]" und "$ EMAIL" in Klammern eingeschlossen sind, da $ 0 angibt, welche Erfassungsgruppe aus der gefundenen Vorlage hervorgehoben werden soll, während die Erfassungsgruppe eine in Klammern eingeschlossene Gruppe bedeutet. Wenn Sie 0 setzen, werden in der Phrase "sobaka@mail.ru mail" alle Token als "MAIL" bezeichnet. Wenn Sie 1 festlegen (dh die erste Erfassungsgruppe), wird nur das Wort "Mail" mit Anmerkungen versehen. wenn 2, dann nur sobaka@mail.ru.
In Situationen, in denen nach zwei Regeln dasselbe Token unterschiedlich definiert werden kann, können Sie die Priorität der Regel relativ zur anderen festlegen. Zum Beispiel kann es im Fall des folgenden Satzes - "Haus $ 25" - zwei widersprüchliche Regeln geben, nach denen eine die Nummer 25 als die Nummer des Hauses und gemäß der zweiten als ihr Wert bestimmt wird. - RegexNERAnnotator - Dieser Annotator arbeitet mit dem RegexNERSequenceClassifier .
Das Mapping für ihn ist wie folgt
regex1 TYPE overwritableType1,Type2... priority
Hier ist regex1 ein regulärer Ausdruck im Format TokenSequencePattern .
TYPE ist der Name der benannten Entität.
overwritableType1, Type2 ... - Typen, die wir in einer umstrittenen Situation ersetzen können.
Priorität - Priorität für die oben beschriebenen Streitigkeiten.
Bitte beachten Sie, dass in dieser Zuordnung alle Spalten durch Tabulatoren getrennt werden müssen. - TokensRegexNERAnnotator
Dieser Annotator unterscheidet sich vom vorherigen darin, dass er die TokensRegex-Bibliothek für reguläre Ausdrücke verwendet, genau wie der erste Annotator, mit dem Sie flexiblere Regeln für den Abgleich verwenden können. sowie in der Lage zu sein, andere Tag-Werte als das NER-Tag aufzuzeichnen.
Die Zuordnung dafür erfolgt nach den Regeln von RegexNERAnnotator
Markieren von Text durch ein Modell mit NERClassifierCombiner
Um diese Klasse nutzen zu können, müssen Sie zuerst Ihr Modell haben oder trainieren.
Wie das geht, finden Sie
hier ;
Nachdem Sie das Modell trainiert haben, müssen Sie nur noch einen NERClassifierCombiner erstellen, der den Pfad zum darin enthaltenen Modell angibt, und die Klassifizierungsmethode aufrufen.
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false, serialized_model); String text = "Some lucky people working in BaltInfoCom Org."; List<List<CoreLabel>> out = classifier.classify(text);
Eine vollständige Liste der Annotatoren finden Sie
hier .
Wenn Sie Stanford NLP für die russische Sprache verwenden müssen, kann ich Ihnen außerdem raten,
hierher zu kommen. Es gibt Modelle zur Identifizierung von Wortarten (pos-tagger) und zur Identifizierung von Beziehungen in Sätzen (Abhängigkeitsparser).
Dort dargestellte Arten von Tags:
russian-ud-pos.tagger ist nur ein tagger,
russian-ud-mfmini.tagger - mit der Hauptliste der morphologischen Merkmale,
russian-ud-mf.tagger - mit einer vollständigen Liste morphologischer Merkmale, deren Mapping-Beispiel
hier eingesehen werden kann.