Ich möchte Dinge wie die japanische morphologische Analyse (MeCab) auf Englisch durchführen, also verwende ich Apache OpenNLP
OS: Windows7 64bit Sprache: Java8 IDE: Eclipse4.6.1
Bei Verwendung von MeCab in der Befehlszeile
Heute ist schönes Wetter. ↓ ↓ Heute "Nomenklatur, Anwalt möglich, \ *, \ *, \ *, \ *, Heute, Kyo, Kyo" Ist "Hilfs, Zugehörigkeit, \ *, \ *, \ *, \ *, ha, ha" Gut "Adjektiv, Unabhängigkeit, \ *, \ *, Adjektiv / Gut, Grundform, Gut, Gut, Gut" Wetter "Nomenklatur, Allgemein, \ *, \ *, \ *, \ *, Wetter, Tenki, Tenki" "Hilfsverb, \ *, \ *, \ *, besonderer Tod, Grundform, ist, Tod, Tod" Ne "Auxiliary, Final Auxiliary, \ *, \ *, \ *, \ *, ne, ne, ne" .. "Symbole, Satzzeichen, \ *, \ *, \ *, \ *,.,.,."
Morphologie- und Morphologieinformationen werden angezeigt
Aus diesen Informationen erhalten wir drei "Morphologie", "Wortbestandteil" und "Grundform" und verwenden sie zur Analyse.
Ich möchte dasselbe auf Englisch tun, also verwende ich OpenNLP, um "Morphologie", "Wortbestandteil" und "Grundform" aus englischen Sätzen zu erhalten.
Da OpenNLP selbst mehrere Sprachen unterstützt, verfügt es über die folgenden Funktionen.
Diesmal, weil ich "Formularelement", "Teiltexte" und "Grundform" erwerben möchte.
Griff
Erstellen Sie ein Maven-Projekt und fügen Sie pom.xml Folgendes hinzu
<dependency>
<groupId>org.apache.opennlp</groupId>
<artifactId>opennlp-tools</artifactId>
<version>1.8.4</version>
</dependency>
Laden Sie außerdem die folgenden Dateien von der OpenNLP-Site herunter und fügen Sie sie in das Projekt ein, damit der Pfad übergeben wird.
en-token.bin
Binärdatei für Tokenizer
Ziel herunterladen http://opennlp.sourceforge.net/models-1.5/
en-pos-maxent.bin(en-pos-perceptron.bin)
Binärdatei für Part-of-Speech-Tagger
Ziel herunterladen http://opennlp.sourceforge.net/models-1.5/
en-lemmatizer.txt
Prototyp-Wörterbuch der in Lemmatizer verwendeten Wörter
Ziel herunterladen https://raw.githubusercontent.com/richardwilly98/elasticsearch-opennlp-auto-tagging/master/src/main/resources/models/en-lemmatizer.dict
En-lemmatizer.txt verwendet die verknüpften Daten als Textdaten.
//Tokenizer-Einstellungen
InputStream modelIn = new FileInputStream("~/en-token.bin");
TokenizerModel model = new TokenizerModel(modelIn);
Tokenizer tokenizer = new TokenizerME(model);
message = "It is a fine day today.";
String[] morphemes = tokenizer.tokenize(message);
System.out.println(Arrays.asList(morphemes));
>> [It, is, a, fine, day, today, .]
// Part-of-Spracheinstellung Tagger
InputStream posModelIn = new FileInputStream("~/en-pos-maxent.bin");
POSModel posModel = new POSModel(posModelIn);
POSTaggerME posTagger = new POSTaggerME(posModel);
//Verwenden Sie getrennte Daten
String [] tags = posTagger.tag(morphemes);
System.out.println(Arrays.asList(tags));
>> [PRP, VBZ, DT, JJ, NN, NN, .]
//Lemmatizer-Einstellungen
InputStream dictLemmatizer = new FileInputStream("~/en-lemmatizer.txt");
DictionaryLemmatizer lemmatizer = new DictionaryLemmatizer(dictLemmatizer);
//Verwenden Sie getrennte Daten und Teilzeitdaten
String [] lemmas = lemmatizer.lemmatize(morphemes, tags);
System.out.println(Arrays.asList(lemmas));
>> [it, be, a, fine, day, today, O]
Da das Ergebnis des Wortprototyping oft "O" mehr ist als ich erwartet hatte, müssen Anpassungen vorgenommen werden, z. B. das Ersetzen durch morphologische Daten.
Recommended Posts