前回の記事では、Pythonを使ったWebスクレイピングでTwitterのタイムラインを取得する方法について説明しました。
今回は、取得したタイムラインを元に、形態素解析する方法について説明します。

形態素解析とは

形態素解析とは、文章を単語にする自然言語処理の手法の一つです。
文章中でよく使われる単語の解析などができます。
今回は、Twitterのタイムライン中でよく使われる単語を抽出してみます。

プログラム

形態素解析のプログラムを以下に記載します。
Pythonの形態素解析のライブラリー”Janome”を利用しています。
今回取得する品詞は”名詞”です。

ソースコード

タイムラインごとに形態素解析をかけて、名詞の出現回数をカウントしています。

# -*- coding: utf-8 -*-
import re
import csv
import sys
from itertools import chain
from collections import Counter
from janome.tokenizer import Tokenizer

# tweetが入っているカラム番号です。配列の添え字番号3番に格納されています。
TEXT_COLUM = 3


def readCSV(file):
    data = []
    each_data = []

    csv_file = open(file, "r")
    reader = csv.reader(csv_file, delimiter=",")
    header = next(reader)
    t = Tokenizer()
    for row in reader:
        text = row[TEXT_COLUM]
        # アルファベットと半角英数と記号と改行とタブを排除
        text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text)
        text = re.sub(r'[!"“#$%&()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]', '', text)
        text = re.sub(r'[\n|\r|\t]', '', text)
        tokens = t.tokenize(text)
        for token in tokens:
            p = token.part_of_speech.split(',')[0]
            if p == u'名詞':
                each_data.append(token.surface)
        data.append(each_data)
        each_data = []

    csv_file.close()

    chain_data = list(chain.from_iterable(data))
    c = Counter(chain_data)

    ranking = c.most_common(1000)
    for word in ranking:
        print(word)


if __name__ == '__main__':
    args = sys.argv
    file = args[1]
    readCSV(file)

使い方

前回の記事で説明したプログラムを使ってタイムラインを”timeline.csv”として保存しておきます。

$ getTimeline.py <twitter id> > timeline.csv

今回作成したプログラムに引数として渡します。

$ morpho.py timeline.csv

結果

以下のように、各単語が何回使われているかが出力されます。

('勉強', 38)
('何', 37)
('エンジニア', 36)
('技術', 36)
('さん', 35)
('参加', 34)
('会', 34)
('転職', 33)
('仕事', 32)

結果を見ればわかりますが、”会”などのように不自然な場所で区切られてしまうことがあります。
これは、単語を抽出する際に使っている辞書が原因です。
独自の辞書を作る方法については別の記事で紹介します。

まとめ

今回は、Pythonの形態素解析用ライブラリ”Janome”を使って、Twitterのタイムラインから頻出単語を抽出する方法について説明しました。
形態素解析は様々な場面で役に立つと思うので、参考にしていただければ幸いです。