[[TopPage]] ***nltkでtwitterのログを処理する。 [#d3e1dcf3] +TwitterLog20100805 を自分のディレクトリにコピーする cp -r /home/maeda/TwitterLog/20100805/ . +参考サイト http://d.hatena.ne.jp/nokuno/20100123/1264239192 +日本語テキストを読み込むサンプルプログラム #! /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 +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['私'] +24時間x60分=1440ファイルを分かち書きにする ***ディレクトリ下の*.datファイルを読み込み、その中からtweetを抽出する。(筆跡:Ashihara) [#s4de06db] --事前処理として.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() ***復習問題 [#qecaa592] -"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() --置換処理