[JAVA] Analyse morphologique anglaise comme MeCab avec OpenNLP

Aperçu

Je veux faire des choses comme l'analyse morphologique japonaise (MeCab) en anglais, donc j'utilise Apache OpenNLP

environnement

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

Objectif

Lors de l'utilisation de MeCab sur la ligne de commande

Il fait beau aujourd'hui.       ↓       ↓ Aujourd'hui "Nomenclature, Avocat possible, \ *, \ *, \ *, \ *, Aujourd'hui, Kyo, Kyo" Est "auxiliaire, affiliation, \ *, \ *, \ *, \ *, ha, ha, wa" Bon "Adjectif, Indépendance, \ *, \ *, Adjectif / Bon, Forme de base, Bon, Bon, Bon" Météo "Nomenclature, Général, \ *, \ *, \ *, \ *, Météo, Tenki, Tenki" "Verbe auxiliaire, \ *, \ *, \ *, mort spéciale, forme de base, est, mort, mort" Ne "Auxiliaire, auxiliaire final, \ *, \ *, \ *, \ *, ne, ne, ne" .. "Symboles, signes de ponctuation, \ *, \ *, \ *, \ *,.,.,."

Et la morphologie et les informations de morphologie sont affichées

A partir de ces informations, nous obtenons trois «morphologie», «une partie des mots» et «forme de base» et les utilisons pour l'analyse.

Je veux faire la même chose en anglais, donc j'utilise OpenNLP pour obtenir la «morphologie», les «parties» et la «forme de base» à partir de phrases anglaises.

table des matières

  1. Fonctions fournies par OpenNLP
  2. Implémentation Java
  3. Préparation Java
  4. Séparation
  5. Décomposition en mot partiel
  6. Prototype Word

1. Fonctions fournies par OpenNLP

Depuis OpenNLP lui-même prend en charge plusieurs langues, il a les fonctions suivantes.

Cette fois, parce que je veux acquérir «élément de forme», «paroles de partie» et «forme de base»

Manipuler

2. Implémentation Java

1. Préparation

Créez un projet maven et ajoutez ce qui suit à pom.xml

<dependency>
  <groupId>org.apache.opennlp</groupId>
  <artifactId>opennlp-tools</artifactId>
  <version>1.8.4</version>
</dependency>

Téléchargez également les fichiers suivants à partir du site OpenNLP et placez-les dans le projet afin que le chemin passe.

2. Séparation

//Paramètres de Tokenizer
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. Décomposition en mot partiel

// Part-of-définition du baliseur vocal
InputStream posModelIn = new FileInputStream("~/en-pos-maxent.bin");
POSModel posModel = new POSModel(posModelIn);
POSTaggerME posTagger = new POSTaggerME(posModel);

//Utiliser des données séparées
String [] tags = posTagger.tag(morphemes);
System.out.println(Arrays.asList(tags));
>> [PRP, VBZ, DT, JJ, NN, NN, .]

4. Prototype Word

//Paramètres du lemmatiseur
InputStream dictLemmatizer = new FileInputStream("~/en-lemmatizer.txt");
DictionaryLemmatizer lemmatizer = new DictionaryLemmatizer(dictLemmatizer);

//Utilisez des données séparées et des données à temps partiel
String [] lemmas = lemmatizer.lemmatize(morphemes, tags);
System.out.println(Arrays.asList(lemmas));
>> [it, be, a, fine, day, today, O]

Puisque le résultat du prototypage de mots est souvent "O" plus que ce à quoi je m'attendais, il est nécessaire de faire des ajustements tels que le remplacer par des données morphologiques.

Lien de référence

Recommended Posts

Analyse morphologique anglaise comme MeCab avec OpenNLP
Analyse morphologique chinoise comme Mecab avec FNLP
J'ai essayé l'analyse morphologique avec MeCab
Analyse morphologique en Java avec Kuromoji
NLP4J [006-030] 100 coups de traitement du langage avec NLP4J # 30 Lecture des résultats d'analyse morphologique
Obtenez des résultats détaillés de l'analyse morphologique avec Apache Solr 7.6 + SolrJ