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".
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.
Sa paume
Sur la paume
Visage de l'élève
Devrait faire face
Au milieu du visage
Dans le trou
Avec NLP4J, vous pouvez facilement effectuer le traitement du langage naturel en Java!
https://www.nlp4j.org/
Recommended Posts