NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java

Retour à l'index: [003] Traitement statistique des paroles de partie> [004] Syntaxe Traitement statistique de l'analyse> [005-1] NLP4J + Twitter4J (collecte de données)

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

Encore, «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 de dépendance "caractéristique"? Je vais essayer de mettre des mots-clés caractéristiques en utilisant NLP4J. (Pas de traitement difficile) Le fait est que nous utilisons l'analyse syntaxique et le traitement statistique en utilisant la classe "SimpleDocumentIndex".

Maven

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

Code1

public class HelloTextMiningMain2B {
	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 + annotateur d'analyse syntaxique
		DocumentAnnotator annotator = new YjpAllAnnotator(); //Analyse morphologique + analyse syntaxique
		{
			System.err.println("Analyse morphologique + analyse syntaxique");
			long time1 = System.currentTimeMillis();
			//Analyse morphologique + analyse syntaxique
			annotator.annotate(docs);
			long time2 = System.currentTimeMillis();
			System.err.println("temps de traitement[ms]:" + (time2 - time1));
		}
		//Préparation de l'index des mots clés (traitement statistique)
		Index index = new SimpleDocumentIndex();
		{
			System.err.println("Indexage");
			long time1 = System.currentTimeMillis();
			//Processus d'indexation des mots-clés
			index.addDocuments(docs);
			long time2 = System.currentTimeMillis();
			System.err.println("temps de traitement[ms]:" + (time2 - time1));
		}
		{
			//"nom...Acquérir des mots clés qui coexistent fortement avec Nissan dans les "verbes"
			List<Keyword> kwds = index.getKeywords("nom...verbe", "item=Nissan");
			System.out.println("nom...Verbes pour Nissan");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
						kwd.getCorrelation(), kwd.getLex()));
			}
		}
		{
			//"nom...Acquisition de mots clés à forte cooccurrence chez Toyota avec "verbe"
			List<Keyword> kwds = index.getKeywords("nom...verbe", "item=Toyota");
			System.out.println("nom...Verbice pour Toyota");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
						kwd.getCorrelation(), kwd.getLex()));
			}
		}
		{
			//"nom...Acquisition de mots clés qui coexistent fortement avec Honda avec des "verbes"
			List<Keyword> kwds = index.getKeywords("nom...verbe", "item=Honda");
			System.out.println("nom...Verbe pour Honda");
			for (Keyword kwd : kwds) {
				System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
						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

Analyse morphologique + analyse syntaxique
temps de traitement[ms]:9618
Indexage
temps de traitement[ms]:3
nom...Verbes pour Nissan
count=1,correlation=3.0,lex=EV...vendre
count=1,correlation=3.0,lex=EV...créer
count=1,correlation=1.5,lex=Voiture légère...vendre
count=1,correlation=1.0,lex=Voiture...vendre
nom...Verbice pour Toyota
count=1,correlation=3.8,lex=voiture...vendre
count=1,correlation=3.8,lex=voiture...créer
count=1,correlation=3.8,lex=hybride...vendre
count=1,correlation=3.8,lex=hybride...créer
count=1,correlation=1.9,lex=Voiture...créer
count=1,correlation=1.3,lex=Voiture...vendre
nom...Verbe pour Honda
count=1,correlation=2.5,lex=bicyclette...vendre
count=1,correlation=2.5,lex=Voiture légère...créer
count=1,correlation=2.5,lex=bicyclette...créer
count=1,correlation=1.3,lex=Voiture...créer
count=1,correlation=1.3,lex=Voiture légère...vendre
count=1,correlation=0.8,lex=Voiture...vendre

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


Retour à l'index: [003] Traitement statistique des paroles de partie> [004] Syntaxe Traitement statistique de l'analyse> [005-1] NLP4J + Twitter4J (collecte de données)

URL du projet

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


Recommended Posts

NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java
NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces 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
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
NLP4J [001b] Analyse morphologique en Java (utilisant kuromoji)
Essayez d'utiliser RocksDB avec Java
Implémentez Thread en Java et essayez d'utiliser la classe anonyme Lambda
NLP4J [001a] Analyse morphologique avec Java (utilisant l'analyse morphologique japonaise de Yahoo! Developer Network)
Essayez d'utiliser l'API Stream en Java
Essayez d'utiliser l'API au format JSON en Java
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de 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
[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