Pythonで絵文字を判定・削除する方法

Pythonで絵文字を扱うemojiモジュールについて解説します。

Pythonで絵文字を判定・削除する方法

あまり意識されませんが、絵文字には著作権があります

同じ絵文字であっても、アプリやWebサイトごとに、表示が違うことがありますよね。

絵文字は、UNICODE協会が絵文字のUnicodeを指定し、それに各ベンダーが対応する形で作成されます。そのため、オープンソースになっていないAppleが作成した絵文字などは、商用利用するためには許諾が必要だったりします。

自社のサービスを運営する場合、ユーザーからのテキストのインプットから、絵文字を判定して削除したり、置き換えたりしたいことがあります。

今回はPythonで絵文字を判定・削除する方法について解説します。

emojiモジュールを使う(急いでいる人向け)

絵文字に関する処理はemojiモジュールを使います。

# 絵文字処理のまとめ

import emoji

# 単独の絵文字を判定する(複数の絵文字はFalseを返す)
emoji_str = "😌"
emoji.is_emoji(emoji_str) # True


# 文字列内の絵文字の位置をリストで返す
multiple_emoji_str = "こんにちは😗よろしくお願いします🤡"
emoji_list = emoji.emoji_list(multiple_emoji_str)
# [{'match_start': 5, 'match_end': 6, 'emoji': '😗'}, {'match_start': 16, 'match_end': 17, 'emoji': '🤡'}]


# 絵文字の種類をすべて抽出する(重複なし)
multiple_emoji_str = "こんにちは😗よろしくお願いします🤡🤡"
emoji_list = emoji.distinct_emoji_list(multiple_emoji_str)
# ['🤡', '😗']


# 絵文字をカウントする・重複を除くならunique=Trueをつける
emoji_str = "こんにちは😗よろしくお願いします🤡🤡"
emoji_count = emoji.emoji_count(emoji_str) # 3
emoji_count_unique = emoji.emoji_count(emoji_str, unique=True) # 2


# 絵文字を削除する
string = "よろしくお願いします😎"
no_emoji_string = emoji.replace_emoji(string) # よろしくお願いします

# 第二引数を指定すると、絵文字を置き換える
replaced_emoji_string = emoji.replace_emoji(string, "(絵文字です)") # よろしくお願いします(絵文字です)

Pythonで絵文字を判定する

Pythonで絵文字を判定するには、emojiライブラリを使います。emojiライブラリは、主にUnicodeの絵文字と絵文字名を相互に変換するために使用されます。

文字列が絵文字を含んでいるかどうかを判定するためのいくつかのメソッドが定義されています。

emojiライブラリのインストール

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

$ pip install emoji

文字列が絵文字かどうかを判定する

is_emoji()メソッドを使います。文字列を指定し、それが単体の絵文字であればTrueを返します。複数の文字や絵文字には対応しておらず、絵文字を含む文字列を入力してもFalseが返されるので注意してください。

# 文字列が絵文字かどうか判定する

import emoji

# 絵文字であればTrueを返す
emoji_str = "😌"
print(emoji.is_emoji(emoji_str))
# True

# 複数の絵文字はFalseを返すので注意
multiple_emoji_str = "😗😠🤡"
print(emoji.is_emoji(multiple_emoji_str))
# False

文字列の中の絵文字の位置を判定する

emoji_list()メソッドは、文字列中の絵文字とその位置を辞書型のリストで返します。

# 文字列中の絵文字の位置を判定する

import emoji

# 絵文字とその位置のリストを返す
emoji_str = "こんにちは😌"
emoji_list = emoji.emoji_list(emoji_str)
print(emoji_list)
# [{'match_start': 5, 'match_end': 6, 'emoji': '😌'}]


# 複数の絵文字では、それぞれの位置を返す
multiple_emoji_str = "こんにちは😗よろしくお願いします🤡"
emoji_list = emoji.emoji_list(multiple_emoji_str)
print(emoji_list)
# [{'match_start': 5, 'match_end': 6, 'emoji': '😗'}, {'match_start': 16, 'match_end': 17, 'emoji': '🤡'}]


# 絵文字を含まなければ空のリストを返す
no_emoji_str = "こんにちは"
emoji_list = emoji.emoji_list(no_emoji_str)
print(emoji_list)
# []

絵文字を重複せずに抜き出す

絵文字を重複せずに抜き出すには、distinct_emoji_list()メソッドを使う。

# 絵文字を重複せずに抜き出す

import emoji

# 絵文字だけを抜き出してリストにする
emoji_str = "こんにちは😌"
emoji_list = emoji.distinct_emoji_list(emoji_str)
print(emoji_list)
# ['😌']


# 重複した絵文字はまとめられる
multiple_emoji_str = "こんにちは😗よろしくお願いします🤡🤡"
emoji_list = emoji.distinct_emoji_list(multiple_emoji_str)
print(emoji_list)
# ['🤡', '😗']

絵文字の個数をカウントする

文字列に含まれる絵文字の個数をカウントするにはemoji_count()メソッドを使います。ユニークな絵文字の個数を知りたい場合には、unique=Trueを指定します。

# 絵文字の個数をカウントする

import emoji

emoji_str = "こんにちは😗よろしくお願いします🤡🤡"
emoji_count = emoji.emoji_count(emoji_str)
print(emoji_count)
# 3

# unique=Trueでユニークな個数をカウントする
emoji_count = emoji.emoji_count(emoji_str, unique=True)
print(emoji_count)
# 2

Pythonで絵文字を削除する

Pythonで絵文字を削除する場合も、emojiライブラリを使います。

replace_emojiメソッドで絵文字を置き換える

絵文字を削除するには、replace_emoji()関数を使います。

replace_emoji(string, replace='', version=-1)と定義されており、stringは置き換える対象となる文字列、replaceは置き換え後の文字列、versionを指定すると、指定したバージョンよりも新しいバージョンの絵文字のみを置き換えます。

必須なのはstringのみで、replaceversionはオプションです。replaceを指定しない場合には、絵文字が削除されます

# emojiライブラリのreplace_emoji()の使い方

import emoji

string = "よろしくお願いします😎"
print(string)
# よろしくお願いします😎

# 絵文字を削除する
no_emoji_string = emoji.replace_emoji(string)
print(no_emoji_string)
# よろしくお願いします


# replace(第二引数)を指定して、絵文字を置き換える
replaced_emoji_string = emoji.replace_emoji(string, "(絵文字)")
print(replaced_emoji_string)
# よろしくお願いします(絵文字)

絵文字のバージョンについて補足

絵文字にはバージョンがあり、それぞれのバージョンで使用できる絵文字の種類や絵が違います。アプリやOSによって対応している絵文字のバージョンが異なるため、例えば、そのプラットフォームで対応していない絵文字がテキストとして入力されると、適切に表示されなくなったりします。

そのため、先ほど紹介したreplace_emoji()メソッドのversion引数で『指定したバージョンより上のバージョンの絵文字だけ変換する』という指定ができるようになっています。

絵文字のバージョンはEmojipediaで確認することができます。