首页 > 解决方案 > 从 Twitter 推文中删除 unicode 编码的表情符号

问题描述

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

我正在使用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(single引号)。

标签: pythontwitterunicodeemojire

解决方案


我的建议是创建一个您想要替换的值数组,并且您需要通过添加另一个反斜杠来转义 \,或者在您的字符串之前添加“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)

推荐阅读