Jigsaw Rate Severity of Toxic Comments(絵文字削除)

前処理その1:絵文字の処理

まずは絵文字を含むテキストを判定。含まれた絵文字を削除するかどうかはまた判断。

参考サイト

SNSテキストから顔文字・絵文字・URLを抽出する - Qiita

やってみた

まずは絵文字を含むテキストを抽出。テキストをみてみたところ、絵文字が攻撃的な意味を直接もつものはそれほどなかった💩。👎とかあんのかなと思ってたけど。なので、絵文字を削除しても情報は抜けないと思うので削除。for文でひとつずつ消したけど、もうちょっとうまくできないものかねえ。

import emoji
import unicodedata

def emoji_detect(text):
    def extract_emoji(words):
        return [w for w in words if w in emoji.UNICODE_EMOJI_ENGLISH]

    text = unicodedata.normalize('NFKC', text) # NFKC正規化
    emojis = extract_emoji(text)
    return emojis

df["text_emoji"] = df["text"].apply(lambda x: emoji_detect(x))
df["emoji_check"] = df["text_emoji"].apply(lambda x: True if len(x) != 0 else False)

tmp_emoji = df.loc[df['emoji_check']].copy()
tmp_NOT_emoji = df.loc[~df["emoji_check"]].copy()

emoji_list = []
for i in range(len(tmp_emoji.text_emoji)):
    emoji_list.extend(tmp_emoji.text_emoji.iloc[i])
emoji_list = list(set(emoji_list))

for i in emoji_list:
    tmp_emoji["text"] = tmp_emoji["text"].str.replace(i, "")    

print(tmp_emoji.shape) # (1133, 4)
print(tmp_NOT_emoji.shape) # (158438, 4)
print(emoji_list) # ['♠', '☎', '♨', '☀' '✒', '▶', '🎄',...

df = pd.concat([tmp_emoji, tmp_NOT_emoji], axis= 0, sort= True).loc[:, ["text", "y"]].copy()
del tmp_emoji, tmp_NOT_emoji