自然言語処理を用いたTwitterの頻出ワードの分析

1. 自己紹介

こんにちは、エイアイ・フィールドData Solution DepartmentのE.Tです。
前職では 、Webサイト制作や、Javascriptを用いた運用業務等に携わっていました。その中でデータ分析の仕事に興味を持ち縁あってこの会社に入社し、現在は自社受託案件に従事しております。

今回は、自然言語処理を用いたTwitterの頻出ワードの分析についてご紹介していきたいと思います。

2. 自然言語処理について

自然言語処理とは

自然言語処理(略称:NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。
自然言語の文章をより形式的な(コンピュータが理解しやすい)表現に変換するといった処理が含まれる。


引用:Wikipediaより
https://ja.wikipedia.org/wiki/自然言語処理
日頃私たちが日常で使用している言葉をコンピュータに処理させる技術の事です。
では、Twitterの頻出ワードの分析で対応した自然言語処理の技術についてご説明します。

2.1. 形態素解析

形態素解析とは

文法的な情報の注記の無い自然言語のテキストデータ(文)から、対象言語の文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素の列に分割し、それぞれの形態素の品詞等を判別する作業である。


引用:Wikipediaより
https://ja.wikipedia.org/wiki/形態素解析
日本語は英語のように初めから分割されていないので、下記の図のように分割する処理が必要になり、これを形態素解析といいます。
形態素解析には、MeCabをという形態素解析器を使用しました。MeCabとはオープンソースとして公開されている形態素解析器です。
辞書を用いて単語分割処理をしますが、通常の辞書は新語(新しく作られ、使われるようになった単語)の解析に強くないので、通常の辞書に比べ、新語が多く含まれているNEologdと呼ばれる辞書を使用しました。

2.2. 単語の正規化 

単語の正規化では、文字の表記ゆれの統一、大文字英数字を小文字に変換、半角カナ文字を全角に変換といった文字を置き換える処理を行います。
また、ツイートの処理であれば、上記に加え、URL、絵文字の削除、リプライ時の@ユーザ名の削除等も加えました。

2.3. ストップワードの除去

ストップワード とは、自然言語処理をするのに役に立たない単語のことです。解析の精度を上げるためには、それらの単語を削除する処理が必要です。

ストップワードの除去も辞書を用いて処理を行うので、辞書の1つとして定義されているSlothlibを用いました。 
['あそこ', 'あたり', 'あちら', 'あっち', 'あと', 'あな', 'あなた', 'あれ', 'いくつ', 'いつ', 'いま', 'いや', 'いろいろ', 'うち', 'おおまか', 'おまえ', 'おれ', 'がい', 'かく', 'かたち', 'かやの', 'から', 'がら', 'きた', 'くせ', 'ここ', 'こっち', 'こと', 'ごと', 'こちら', 'ごっちゃ', 'これ', 'これら', 'ごろ', 'さまざま', 'さらい', 'さん', 'しかた', 'しよう', 'すか', 'ずつ', 'すね', 'すべて', 'ぜんぶ', 'そう', 'そこ', 'そちら', 'そっち', 'そで', 'それ', 'それぞれ', 'それなり', 'たくさん', 'たち', 'たび', 'ため', 'だめ', 'ちゃ'…
Slothlibの中身  特に単語自体に意味のないものが多い

3.Twitter頻出ワード分析

3.1 概要

Twitterから特定のキーワードでツイートを抽出し、そのツイートから、頻出ワードを分析するアプリケーションを作成しましたので、アプリケーションの機能とそこで用いた自然言語処理のサンプルコードをご紹介します。

3.2 機能について

3.2.1 キーワードからスクレイピング

Twitterのスクレイピングは、TwitterAPIを使用します。TweetAPIについては、Twitterのdeveloperサイト(https://developer.twitter.com/)から申請して取得します。

アプリケーションでは、指定したキーワードからツイートをスクレイピングし、画面に出力します。
※AuthorIDは非表示にしています

3.2.2 頻出ワード分析

スクレイピングした結果から頻出ワードを分析します。
何の単語がツイートによく出現するかの解析を行い、単語ごとに集計し、単語の品詞とともに画面へ出力します。
取得したツイートに自然言語処理を用いて解析を行いました。
解析の中で使用した自然言語処理(形態素解析・単語の正規化・ストップワードの除去)のサンプルコードについてご説明します。

◆ Pythonサンプルコード

サンプルコードでは、ツイートはcsvファイルから読み込むようにします。
コードの流れとして、csvを読み込み、単語の正規化・ストップワードの除去を行ったうえで形態素解析を実装し、結果を出力します。

必要なライブラリをインストール
MeCab本体のインストールも必要です。
import pandas as pd
import re
import MeCab
import emoji
ツイートをcsvから読み込み、データフレームに格納
df = pd.read_csv('tweet.csv', encoding='utf-8')
df.head(5)
次に、読み込んだDataFrameを一文ずつ解析します。
# MeCab読み込み
t = MeCab.Tagger("-d dic\mecab-ipadic-neologd")
for s in df['Contents']:
    s = normalize_neologd(s) # ⓵ 単語の正規化
    # ⓶ 形態素解析
    parsed = t.parse(s)
    lines = parsed.split('\n')
    lines = lines[0:-2]
    for i, word in enumerate(lines):
        l = re.split('\t|,', word)
        # 品詞、ストップワード設定
        if l[1] in ['名詞','動詞','形容動詞','形容詞'] and l[1] not in stopword(): # ⓷ ストップワードの除去
             print(l)
①単語の正規化 を行い、②形態素解析 を実行、
出力する条件を指定する中で、③ストップワードの除去 を実装しています。

①  単語の正規化
def normalize_neologd(s):
    # URL削除
    s = re.sub(r'https?://[\w/:%#\$&\?\(\)~\.=\+\-…]+', "", s) 
    # 英数大文字を小文字に統一
    s = s.lower() 
    # 数字を0に統一
    s = re.sub(r'\d+\.*\d*', '0', s) 
    # 改行
    s = re.sub('\n', ' ', s)
    # @返信
    s = re.sub(r'[@@]\w+', '',  s)
    # 絵文字削除
    s = ''.join(c for c in s if c not in emoji.UNICODE_EMOJI)
    # 全角空白の除去
    s = re.sub(r' ', ' ', s)  
    return s
行った処理内容としては、
  • ツイートに付与される画像やリンクなどのURL
  • 英数字の統一
  • 改行、全角空白の変換
  • 絵文字の削除
正規表現を使用し、文字の置き換えを実装しています。

②形態素解析
# MeCab読み込み
t =  MeCab.Tagger("-d dic\mecab-ipadic-neologd")
parsed = t.parse(s)
lines = parsed.split('\n')
lines = lines[0:-2]
for word in lines:
    l = re.split('\t|,', word)
※コードは一部抜粋しています。
MeCabの辞書にNEologdを指定し読み込み、形態素解析を実行しています。

③品詞の指定とストップワードの除去

今回の解析では、品詞を「名詞・動詞・形容動詞・形容詞」に指定しています。また、ストップワードの除去を行い、解析に不必要な単語を外しています。
def stopword():
    with open('dic/stop_word.txt', 'r', encoding='utf-8') as file:
        stopwords = [word.replace('\n', '') for word in file.readlines()]
    return stopwords
Slothlibをテキストに落とし込んだものを読み込んでいます。 ストップワードを一つずつ読み込み、配列に格納した結果を返しています。

◆ 結果出力

品詞が指定のもので且つストップワードが含まれていない単語に絞り、結果を出力しました。試しにツイート一文とその解析結果を出力します。
指定の品詞のみの形態素解析結果を出力できました。絵文字や記号等解析に必要ないものは除いています。

以上が頻出ワード分析の自然言語処理部分のサンプルコードの説明でした。
頻出ワード分析による単語の出現の頻度を利用・応用して、ツイートによるトレンドワードやバズっている言葉を理解できると楽しいかもしれません。

本記事はこれで以上になります。ありがとうございました。

投稿者: エムシバ君