#目的
Twitterのタイムラインが、txtファイルになっています。
一つのフォルダに、複数ユーザーのタイムラインが格納してあります。
これらのファイルを、MeCabを用いて全て形態素解析するのが今回のゴールです。
#背景・準備
###タイムラインの取得
タイムラインの取得は、次の記事のように行いました。
[python]複数ユーザーのTwitterタイムラインを取得する
###MeCabの準備
形態素解析のために、形態素解析エンジン'MeCab'を使用します。macで使用する方法について、
mecabインストール手順
を参考にさせていただきました。
#実装
-
フォルダ内のファイル名一覧をpythonのリストに取得
-
ファイル名リストからタイムラインのリストを作成する関数
-
形態素解析の関数
-
フォルダ内の全ファイルを形態素解析する
##1. フォルダ内のファイル名一覧をリストに取得
ファイル'timelines'に、操作したい全てのtxtファイルが入っています。
これらのファイル名(文字列)をリスト'file_names'に格納します。
import glob
file_names=[]
files = glob.glob("./timelines/*")
for file in files:
file_names.append(file)
取得したfile_namesは、次のような形をしています。
['./timelines/20191210_user0_***.txt',..,'./timelines/20191210_user199_***.txt']
##2. ファイル名リストからタイムラインのリストを作成する関数
def timelines(file_list):
timelines=[]
for file in file_list:
text=open(file).read()
open(file).close()
timelines.append([text])
return timelines
##3. 形態素解析の関数
形態素解析の関数を定義します。
関数の引数は文字列、返り値は形態素解析結果のリストです。
import MeCab
def mecab_list(text):
tagger = MeCab.Tagger("-Ochasen")
tagger.parse('')
node = tagger.parseToNode(text)
mecab_output = []
while node:
word = node.surface
wclass = node.feature.split(',')
if wclass[0] != u'BOS/EOS':
if wclass[6] == None:
mecab_output.append([word,wclass[0],wclass[1],wclass[2],""])
else:
mecab_output.append([word,wclass[0],wclass[1],wclass[2],wclass[6]])
node = node.next
return mecab_output
'mecab_list'関数の動作を確認しましょう。
print(mecab_list('昨日飼いはじめたネコはよく食べる。'))
'''
結果
[['昨日', '名詞', '副詞可能', '*', '昨日'], ['飼い', '動詞', '自立', '*', '飼う'], ['はじめ', '動詞', '非自立', '*', 'はじめる'], ['た', '助動詞', '*', '*', 'た'], ['ネコ', '名詞', '一般', '*', 'ネコ'], ['は', '助詞', '係助詞', '*', 'は'], ['よく', '副詞', '一般', '*', 'よく'], ['食べる', '動詞', '自立', '*', '食べる'], ['。', '記号', '句点', '*', '。']]
問題ないようです。
##4. フォルダ内の全ファイルを形態素解析する
mecab_results_list=[]
the_timelines=timelines(file_names)
for the_timeline in the_timelines:
mecab_result=[]
for twt in the_timeline:
mecab_result.append(mecab_list(twt))
mecab_results_list.append(mecab_result)
print(mecab_results_list)
#結果
[[[['w', '記号', 'アルファベット', '*', 'w'], ['まだ', '副詞', '助詞類接続', '*', 'まだ'], ['亜', '名詞', '固有名詞', '地域', '亜'], ['種', '名詞', '接尾', '一般', '種'], ['?', '記号', '一般', '*', '?'], ['が', '助詞', '格助詞', '一般', 'が'],..,]]]]
求める結果が得られました。
#環境
macOS Catalina
Jupyter notebook