[JAVA] NLP4J Versuchen Sie eine Twitter-Analyse mit Twitter4J und NLP4J (Datenerfassung)

Zurück zum Index: [004] Statistische Verarbeitung der Syntaxanalyse> [005- 1] NLP4J + Twitter4J (Datenerfassung)> Nächste Seite

Datensammlung

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>

Vorbereiten von Twitter4J

Twitter App Definition

Greifen Sie auf Folgendes zu, um Ihre Anwendung zu definieren. https://apps.twitter.com/

Hol den Schlüssel

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)

Vorbereitung von twitter4j.properties (Klassenpfad durchlaufen)

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. hellonlp4j-twitter4j.png

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

Projekt-URL

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


Recommended Posts

NLP4J Versuchen Sie eine Twitter-Analyse mit Twitter4J und NLP4J (Datenerfassung)
NLP4J NLP4J + Twitter4J (Analyse 1)
Führen Sie logstash mit Docker aus und versuchen Sie, Daten in Elastic Cloud hochzuladen
Datenverknüpfung mit Spark und Cassandra
Feder mit Kotorin --2 RestController und Datenklasse
Versuchen Sie, MySql und Blazor mit Docker-Compose auszuführen
Probieren wir WebSocket mit Java und Javascript aus!
Android Development-WEB Access (POST) Versuchen Sie, mit der Außenwelt zu kommunizieren und Daten zu senden. ~
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung von Teilen in Java
Versuchen Sie, Ruby und Java in Dapr zu integrieren