[JAVA] Englische morphologische Analyse wie MeCab mit OpenNLP

Überblick

Ich möchte Dinge wie die japanische morphologische Analyse (MeCab) auf Englisch durchführen, also verwende ich Apache OpenNLP

Umgebung

OS: Windows7 64bit Sprache: Java8 IDE: Eclipse4.6.1

Zweck

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.

Inhaltsverzeichnis

  1. Von OpenNLP bereitgestellte Funktionen
  2. Java-Implementierung
  3. Java-Vorbereitung
  4. Trennung
  5. Teilwortzerlegung
  6. Word-Prototyp

1. Von OpenNLP bereitgestellte Funktionen

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

2. Java-Implementierung

1. Vorbereitung

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.

2. Trennung

//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, .]

3. Teilwortzerlegung

// 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, .]

4. Word-Prototyp

//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.

Referenzlink

Recommended Posts

Englische morphologische Analyse wie MeCab mit OpenNLP
Chinesische morphologische Analyse wie Mecab mit FNLP
Ich habe eine morphologische Analyse mit MeCab versucht
Morphologische Analyse in Java mit Kuromoji
NLP4J 100 Sprachverarbeitungsklopfen mit NLP4J # 30 Lesen morphologischer Analyseergebnisse
Erhalten Sie detaillierte Ergebnisse der morphologischen Analyse mit Apache Solr 7.6 + SolrJ