Python stringでemoji表情文字を削除(フィルタ)する

2404 ワード

最近1つの需要をして、公衆番号のユーザー情報をサービス側に同期して、多くのユーザーのニックネームの中に表情記号(emoji)があることを発見して、一般的な処理方式はMySQLの符号化をutf 8 mb 4に変えて、それから討論して、これらの表情も何の役にも立たないで、入庫する時直接削除すればいいです.
ろ過方法
Pythonはどのようにemojiの表情記号をフィルタしますか?次に、表情文字列を除去するコードクリップpython 2を示す.7テスト
import re

emoji_pattern = re.compile(
    u"(\ud83d[\ude00-\ude4f])|"  # emoticons
    u"(\ud83c[\udf00-\uffff])|"  # symbols & pictographs (1 of 2)
    u"(\ud83d[\u0000-\uddff])|"  # symbols & pictographs (2 of 2)
    u"(\ud83d[\ude80-\udeff])|"  # transport & map symbols
    u"(\ud83c[\udde0-\uddff])"  # flags (iOS)
    "+", flags=re.UNICODE)

def remove_emoji(text):
    return emoji_pattern.sub(r'', text)

removing-emojis-from-a-string-in-pythonを参照して、正則的にペアを書いていない場合はsre_constants.error: bad character rangeなどのエラーに遭遇することができます.
ここではunicodeの範囲に基づいて表情記号を削除しますが、共通のものとIOSのものでは、あまりそろっていないはずですし、非常に完全なリストも見つかりませんでした.後で書き込みフィルタリングが抜けないことを確認したら、フィールドをutf 8 mb 4に変更したほうがいいです.より完全なフィルタリング方法があれば、共有を歓迎します.
文字コードの変更
完全にフィルタリングしたり保存したりすることができず、 emoji の符号化設定を変更するしかなかった(mysql 5.6テスト)
ALTER TABLE `table_name` MODIFY `nickname` VARCHAR(40) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQLはutf 8 mb 4を格納する際に4バイトを使用するため、utf 8を直接使用するよりも多くのcharset-unicode-utf 8 mb 4を使用するため、フィールドの長さを再考してください.そうしないと(1406, "Data too long for column 'nickname' at row 1")などのエラーが発生する可能性があります.
その他
  • jsでemoji表情記号
  • を削除する方法