Indexに戻る : [004]構文解析の統計処理 > [005-1] NLP4J+Twitter4J(データ収集) > 次のページ
#データ収集
では次にNLP4JでTwitterのデータを分析してみましょう。
今のところNLP4Jは「お手軽分析」の位置づけですので、お手軽に分析してみます。
分析シナリオとしては自動車各社(トヨタ、日産、ホンダ)の公式Twitterがどのようなツイートをしているのかを分析してみる、というものにしてみます。
https://twitter.com/TOYOTA_PR
https://twitter.com/NissanJP
https://twitter.com/HondaJP
適当にクエリーを作り替えることで様々な切り口とデータでの分析ができそうな”気がします”。
まずはデータ収集から行いましょう。
Twitterのデータ収集には、Twitter API の Java Wrapperとして有名な「Twitter4j」を使ってみることにします。
###Twitter4J
http://twitter4j.org/ja/index.html
Maven pom.xml に Twitter4J を追加しましょう。
#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>
#Twitter4J の準備
##Twitter アプリの定義
以下にアクセスして、アプリケーションの定義を行います。
https://apps.twitter.com/
##キーの取得
アプリケーションの定義をするとapps.twitter.com にて以下の値を取得できますのでコピーしておきます。
Application Settings
Consumer Key (API Key) --> (1)としてメモ
Consumer Secret (API Secret) --> (2)としてメモ
Your Access Token
Access Token --> (3)としてメモ
Access Token Secret --(4)としてメモ
##twitter4j.properties の準備 (クラスパスに通す)
以下のプロパティファイルを用意しておき、クラスパスに通しておきます。
debug=false
http.prettyDebug=false
oauth.consumerKey= (1)で取得した値
oauth.consumerSecret= (2)で取得した値
oauth.accessToken= (3)で取得した値
oauth.accessTokenSecret= (4)で取得した値
jsonStoreEnabled=true
以下のような感じでパッケージのルートにファイルを配置しておくと確実です。
#Code
収集したツイートを直接NLP4Jに投入してみます。
(もちろんCSVやJSONなどのファイルに保存してもOKです。)
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));
}
// 形態素解析アノテーター+構文解析アノテーター
DocumentAnnotator annotator = new YjpAllAnnotator(); // 形態素解析+構文解析
{
System.err.println("形態素解析+構文解析");
// 形態素解析+構文解析
annotator.annotate(docs);
}
// キーワードインデックス(統計処理)の用意
Index index = new SimpleDocumentIndex();
{
System.err.println("インデックス作成");
// キーワードインデックス作成処理
index.addDocuments(docs);
}
{
// 頻度の高いキーワードの取得
System.out.println("名詞の頻度順");
List<Keyword> kwds = index.getKeywords();
kwds = kwds.stream() //
.filter(o -> o.getCount() > 1) // 2件以上
.filter(o -> o.getFacet().equals("名詞")) // 品詞が名詞
.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) {
{
// 共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞", "item=" + account);
System.out.println("名詞 for " + account);
for (Keyword kwd : kwds) {
System.out.println(String.format("count=%d,correlation=%.1f,lex=%s", kwd.getCount(),
kwd.getCorrelation(), kwd.getLex()));
}
}
{
// 共起性の高いキーワードの取得
List<Keyword> kwds = index.getKeywords("名詞...動詞", "item=" + account);
System.out.println("名詞...動詞 for " + 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;
}
}
簡単ですね!
次のページでは、分析結果を見てみることにします。
Indexに戻る : [004]構文解析の統計処理 > [005-1] NLP4J+Twitter4J(データ収集) > 次のページ
#プロジェクトURL
https://www.nlp4j.org/