从 Twitter 推文中删除 unicode 编码的表情符号

Remove unicode encoded emojis from Twitter tweet

对于一个数据科学项目,我的任务是清理我们的 Twitter 数据。这些推文包含 unicode 编码的表情符号(和其他东西),例如 \ud83d\udcf8(相机表情符号)或 \ud83c\uddeb\ud83c\uddf7(法国国旗)形式。

我正在使用 python-包“re”,到目前为止,我成功地删除了“简单”unicode,例如 \u201c(双引号)和

text = re.sub(u'\u201c', '', text)

但是,当我尝试删除更复杂的结构时,例如

text = re.sub(u'\ud83d\udcf8', '', text) # remove camera emoji
text = re.sub(u'\ud83c\uddeb\ud83c\uddf7', '', text) # remove french flag emoji

什么都没有发生,无论我是在字符串前加上 'u'、'r' 还是什么都没有。 unicode 保留在字符串中。

编辑: 感谢@Shawn Shroyer 的回答,我发现

text = re.sub(u'\ud83d\udcf8', '', text)

工作正常!我只需要逃避反斜杠。现在只剩下我的第二个问题了(见下文)。

第二个问题是我不想单独指定每个表情符号,而是想以更简单的方式将它们全部删除,但是无需删除所有 unicode 字符,因为我需要保留 \u2019(单引号)之类的内容。

我的建议是创建一个你想要替换的值数组,你需要通过添加另一个反斜杠来转义 \,或者在你的字符串之前添加 'ur' 这样反斜杠就不需要转义了.

import re
to_remove_arr = [u"\ud83d\udcf8", u"\ud83c\uddeb\ud83c\uddf7"]
pattern_str = "|".join(to_remove_arr)    
text = re.sub(pattern_str, "", text)

编辑:上述解决方案将删除特定的 Unicode 字符 - 删除所有非 ASCII Unicode 字符:

text = text.encode("ascii", "ignore").decode()

编辑:仅删除我找到的表情符号:

def strip_emoji(text):
    RE_EMOJI = re.compile(u'([\U00002600-\U000027BF])|([\U0001f300-\U0001f64F])|([\U0001f680-\U0001f6FF])')
    return RE_EMOJI.sub(r'', text)