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)
https://www.nlp4j.org/
Recommended Posts