[JAVA] NLP4J [005-1] Essayez l'analyse Twitter avec Twitter4J et NLP4J (collecte de données)

Retour à l'index: [004] Traitement statistique de l'analyse syntaxique> [005- 1] NLP4J + Twitter4J (collecte de données)> Page suivante

Collecte de données

Ensuite, analysons les données Twitter avec NLP4J.

Pour le moment, NLP4J se positionne comme une "analyse facile", analysons-la donc facilement.

En tant que scénario d'analyse, analysons le type de tweets que le Twitter officiel de chaque constructeur automobile (Toyota, Nissan, Honda) tweet. https://twitter.com/TOYOTA_PR https://twitter.com/NissanJP https://twitter.com/HondaJP

Je pense qu'il est possible d'analyser avec différentes perspectives et données en modifiant la requête de manière appropriée.

Commençons par collecter des données.

Pour la collecte de données Twitter, j'essaierai d'utiliser "Twitter4j" qui est connu comme Java Wrapper de l'API Twitter.

Twitter4J http://twitter4j.org/ja/index.html

Ajoutons Twitter4J à Maven pom.xml.

Maven POM

<dependency>
	<groupId>org.nlp4j</groupId>
	<artifactId>nlp4j</artifactId>
	<version>1.0.0.0</version>
</dependency>
<dependency>
	<groupId>org.twitter4j</groupId>
	<artifactId>twitter4j-core</artifactId>
	<version>[4.0,)</version>
</dependency>

Préparer Twitter4J

Définition de l'application Twitter

Accédez aux éléments suivants pour définir votre application. https://apps.twitter.com/

Obtenez la clé

Après avoir défini l'application, vous pouvez obtenir les valeurs suivantes sur apps.twitter.com, alors copiez-les.

Application Settings Remarque en tant que clé consommateur (clé API) -> (1) Remarque comme Consumer Secret (API Secret) -> (2)

Your Access Token Remarque comme jeton d'accès-> (3) Jeton d'accès Secret-Note comme (4)

Préparation de twitter4j.properties (passer par le chemin de classe)

Préparez le fichier de propriétés suivant et placez-le dans le chemin de classe.

debug=false
http.prettyDebug=false

oauth.consumerKey= (1)Valeur obtenue en
oauth.consumerSecret= (2)Valeur obtenue en
oauth.accessToken= (3)Valeur obtenue en
oauth.accessTokenSecret= (4)Valeur obtenue en
jsonStoreEnabled=true

C'est une bonne idée de placer le fichier à la racine du package comme indiqué ci-dessous. hellonlp4j-twitter4j.png

Code Je vais essayer de mettre les tweets collectés directement dans NLP4J. (Bien sûr, vous pouvez l'enregistrer dans un fichier tel que CSV ou JSON.)

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import nlp4j.DocumentAnnotator;
import nlp4j.Document;
import nlp4j.Index;
import nlp4j.Keyword;
import nlp4j.impl.DefaultDocument;
import nlp4j.index.SimpleDocumentIndex;
import nlp4j.yhoo_jp.YjpAllAnnotator;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterFactory;

public class HelloTextMiningTwitter {
	public static void main(String[] args) throws Exception {
		String[] accounts = { "NissanJP", "TOYOTA_PR", "HondaJP" };
		List<Document> docs = new ArrayList<Document>();
		for (String account : accounts) {
			docs.addAll(createDocumentTwitter(account));
		}
//Annotateur d'analyse morphologique + annotateur d'analyse syntaxique
		DocumentAnnotator annotator = new YjpAllAnnotator(); //Analyse morphologique + analyse syntaxique
		{
			System.err.println("Analyse morphologique + analyse syntaxique");
			//Analyse morphologique + analyse syntaxique
			annotator.annotate(docs);
		}
//Préparation de l'index des mots clés (traitement statistique)
		Index index = new SimpleDocumentIndex();
		{
			System.err.println("Indexage");
			//Processus d'indexation des mots-clés
			index.addDocuments(docs);
		}
		{
			//Acquisition de mots-clés fréquemment utilisés
			System.out.println("Par fréquence de nomenclature");
			List<Keyword> kwds = index.getKeywords();
			kwds = kwds.stream() //
					.filter(o -> o.getCount() > 1) //2 ou plus
					.filter(o -> o.getFacet().equals("nom")) // 品詞がnom
					.collect(Collectors.toList());
			for (Keyword kwd : kwds) {
				System.out.println(
						String.format("count=%d,facet=%s,lex=%s", kwd.getCount(), kwd.getFacet(), kwd.getLex()));
			}
		}
		for (String account : accounts) {
			{
				//Acquisition de mots-clés à forte cooccurrence
				List<Keyword> kwds = index.getKeywords("nom", "item=" + account);
				System.out.println("Nom pour" + account);
				for (Keyword kwd : kwds) {
					System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
							kwd.getCorrelation(), kwd.getLex()));
				}
			}
			{
				//Acquisition de mots-clés à forte cooccurrence
				List<Keyword> kwds = index.getKeywords("nom...verbe", "item=" + account);
				System.out.println("nom...Verbe pour" + account);
				for (Keyword kwd : kwds) {
					System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
							kwd.getCorrelation(), kwd.getLex()));
				}
			}
		}
	}

	static List<Document> createDocumentTwitter(String item) {
		ArrayList<Document> docs = new ArrayList<Document>();
		try {
			Twitter twitter = TwitterFactory.getSingleton();
			Query query = new Query("from:" + item);
			query.setCount(10);
			QueryResult result = twitter.search(query);
			for (Status status : result.getTweets()) {
				// System.out.println("@" + status.getUser().getScreenName() + ":" +
				// status.getText());
				Document doc = new DefaultDocument();
				doc.putAttribute("item", item);
				doc.setText(status.getText());
				docs.add(doc);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return docs;
	}
}

C'est facile! Sur la page suivante, nous examinerons les résultats de l'analyse.


Retour à l'index: [004] Traitement statistique de l'analyse syntaxique> [005- 1] NLP4J + Twitter4J (collecte de données)> Page suivante

URL du projet

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


Recommended Posts

NLP4J [005-1] Essayez l'analyse Twitter avec Twitter4J et NLP4J (collecte de données)
NLP4J [005-2] NLP4J + Twitter4J (analyse 1)
Exécutez logstash avec Docker et essayez de télécharger des données sur Elastic Cloud
Liaison de données avec Spark et Cassandra
Spring avec Kotorin --2 RestController et Data Class
Essayez d'exécuter MySql et Blazor avec docker-compose
Essayons WebSocket avec Java et javascript!
Développement Android-Accès WEB (POST) Essayez de communiquer avec l'extérieur et d'envoyer des données. ~
NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces en Java
Essayez d'intégrer Ruby et Java avec Dapr