Retour à l'index: [004] Traitement statistique de l'analyse syntaxique> [005- 1] NLP4J + Twitter4J (collecte de données)> Page suivante
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>
Accédez aux éléments suivants pour définir votre application. https://apps.twitter.com/
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é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.
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
https://www.nlp4j.org/
Recommended Posts