LoginSignup
3
3

More than 3 years have passed since last update.

[python]取得したTwitterタイムラインをMeCabで形態素に分解する

Last updated at Posted at 2020-01-03

目的

Twitterのタイムラインが、txtファイルになっています。
一つのフォルダに、複数ユーザーのタイムラインが格納してあります。
これらのファイルを、MeCabを用いて全て形態素解析するのが今回のゴールです。

背景・準備

タイムラインの取得

タイムラインの取得は、次の記事のように行いました。
[python]複数ユーザーのTwitterタイムラインを取得する

MeCabの準備

形態素解析のために、形態素解析エンジン'MeCab'を使用します。macで使用する方法について、
mecabインストール手順
を参考にさせていただきました。

実装

  1. フォルダ内のファイル名一覧をpythonのリストに取得

  2. ファイル名リストからタイムラインのリストを作成する関数

  3. 形態素解析の関数

  4. フォルダ内の全ファイルを形態素解析する

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. ファイル名リストからタイムラインのリストを作成する関数

timelines.py

def timelines(file_list):
    timelines=[]
    for file in file_list:
        text=open(file).read()
        open(file).close()

        timelines.append([text])
    return timelines

3. 形態素解析の関数

形態素解析の関数を定義します。
関数の引数は文字列、返り値は形態素解析結果のリストです。

mecab_list.py
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

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3