NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces en Java

Retour à l'index: [002] Analyse de la syntaxe> [003] Statistiques des paroles des parties Traitement> [004] Traitement statistique de l'analyse syntaxique

Faisons une analyse de texte en utilisant le résultat d'une analyse morphologique et d'un traitement statistique simple en utilisant NLP4J.

«L'analyse morphologique» et «l'analyse syntaxique» s'apparentent à «comment utiliser un couteau de cuisine» en termes de cuisine. Si vous ajoutez "traitement statistique" en plus de "analyse morphologique" et "analyse syntaxique", je pense que l'analyse de texte = cuisine. Le traitement statistique ici utilise des traitements simples, mais je pense que c'est aussi une bonne idée d'inclure l'apprentissage automatique et le traitement statistique compliqué.

Maintenant, supposons que vous ayez le document suivant. Une ligne est un enregistrement.

"Toyota", "Je fabrique une voiture hybride."
"Toyota", "Nous vendons des voitures hybrides."
"Toyota", "Je fabrique une voiture."
"Toyota", "Je vends des voitures."
"Nissan", "Je fabrique un EV."
"Nissan", "Je vends EV."
"Nissan", "Je vends des voitures."
"Nissan", "Nous sommes affiliés à Renault."
"Nissan", "Je vends des voitures légères."
"Honda", "Je fabrique une voiture."
"Honda", "Je vends des voitures."
"Honda", "Je fabrique un vélo."
"Honda", "Je vends des vélos."
"Honda", "Je vends des voitures légères."
"Honda", "Je fabrique une voiture légère."

Lorsque vous divisez le document en «Toyota», «Nissan» et «Honda», quels sont les «mots-clés caractéristiques»? Je vais essayer de mettre des mots-clés caractéristiques en utilisant NLP4J. (Pas de traitement difficile) Le fait est que le traitement statistique est effectué à l'aide de la classe "SimpleDocumentIndex".

Maven

<dependency>
  <groupId>org.nlp4j</groupId>
  <artifactId>nlp4j</artifactId>
  <version>1.0.0.0</version>
</dependency>

Code1

public class HelloTextMiningMain1 {
	public static void main(String[] args) throws Exception {
//Préparation de documents (lecture CSV etc. est également possible)
		List<Document> docs = new ArrayList<Document>();
		{
			docs.add(createDocument("Toyota", "Je fabrique une voiture hybride."));
			docs.add(createDocument("Toyota", "Nous vendons des voitures hybrides."));
			docs.add(createDocument("Toyota", "Je fabrique une voiture."));
			docs.add(createDocument("Toyota", "Je vends des voitures."));
			docs.add(createDocument("Nissan", "Je fabrique un EV."));
			docs.add(createDocument("Nissan", "Je vends EV."));
			docs.add(createDocument("Nissan", "Je vends des voitures."));
			docs.add(createDocument("Nissan", "Nous sommes affiliés à Renault."));
			docs.add(createDocument("Nissan", "Je vends des voitures légères."));
			docs.add(createDocument("Honda", "Je fabrique une voiture."));
			docs.add(createDocument("Honda", "Je vends des voitures."));
			docs.add(createDocument("Honda", "Je fabrique un vélo."));
			docs.add(createDocument("Honda", "Je vends des vélos."));
			docs.add(createDocument("Honda", "Je vends des voitures légères."));
			docs.add(createDocument("Honda", "Je fabrique une voiture légère."));
		}

//Annotateur d'analyse morphologique
		DocumentAnnotator annotator = new YJpMaAnnotator();
//Traitement de l'analyse morphologique
		annotator.annotate(docs);

//Préparation de l'index des mots clés (traitement statistique)
		Index index = new SimpleDocumentIndex();
//Processus d'indexation des mots-clés
		index.addDocuments(docs);
		{
			//Acquisition de mots-clés à forte cooccurrence
			List<Keyword> kwds = index.getKeywords("nom", "item=Nissan");
			System.out.println("Keywords(nom) for Nissan");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("%.1f,%s", kwd.getCorrelation(), kwd.getLex()));
			}
		}
		{
			//Acquisition de mots-clés à forte cooccurrence
			List<Keyword> kwds = index.getKeywords("nom", "item=Toyota");
			System.out.println("Keywords(nom) for Toyota");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("%.1f,%s", kwd.getCorrelation(), kwd.getLex()));
			}
		}
		{
			//Acquisition de mots-clés à forte cooccurrence
			List<Keyword> kwds = index.getKeywords("nom", "item=Honda");
			System.out.println("Keywords(nom) for Honda");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("%.1f,%s", kwd.getCorrelation(), kwd.getLex()));
			}
		}
	}

	static Document createDocument(String item, String text) {
		Document doc = new DefaultDocument();
		doc.putAttribute("item", item);
		doc.setText(text);
		return doc;
	}

}

Output

Keywords(nom) for Nissan
3.0,EV
3.0,Renault
3.0,Alliance
1.0,Voiture légère
0.6,Voiture
Keywords(nom) for Toyota
3.8,hybride
3.8,voiture
1.5,Voiture
Keywords(nom) for Honda
2.5,bicyclette
1.7,Voiture légère
1.0,Voiture

C'est facile! Le résultat est comme ça! Cela correspond-il au sens humain?

Revenir à l'index

Introduction de NLP4J- [000] Traitement du langage naturel avec Java Index

URL du projet

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


Recommended Posts

NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces en Java
NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java
Présentation de NLP4J- [000] Natural Language Processing Index en Java
NLP4J [002] Essayez l'analyse syntaxique du japonais à l'aide de Yahoo! Developer Network Japanese Dependency Analysis (V1) en Java
NLP4J [001b] Analyse morphologique en Java (utilisant kuromoji)
Essayez d'utiliser RocksDB avec Java
Traitement parallèle et parallèle dans divers langages (édition Java)
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
[Android / Java] Transition d'écran et traitement de retour par fragments
Convertir JSON et YAML en Java (en utilisant Jackson et SnakeYAML)
NLP4J [005-1] Essayez l'analyse Twitter avec Twitter4J et NLP4J (collecte de données)
Utiliser Watson Conversation comme NLP (Java) (traitement du langage naturel)
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
NLP4J [006-030] 100 coups de traitement du langage avec NLP4J # 30 Lecture des résultats d'analyse morphologique
[Java] Changez la langue et les paramètres régionaux en anglais avec les options JVM
Agrégation et analyse de journaux (utilisation d'AWS Athena en Java)
Traduire à l'aide de l'API de texte Microsoft Translator en Java (japonais → anglais)
Conseils d'utilisation de Salesforce SOAP et de l'API Bulk en Java