TopPage

nltkでtwitterのログを処理する。

  1. TwitterLog20100805 を自分のディレクトリにコピーする
    	cp -r /home/maeda/TwitterLog/20100805/ .
  2. 参考サイト http://d.hatena.ne.jp/nokuno/20100123/1264239192
  3. 日本語テキストを読み込むサンプルプログラム
    	#! /usr/bin/env python
    	#encoding: utf-8
    	import nltk
    	raw = open('./sample.mecab').read()
    	words = raw.split();
    	print len(words)
    	text = nltk.Text(words)
    	gen = text.generate(300)
    	print gen
  4. bigrams
    	#!/usr/bin/python
    	#encoding: utf-8
    	import nltk
    	
    	raw = open('sample.dat').read()
    	words = raw.split();
    	bigrams = nltk.bigrams(words)
    	fd = nltk.FreqDist(bigrams)
    	for w in fd:
    	        if fd[w]==100 :
    	                break;
    	        print w[0],w[1],fd[w]
    	
    	#文字化けする
    	cfd = nltk.ConditionalFreqDist(bigrams)
    	print cfd['私']
  5. 24時間x60分=1440ファイルを分かち書きにする

ディレクトリ下の*.datファイルを読み込み、その中からtweetを抽出する。(筆跡:Ashihara)

  • 事前処理として.dat内の制御文字を削除する必要がある。
    • コマンド
      	find . -name "*.dat" | xargs sed -i "s/^M//g"
    • ^Mは[Ctrl]+[v] + [Ctrl] + [M]で入力する。直接入力してはいけない。
      	[Ctrl]+[v] + [Ctrl] + [M]
    • 他の制御文字が含まれている場合もある。適宜除去する必要がある。
  • tweetの抽出
    • データは生データを読み込む。それをsplit()でリストにする。
    • splitされたリストの要素中に'2010'の要素が必ず一つのtweetに存在し、その後はtweet内容となる。
    • これを利用し、index関数で'2010'が存在する箇所の添字を取得、それ以降の要素を全て結合しtweetとする。
    • 一つのtweetに対し一つずつ改行しつつファイルに書き込む。tweetList.txtというファイルが生成される。
    • このtweetList.txtをmecabにかける。今回はコマンドラインから直接実行した。
    • この処理は制御文字を削除しない限り、失敗する。以下ソースコード。
    • 出力が完全ではないかもしれません。
         #vim fileencoding:utf-8 
         import commands
         import codecs
         list = commands.getoutput('ls *.dat')
         fileList = list.split("\n")
         datList = []
         for file in fileList:
                 for dat in codecs.open(file,'r','utf-8'):
                         datList.append(dat.encode('utf-8'))
         tweetList = []
         swaplist = []
         tw = str()
         for dats in datList:
                 swaplist = dats.split()
                 index = swaplist.index('2010')#2010以下がtweet
                 tw = ""
                 for tweet in swaplist[index + 1:]:
                         tw += tweet
                 tweetList.append(tw)
         f = open('tweetList.txt', 'w')
         for tweet in tweetList:
                 f.write(tweet+'\n')
         f.close()

復習問題

  • "TwitterLog20100805-1600.dat" のファイルを読み込み、コメントだけを「Comment.txt」ファイルに書き出すプログラムを書け
    • ^M を削除すること
  • 必要な知識
    • ファイル読み込み
      	#!/usr/bin/env python
      	for line in open('TwitterLog20100805-1600.dat', 'r'):
      	    print line
    • ファイル書き込み
      	strs = "abc";
      	f = open('Comment.txt', 'w')
      	f.writelines(strs)
      	f.close()
    • "TwitterLog20100805-1600.dat" を読み込み "Comment.txt" にそのまま書き込む
      	#!/usr/bin/env python
      	
      	f = open('Comment.txt', 'w')
      	for line in open('TwitterLog20100805-1600.dat', 'r'):
      	        print line
      	        f.writelines(line)
      	f.close()
    • split 関数を利用して、タブで区切り、4番目の要素(つぶやきの内容)を"Comment.txt"に出力する
      	#!/usr/bin/env python
      	
      	f = open('Comment.txt', 'w')
      	for line in open('TwitterLog20100805-1600.dat', 'r'):
      	        print line
      	        items = line.split("\t")
      	        print items[3]
      	        f.writelines(items[3])
      	f.close()
    • 置換処理

木村ゼミ生限定

編集画面
ゼミ生
2017-2018年度生(11期)
石黒栞奈一宮拓海
亀井海舟佐藤栞
佐藤有希桧森拓真
藤本朱夏ホワイトジニー
増田優作谷内健太
2016-2017年度生(10期)
伊藤みき岡島健悟
小西雪葉祐川泰輝
鈴木佑菜大門拓史
田頭わかば戸嶋咲穂
中村智貴西野哲生
横山祐果川岸祐果
2015-2016年度生(09期)
浅賀七海小林真菜
西村伊央堀江知未
針生惟希村上浩太
2014-2015年度生(08期)
大石誠大野晋太朗
加藤裕樹佐々木左近
高橋理沙武田莉穂
寺島舞子畑賀大
山田修世
2013-2014年度生(07期)
加藤史織工藤智子
佐々木葉子志鎌周
高橋玄龍眈丈
中尾千咲中川玲菜
中藪大貴
2012-2013年度生(06期)
遠藤星地大野紗季
鎌田めぐみ木下和大
齋木涼介佐々木遥
佐藤優子沼澤文香
古屋真理吉田智弘
2010-2011年度生(05期)
葦原史敏伊藤大起
伊藤みどり永坂文乃
藤田航哉前多大輔
松本陵佑宮津有沙
山田亜季
2009-2010年度生(04期)
岸本隆志窪地由恵
志賀千鶴津田有子
三浦工弥
2008-2009年度生(03期)
粟津康佑井上さゆり
北崎佑樹工藤和寛
古俣優花佐川彰宏
佐藤禎洋鈴木亜衣
竹原希美藤井優作
堀公一堀内小織
米澤宏史
2007-2008年度生(02期)
佐藤健太上村佳弘
奥田啓貴小野誠
白井かずみ高井庸介
森谷亮介六渡有梨恵
若本哲平
2006-2007年度生(01期)
菅井梓渡部謙太郎
相坂真大村佳慎
奥桃子笠井猛
小林和幸齊藤いつこ
齊藤雄紀佐々木麻未
佐藤日加吏谷本貴之
徳江佑介長嶺脩平
西本みゆき林絵里子
澤田大輝