[JAVA] NLP4J [006-034b] Essayez de faire en sorte que l'annotateur de 100 traitements de langage frappe # 34 "A B" avec NLP4J

Retour à l'index

Points à améliorer

NLP4J [006-034] 100 coups de traitement de langage avec NLP4J # 34 "A B" codent directement le processus pour extraire "A B" J'ai écrit. La partie suivante.

//Trouvez "A à B"
String meishi_a = null;
String no = null;

for (Keyword kwd : kwds) {
	if (meishi_a == null && kwd.getFacet().equals("nom")) {
		meishi_a = kwd.getLex();
	} //
	else if (meishi_a != null && no == null && kwd.getLex().equals("de")) {
		no = kwd.getLex();
	} //
	else if (meishi_a != null && no != null && kwd.getFacet().equals("nom")) {
		System.err.println(meishi_a + no + kwd.getLex());
		meishi_a = null;
		no = null;
	} //
	else {
		meishi_a = null;
		no = null;
	}
}

La logique ne peut pas être réutilisée avec ce type de méthode d'extraction de mot-clé (annotation).

Annotator

Par conséquent, NLP4J fournit Annotator, qui est un mécanisme pour ajouter une annotation indépendamment. Le mécanisme est simple: implémentez l'interface nlp4j.DocumentAnnotator.

Si vous préparez la logique ci-dessus en tant que code d'annotateur, ce sera comme suit. "B of A" est simplement sorti sous forme de chaîne de caractères et ajouté en tant que nouveau mot-clé, pas à la fin. Un identifiant (= facette: facette) appelé "mot_nn_no_nn" est défini pour que le type de mot-clé puisse être identifié.

package nlp4j.annotator;
import java.util.ArrayList;
import nlp4j.AbstractDocumentAnnotator;
import nlp4j.Document;
import nlp4j.DocumentAnnotator;
import nlp4j.Keyword;
import nlp4j.impl.DefaultKeyword;

/**
 *"Nomenclature" est remplacé par "mot"_nn_no_Extraire en tant que mot clé "nn".
 * @author Hiroki Oya
 */
public class Nokku34Annotator extends AbstractDocumentAnnotator implements DocumentAnnotator {
	@Override
	public void annotate(Document doc) throws Exception {
		ArrayList<Keyword> newkwds = new ArrayList<>();
		Keyword meishi_a = null;
		Keyword no = null;
		for (Keyword kwd : doc.getKeywords()) {
			if (meishi_a == null && kwd.getFacet().equals("nom")) {
				meishi_a = kwd;
			} //
			else if (meishi_a != null && no == null && kwd.getLex().equals("de")) {
				no = kwd;
			} //
			else if (meishi_a != null && no != null && kwd.getFacet().equals("nom")) {
				Keyword kw = new DefaultKeyword();
				kwd.setLex(meishi_a.getLex() + no.getLex() + kwd.getLex());
				kwd.setFacet("word_nn_no_nn");
				kwd.setBegin(meishi_a.getBegin());
				kwd.setEnd(kwd.getEnd());
				kwd.setStr(meishi_a.getStr() + no.getStr() + kwd.getStr());
				kwd.setReading(meishi_a.getReading() + no.getReading() + kwd.getReading());
				newkwds.add(kw);
				meishi_a = null;
				no = null;
			} //
			else {
				meishi_a = null;
				no = null;
			}
		}
		doc.addKeywords(newkwds);
	}
}

Nous avons maintenant séparé et défini la logique pour extraire le mot-clé "A vers B".

Utilisation de l'annotateur

package nlp4j.nokku.chap4;

import java.util.List;
import nlp4j.Document;
import nlp4j.DocumentAnnotator;
import nlp4j.DocumentAnnotatorPipeline;
import nlp4j.Keyword;
import nlp4j.crawler.Crawler;
import nlp4j.crawler.TextFileLineSeparatedCrawler;
import nlp4j.impl.DefaultDocumentAnnotatorPipeline;
import nlp4j.annotator.Nokku34Annotator;

public class Nokku34b {

	public static void main(String[] args) throws Exception {

		//Utilisez le robot d'exploration de fichiers texte fourni par NLP4J
		Crawler crawler = new TextFileLineSeparatedCrawler();
		crawler.setProperty("file", "src/test/resources/nlp4j.crawler/neko_short_utf8.txt");
		crawler.setProperty("encoding", "UTF-8");
		crawler.setProperty("target", "text");

		//Exploration de documents
		List<Document> docs = crawler.crawlDocuments();

		//Définition du pipeline NLP (processus en connectant plusieurs processus en tant que pipeline)
		DocumentAnnotatorPipeline pipeline = new DefaultDocumentAnnotatorPipeline();
		{
			// Yahoo!Annotateur utilisant l'API d'analyse morphologique du Japon
			DocumentAnnotator annotator = new YJpMaAnnotator();
			pipeline.add(annotator);
		}
		{
			//"Nomenclature" est remplacé par "mot"_nn_no_Extraire en tant que mot clé "nn".
			Nokku34Annotator annotator = new Nokku34Annotator(); //← Le numéro 34 est seulement ici
			pipeline.add(annotator); //← Le numéro 34 est seulement ici
		}
		//Exécution du traitement des annotations
		pipeline.annotate(docs);

		for (Document doc : docs) {
			for (Keyword kwd : doc.getKeywords("word_nn_no_nn")) {
				System.err.println(kwd.getStr());
			}
		}
	}
}

Le processus d'extraction de "B of A" n'est plus que deux lignes!

 //"Nomenclature" est remplacé par "mot"_nn_no_Extraire en tant que mot clé "nn".
 Nokku34Annotator annotator = new Nokku34Annotator();
 pipeline.add(annotator);

De cette façon, vous pouvez définir un grand nombre de vos propres annotateurs pour étendre davantage votre traitement du langage naturel.

résultat

Sa paume
Sur la paume
Visage de l'élève
Devrait faire face
Au milieu du visage
Dans le trou

Résumé

Avec NLP4J, vous pouvez facilement effectuer le traitement du langage naturel en Java!

URL du projet

https://www.nlp4j.org/ NLP4J_N_128.png


Retour à l'index

Recommended Posts

NLP4J [006-034b] Essayez de faire en sorte que l'annotateur de 100 traitements de langage frappe # 34 "A B" avec NLP4J
NLP4J [006-034c] 100 coups de traitement du langage avec NLP4J # 34 Essayez de résoudre plus intelligemment "A's B" (édition finale)
NLP4J [006-032] 100 traitements linguistiques avec NLP4J Knock # 32 Prototype de verbe
NLP4J [006-034] 100 coups de traitement de langage avec NLP4J # 34 "A B"
[swift5] Essayez de créer un client API avec différentes méthodes
NLP4J [006-031] Le traitement de 100 langues frappe avec le verbe NLP4J # 31
NLP4J [006-033] 100 coups de traitement de langage avec NLP4J # 33
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Créer un annotateur qui utilise kuromoji avec NLP4J [007]
Comment rendre une image partiellement transparente avec le traitement
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
Essayez de faire un programme d'addition en plusieurs langues
NLP4J [006-030] 100 coups de traitement du langage avec NLP4J # 30 Lecture des résultats d'analyse morphologique
[Débutant] Essayez de créer un jeu RPG simple avec Java ①
Initialisation avec une chaîne vide vers une instance de type Java String
Comment créer une application à l'aide de Tensorflow avec Android Studio
Qu'est-ce qu'un objet immuable? [Explication comment faire]