1
2

More than 3 years have passed since last update.

ツイートを整形する【🐶のような絵文字も削除】|つぶやきをWordcloudで可視化②

Last updated at Posted at 2021-07-13

私事ではありますが、2020年5月にコーギーという中型犬をお迎えしました。
愛犬のブログを運営してますので、見てもらえると嬉しいです。

corgi_komugi

「コーギー関連のツイートをwordcloudで可視化したい!」と思い立ち、以下の4項目を実施しました。

  1. TwitterAPIでツイートを取得
  2. 正規表現を用いてツイートを整形 ← 今回
  3. SudachiPyで形態素単位に分割
  4. WordCloudで可視化

一連のコードと様々なアウトプットの表示

今回は、「正規表現を用いてツイートを整える」に関して説明していきます。

対象者

  • ツイートから不要な部分を取り除くために、コードを書きたい人
  • 🐶のような絵文字を上手く取り除けず、困っている人

ざっくりとした要件定義

Input ... ツイート内容のDataFrame
Output ... 自然言語処理のために整形済みのツイート内容

Inputは、こちらの記事で取得したデータフレーム(以下)になります。

2021-07-12_22h36_16.png

Outputは、テキスト内容を整形し、以下のようになります。

2021-07-13_06h26_12.png

コード

コード全体

import pandas as pd
pd.set_option("display.max_colwidth", 280)
import emoji

def remove_emoji(text):
    return emoji.get_emoji_regexp().sub(u'', text)

def format_df_text(text_col,df):
    '''
    ツイートを整形する
    (形態素解析でsudachiを使用予定のため、textの修正が少ない)
    '''
    df['temp'] = df[text_col].replace(r'https?://[w/:%#$&?()~.=+-…]+', '', regex=True) #画像へのリンクを削除
    df['temp'] = df['temp'].replace(r'@[w/:%#$&?()~.=+-…]+', '', regex=True) #'@'によるメンションを削除
    df['temp'] = df['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(半角)を削除
    df['temp'] = df['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(全角)を削除
    df['temp'] = df['temp'].apply(lambda x: remove_emoji(x)) #🐶のような絵文字を削除
    return df['temp']

df['TW_TEXT_mod'] = format_df_text('TW_TEXT',df)

コードの解説

まずは、🐶のような絵文字を削除します。
emojiライブラリをインストールし、絵文字を削除するためのremove_emoji関数を作成しました。

def remove_emoji(text):
    return emoji.get_emoji_regexp().sub(u'', text)

なお、emojiライブラリはpipでインストールできます。

pip install emoji --upgrade

詳細はこちらになります。

最初はこの記事のようにencodeとdecodeで上手く処理しようと試みたのですが、絵文字だけでなく日本語テキストも削除されてしまいました。

「ライブラリをあまりインストールしたくない」と思うかもしれませんが、素直にemojiライブラリを使用することをおススメします。


次に、さきほどのremove_emoji関数を使用し、テキスト全体を整形する関数を作成します。

def format_df_text(text_col,df):
    '''
    ツイートを整形する
    (形態素解析でsudachipyを使用予定のため、textの修正が少ない)
    '''
    df['temp'] = df[text_col].replace(r'https?://[w/:%#$&?()~.=+-…]+', '', regex=True) #画像へのリンクを削除
    df['temp'] = df['temp'].replace(r'@[w/:%#$&?()~.=+-…]+', '', regex=True) #'@'によるメンションを削除
    df['temp'] = df['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(半角)を削除
    df['temp'] = df['temp'].replace(r'#(\w+)', '', regex=True) #ハッシュタグ(全角)を削除
    df['temp'] = df['temp'].apply(lambda x: remove_emoji(x)) #🐶のような絵文字を削除
    return df['temp']

次の章でsudachipyという形態素解析器を使用しますが、sudachipyは自動で正規表記化(たとえば、'summer'という単語を「サマー」と認識)してくれるので、前処理は少なめにしています。

また、ハッシュタグを全角で記入しているケースもあったので、ハッシュタグの半角・全角ともに削除するようコードを書きました。
おそらくですが、ハッシュタグ関連のコードは1行にまとめられると思います。
(正規化が苦手なので諦めました。)


最後に、これらの関数を使用し、テキストを整形します。

df['TW_TEXT_mod'] = format_df_text('TW_TEXT',df)

まとめ

この記事では、正規表現を用いてツイートを整形するコードを見ていきました。

次は、形態素解析器を用いて、ツイートを単語に分割していきたいと思います。
こちらの記事で説明してますので、興味があれば見てもらえると嬉しいです。

corgi_komugi

参考文献

pythonで絵文字を駆逐する
収集したTwitterの対話データの前処理をする。

1
2
0

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
1
2