pythonでテキストデータから絵文字(emoji)を削除する

f:id:ueponx:20220107003357p:plain

年末に久しぶりに紅白歌合戦のツイートを取得してWordCloudのデータを作成してみようと思ったのですが、今まで使っていたPCを実家に持って行かなかったので以前のブログエントリを使って再構成していこうとしたのですが、pythonのライブラリ(モジュール)関係が少し変わっていたようでそのままでは動きませんでした。

参考

uepon.hatenadiary.com

uepon.hatenadiary.com

そのままで動作しない理由はemojiモジュールのバージョンアップにより動作が違っていたためでした。pip freezeと使用してrequirements.txtなどを作成しておけば旧バージョンをインストールできたのになあと思ってしまったのですが、さすがに2018年当時のライブラリをつかうのもどうかなと思って今回はソースを修正して対応することにしました。

状態の保持と一括インストール

# インストール済のライブラリ(モジュール)を保存
$ pip freeze > requirements.txt
# モジュールの状態を一括インストール
$ pip install -r requirements.txt

当時emojiモジュールを使用していたのはなぜかというとツイートに含まれる絵文字を削除するためでした。

以前は以下のような関数を作成して、絵文字の削除をしていました。絵文字集合に含まれるかをfor文で走査して絵文字を含まない文字列にしていました。

import emoji

def removeEmoji(src):
    return ''.join(c for c in src if c not in emoji.UNICODE_EMOJI)

今回は新しいemojiモジュールをインストールして、以下のようなコードに変更しました。今回は正規表現を使用して絵文字の判定を行い、絵文字の場合は空文字に変更して文字列にするという処理に変えました。下記のコードを実行すると絵文字以外のなんちゃってという部分のみが残る形になります。

import re
import emoji

emojiString = '😢🥺🤮🤣🤣🤣😆なんちゃって😅🙂😱😸🤔😛😾'
print(re.sub(emoji.get_emoji_regexp(), '', emojiString))

関数化するのであれば以下のようになります。

def removeEmoji(src):
    return re.sub(emoji.get_emoji_regexp(), '', src)

絵文字のコードは結構増えてきていることもあるので、モジュールに準備されている機能を純粋に使用するのがいいのかなと思いました。

emojiモジュールの使い方は以下が参考になると思います。

参考

qiita.com

おわりに

今回は3年前に作成していたエントリがそのままで動作しなかったので、新しいモジュールに対応させるべく修正を行ってみました。 Twitterの書き込みにも絵文字が増えたこともあり、絵文字を削除してデータ収集を行いましたが、逆にどんな絵文字が使われているのかを調べてみるのも面白いかなと思ったりもしました。

今年の紅白のWordCloudのデータは以下のようになっていましたが、今年は出演者の名前が大きくなっていたなあという印象がありますね。

f:id:ueponx:20220107002845p:plain

色々と興味深いテキストが取得できてよかったです。