1.9月23日~9月28日

可視化合宿が終わり、参加した生徒や先生方からさまざまなアドバイスをもらい、良い刺激をもらうことができました。

今週はさまざまなアドバイスをまとめ、今後の研究活動の計画を立てました。

合宿のまとめ

今後のスケジュール


後期から週報をブログのように書くため自分のホームページの作成をし始めました。

ツイート取得の際に参考にしたサイトや実際に組んだプログラムを

Twitterからテレビ番組の実況ツイートを取得する』にまとめました。


9月28日の個別ゼミで発表した今後のスケジュールを元にMeCabに登録されている辞書を改善するための手法を調べました。

mecab-ipadic-NEologd』というWeb上にある言語資源から単語をカスタマイズしてMeCab用に作られた辞書を見つけました。

29日からこの辞書を使用して形態素解析を使用して、取得してある番組の実況ツイートの形態素解析をしていきたいと思います。


<目標>

  • 今後のスケジュールを合宿のまとめを元に作成
  • ホームページの作成をして参考にしたサイトをまとめていく

<達成度>

  • 今後のスケジュールを作成→達成
  • ホームページの作成をして参考にしたサイトをまとめる→Twitterからツイート取得するサイトはまとめられた

<次週の目標>

  • 形態素解析の改善としてMeCab用に作られた新しい辞書を利用して形態素解析を行い
    取得したツイートの形態素解析を完了させる
  • 今まで参考にしたサイトをまとめる作業を進める(土日に1,2個記事が書ければ良しとしたい・・・)

<活動時間>

15時間

今週は、正確に時間を覚えていないため確実に活動した時間にしました(すみません)

 

Twitterからテレビ番組の実況ツイートを取得する

Twitterから特定のテレビ番組の実況ツイートを取得する方法とプログラムをまとめます。

開発言語はjavaとし、Twitterからツイートを取得するためにTwitter4Jを使用しました。

<参考サイト>

Twitterからつぶやきを取得する。 -放浪するエンジニアの覚え書き

Twitter4JでTweetを取得してみる


<プログラム>

  • 取得したツイートをcsvファイルに書き込む
  • RT、@、URL、ハッシュタグの削除
  • 投稿日時、ユーザ名、本文を取得し、csvファイルには本文だけ書き込む
// 初期化
Twitter twitter = new TwitterFactory().getInstance();
Query query = new Query();

try {
    File file = new File("C:\\csv\\Tweet21.csv");
    PrintWriter pw = new PrintWriter(file, "Shift-JIS");
    //追記で書き込む
//				pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));

    DefaultTableModel tableModel = new DefaultTableModel(new String[]{"日付", "名前", "本文"}, 0);
    // 検索ワードをセット
    //query.setQuery("#" + txtSearchText.getText());
    query.setQuery("#" +txtSearchText.getText());
    // 1度のリクエストで取得するTweetの数(100が最大)
    query.setCount(100);
    query.setSince("2016-09-01");
    query.setUntil("2016-09-10");

    // 1500件(15ページ)最大数
    for (int i = 1; i <= 15; i++) {
        // 検索実行
        QueryResult result = twitter.search(query);
        System.out.println("ヒット数 : " + result.getTweets().size());
        System.out.println("ページ数 : " + new Integer(i).toString());

        // 検索結果を見てみる
        for (Status tweet : result.getTweets()) {
            // 本文
//						String s = tweet.

            // Dateクラスとユーザ名
            String date = tweet.getCreatedAt().toString();
            String user = tweet.getUser().getName();
            String str = tweet.getText();

            // 特定の文字の削除
            str = str.replaceAll("RT", "");
//                    str = str.replaceAll("@", "");

            if (str.charAt(1) == '@') {
                int index = str.indexOf(":");
//                        str = str.substring(index + 1, str.length());
                str = str.substring(index + 1);
            }

            // httpから始まるURLの削除
            if (str.contains("http")) {
                int index = str.indexOf("http");
                str = str.substring(0, index);
//                        System.out.println(index + ", total = " + str.length());
            }
            if(str.contains("#")){
                int index =str.indexOf("#");
                str =str.substring(0,index);
            }
            if(str.contains("#")){
                int index =str.indexOf("#");
                str =str.substring(0,index);
            }



//                    pw.println(date + "," + user + ",");
            pw.println(str);


            tableModel.addRow(new String[]{date, user, str});

            // リツイート
            int ret = tweet.getRetweetCount();

            // ハッシュタグとURLの削除	
            StringTokenizer sta = new StringTokenizer(str, " ");

            //トークンの出力
/*                    while (sta.hasMoreTokens()) {
                String wk = sta.nextToken();
               // if (wk.contains("http")
                       // && wk.contains("RT") && wk.contains("@")) {
                    pw.print(", ," + wk);

               // }
            }
*/
        }

        if (result.hasNext()) {
            query = result.nextQuery();
        } else {
            break;
        }
    }
    pw.close();

    tableTweets.setModel(tableModel);

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}