【Twitter4J】Streaming APIのsampleで各ツイートのlang(言語情報)を取得する方法


Twitter4JでStreaming APIのsampleで各ツイートのlang(言語情報)を取得する方法についてです。
現時点での最新バージョンではメソッドがまだ実装されていないようなので、ツイート情報(status)からJackson Java JSON-processorを使用して取得します。

なお、この言語判定はまず3月6日(March 6, 2013)にREST APIで実装され、次いで3月26日(March 26, 2013)にStreaming APIに実装されました。
機能の詳細については次の公式ブログに掲載されています。
 →Introducing new metadata for Tweets | Twitter Developers
(この公式ブログでは言語判定に加えて、filter_levelも紹介されています。)

<該当箇所>
The new lang attribute specifies the language the Tweet was written in, as identified by Twitter's machine language detection algorithms. The values will be valid BCP 47 language identifiers, and may represent any of the languages listed on Twitter's advanced search page, or "und" if no language could be detected. This field enables consumers of Tweet data, such as analytics services or real-time search streams, to offer language-specific curation, aggregation and analysis of Tweet content.


この言語判定の精度を検証したところ、非常に高い精度であることが分かりました。
新しく追加されたツイートの言語判定の精度が高すぎる!日本語はなんと100%!完璧! #Twitter4J


さて、方法は次のようになります。(status_getLangの部分です)
なお、Twitter4Jでメソッドが実装されれば差し替えるつもりです。
 
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;


//JSONの取得・分解にはJackson Java JSON-processorを使用
//ダウンロードなどは下記ページ
//http://jackson.codehaus.org/
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

import twitter4j.*;
import twitter4j.json.DataObjectFactory;


//Streaming APIのsampleでstatusのlang(言語情報)を取得する
public class status_getLang_sample {

public static void main(String[] args){

try{

//自動的に認証してくれる
//(バージョン2.2.4以降はgetInstance()ではなくgetSingleton()を推奨)
new TwitterStreamFactory();
TwitterStream twitterstream = TwitterStreamFactory.getSingleton();

twitterstream.addListener(new MyStatusAdapter());
twitterstream.sample();

} catch(Exception e){
e.printStackTrace();
}
}
}

//出力する
class MyStatusAdapter extends StatusAdapter {

public void onStatus(Status status){

BufferedWriter wr = null;

//書き出し先のファイルを指定
String fileName = "○○.txt";
String outdata;


try {

//ユーザの情報を取得
User user = status.getUser();

//statusオブジェクトのJSON文字列を取得
String rawJSON = DataObjectFactory.getRawJSON(status);

//JSON文字列を分解し必要な情報を取得
//(statusオブジェクトのlang)
String status_getLang = null;

try {
status_getLang = parseJSON(rawJSON);

} catch (JsonParseException e) {
e.printStackTrace();
}

//utf-8を指定、追記可能
wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName,true), "utf-8"));

//ツイートから改行記号を除去(半角スペースに変換)
String strText = status.getText();
strText = strText.replaceAll("\r\n"," ");
strText = strText.replaceAll("\r"," ");
strText = strText.replaceAll("\n"," ");

//ツイートからタブ記号を除去(半角スペースに変換)
strText = strText.replaceAll("\t"," ");


//書き出し(ツイートの言語設定、ユーザの言語設定、タイムゾーン、位置情報、日時、利用アプリ、ユーザ名、ツイート)
outdata = status_getLang + "\t" + user.getLang() + "\t"
+ user.getTimeZone() + "\t" + status.getGeoLocation() + "\t" + status.getCreatedAt() + "\t"
+ status.getSource() + "\t" +user.getScreenName() + "\t" + strText;

wr.write(outdata);
wr.write("\n");

wr.flush();
wr.close();

}catch (IOException e) {
e.printStackTrace();
}
}


//JSON文字列からオブジェクトに変換する
private static String parseJSON(String str) throws JsonParseException, IOException {

JsonFactory factory = new JsonFactory();
JsonParser jp = factory.createJsonParser(str);

if(jp.nextToken() == JsonToken.START_OBJECT) {
while (jp.nextToken() != JsonToken.END_OBJECT) {
String _name = jp.getCurrentName();
jp.nextToken();


if(_name.equals("user")) {
jp.skipChildren();
} else {

//言語設定ならば返す
if(_name == "lang") {
return jp.getText();
}
}
}
} else {
jp.skipChildren();
}
return null;
}
}


↓この記事が参考になったら拍手、ツイート、いいね、はてブ、いずれかをお願いします。今後のブログ作りに役立てたいので。
関連記事

コメントの投稿

非公開コメント

プロフィール

てぃー

Author:てぃー
詳しい自己紹介:こちら
Twitter:@teapipin


follow us in feedly 
にほんブログ村 IT技術ブログへ にほんブログ村 PC家電ブログへ
現在の閲覧者数:

ブログ内検索
今日のアクセス数の多い記事
カレンダー

09月 | 2017年10月 | 11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
過去記事ダイジェスト
お知らせ
ツイッター分析の分析結果が新潟大学教育学部の論文に引用
教育の実証研究の場でも高く評価!

ツイッター分析の分析結果が和歌山大学防災研究教育センターの論文に引用
防災の研究において評価!

2015年版ツイッター分析(世界編)が始動!
今回は世界の国別・言語別ツイートを分析!

ツイッター分析の分析結果が慶應義塾大学有名教授の研究論文などに引用
文系の研究までも制覇!

Interval Timer EX
有名雑誌「Mac Fan 2015月2月号」に「インターバルタイマーEX」が3度目の掲載!ポモドーロテクニックに有効!

自作Macアプリ3部作が2014年 Vector 年間ダウンロードランキング Mac トップ100にすべてランクイン

TimeCalcを公開しています!
時間計算、年齢計算、学歴欄作成など。

ツイッター分析の分析結果が人工知能の研究に!
ブログが学会発表で引用されました。

今まで開発したiPhoneアプリのソースコードを公開しています!
勉強に役立ててください。


2013年 Vector 年間ダウンロードランキング Mac トップ100に「デジカメ変更日を撮影日に一括変更 for Mac」と「インターバルタイマーEX」がランクイン

Interval Timer EX
有名雑誌「Mac Fan 2013月4月号」に「インターバルタイマーEX」が2度目の掲載!!

リアルタイムツイッター地図
リアルタイムツイッター地図を公開しています!
位置情報付きツイートをリアルタイムに表示します。

新たなツイッター分析としてイベントツイート分析を行っています!

2012年8月1日(水)開催の「Twitter勉強会」で発表
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack from teapipin


Interval Timer EX
有名雑誌「Mac Fan 2012月3月号」に「インターバルタイマーEX」が掲載!!



 

はてなブックマークの人気記事