Zurück zum Index: [004] Statistische Verarbeitung der Syntaxanalyse> [005- 1] NLP4J + Twitter4J (Datenerfassung)> Nächste Seite
Als nächstes analysieren wir Twitter-Daten mit NLP4J.
Im Moment ist NLP4J als "einfache Analyse" positioniert, also lassen Sie es uns einfach analysieren.
Lassen Sie uns als Analyseszenario analysieren, welche Art von Tweets das offizielle Twitter jedes Automobilunternehmens (Toyota, Nissan, Honda) twittert. https://twitter.com/TOYOTA_PR https://twitter.com/NissanJP https://twitter.com/HondaJP
Ich bin der Meinung, dass es möglich ist, mit verschiedenen Perspektiven und Daten zu analysieren, indem die Abfrage entsprechend geändert wird.
Beginnen wir mit der Datenerfassung.
Für die Twitter-Datenerfassung werde ich versuchen, "Twitter4j" zu verwenden, das als Java Wrapper der Twitter-API bekannt ist.
Twitter4J http://twitter4j.org/ja/index.html
Fügen wir Twitter4J zu Maven pom.xml hinzu.
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>
Greifen Sie auf Folgendes zu, um Ihre Anwendung zu definieren. https://apps.twitter.com/
Nachdem Sie die Anwendung definiert haben, können Sie die folgenden Werte auf apps.twitter.com abrufen. Kopieren Sie sie daher.
Application Settings Hinweis als Verbraucherschlüssel (API-Schlüssel) -> (1) Hinweis als Verbrauchergeheimnis (API-Geheimnis) -> (2)
Your Access Token Als Zugriffstoken beachten-> (3) Zugriff auf Token Secret-Note als (4)
Bereiten Sie die folgende Eigenschaftendatei vor und fügen Sie sie in den Klassenpfad ein.
debug=false
http.prettyDebug=false
oauth.consumerKey= (1)Wert erhalten in
oauth.consumerSecret= (2)Wert erhalten in
oauth.accessToken= (3)Wert erhalten in
oauth.accessTokenSecret= (4)Wert erhalten in
jsonStoreEnabled=true
Es ist eine gute Idee, die Datei wie unten gezeigt im Stammverzeichnis des Pakets zu platzieren.
Code Ich werde versuchen, die gesammelten Tweets direkt in NLP4J zu platzieren. (Natürlich können Sie es in einer Datei wie CSV oder JSON speichern.)
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));
}
//Annotator für morphologische Analyse + Annotator für Syntaxanalyse
DocumentAnnotator annotator = new YjpAllAnnotator(); //Morphologische Analyse + Syntaxanalyse
{
System.err.println("Morphologische Analyse + Syntaxanalyse");
//Morphologische Analyse + Syntaxanalyse
annotator.annotate(docs);
}
//Erstellung des Keyword-Index (statistische Verarbeitung)
Index index = new SimpleDocumentIndex();
{
System.err.println("Indizierung");
//Indizierungsprozess für Schlüsselwörter
index.addDocuments(docs);
}
{
//Erwerb häufig verwendeter Schlüsselwörter
System.out.println("Nach Häufigkeit der Nomenklatur");
List<Keyword> kwds = index.getKeywords();
kwds = kwds.stream() //
.filter(o -> o.getCount() > 1) //2 oder mehr
.filter(o -> o.getFacet().equals("Substantiv")) // 品詞がSubstantiv
.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) {
{
//Erwerb von Keywords mit hoher Koexistenz
List<Keyword> kwds = index.getKeywords("Substantiv", "item=" + account);
System.out.println("Nomen für" + account);
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
//Erwerb von Keywords mit hoher Koexistenz
List<Keyword> kwds = index.getKeywords("Substantiv...Verb", "item=" + account);
System.out.println("Substantiv...Verb für" + 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;
}
}
Es ist einfach! Auf der nächsten Seite werden wir uns die Analyseergebnisse ansehen.
Zurück zum Index: [004] Statistische Verarbeitung der Syntaxanalyse> [005- 1] NLP4J + Twitter4J (Datenerfassung)> Nächste Seite
https://www.nlp4j.org/
Recommended Posts