[JAVA] Obtenez des résultats détaillés de l'analyse morphologique avec Apache Solr 7.6 + SolrJ

Aperçu

Il existe de nombreuses façons de voir les résultats du traitement du langage naturel dans la console de gestion, mais je n'ai pas trouvé de moyen de l'appeler en Java, alors j'ai cherché. Dans la console d'administration, vous pouvez obtenir le même résultat en utilisant la sortie détaillée sur la page Analyse.

code

package hello.solr;

import java.util.ArrayList;
import java.util.HashMap;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.request.DocumentAnalysisRequest;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;

public class HelloAnalysisEnglishSimple {

	@SuppressWarnings({ "unchecked", "rawtypes" })
	static public void main(String[] args) throws Exception {

		String fieldName = "field_text_opennlp";
		String coreName = "core_nlp";
		String text = "Hello, I'm a data engineer of Nissan Motor.";

		HashMap<String, SolrInputField> fields = new HashMap<String, SolrInputField>();

		// Document
		SolrInputDocument doc = new SolrInputDocument(fields);
		{
			// Document Field
			doc.setField("id", "0");
			doc.setField(fieldName, text);
		}

		// Request
		DocumentAnalysisRequest request = new DocumentAnalysisRequest();
		request.addDocument(doc);

		String solrLocation = "http://localhost:8983/solr/" + coreName;

		// NLP Client
		SolrClient client = new HttpSolrClient.Builder(solrLocation).build();

		// NLP Response
		NamedList<Object> response = client.request(request);

		// Get analysis response
		NamedList<Object> analysis = (NamedList<Object>) response
				.get("analysis");

		SimpleOrderedMap f = ((SimpleOrderedMap) ((SimpleOrderedMap) analysis
				.getVal(0)).get(fieldName));

		SimpleOrderedMap index = (SimpleOrderedMap) f.get("index");

		NamedList nlpResult = (NamedList) index.getVal(0);

		ArrayList wordListPOS = (ArrayList) nlpResult
				.get("org.apache.lucene.analysis.opennlp.OpenNLPPOSFilter");

		for (int n = 0; n < wordListPOS.size(); n++) {
			SimpleOrderedMap wordPOS = (SimpleOrderedMap) wordListPOS.get(n);
			System.err.println("text='" + wordPOS.get("text") + "',type='"
					+ wordPOS.get("type") + "'");
		}

	}
}

résultat

text='Hello',type='UH'
text=',',type=','
text='I',type='PRP'
text=''m',type='VBP'
text='a',type='DT'
text='data',type='NN'
text='engineer',type='NN'
text='of',type='IN'
text='Nissan',type='NNP'
text='Motor',type='NNP'
text='.',type='.'

Supplément

Voir ci-dessous pour les valeurs de type. https://www.ibm.com/support/knowledgecenter/ja/SS5RWK_3.5.0/com.ibm.discovery.es.ta.doc/iiysspostagset.htm

Recommended Posts

Obtenez des résultats détaillés de l'analyse morphologique avec Apache Solr 7.6 + SolrJ
Obtenez des résultats détaillés de l'analyse morphologique avec Apache Solr 7.6 + SolrJ (japonais)
NLP4J [006-030] 100 coups de traitement du langage avec NLP4J # 30 Lecture des résultats d'analyse morphologique
Démarrez Apache Solr avec Embedded.
J'ai essayé l'analyse morphologique avec MeCab
Obtenez des résultats de validation avec Spring Boot
Comment réaliser une recherche hybride en utilisant l'analyse morphologique et Ngram avec Solr
Analyse morphologique anglaise comme MeCab avec OpenNLP
Analyse morphologique chinoise comme Mecab avec FNLP