python - 从 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引号)。
解决方案
我的建议是创建一个您想要替换的值数组,并且您需要通过添加另一个反斜杠来转义 \,或者在您的字符串之前添加“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)
推荐阅读
- python - 如何在一张图上叠加每天的时间序列
- sql - SQL 查询 - 使用 ALL 和 '=' 运算符未获得预期结果
- python - 抓取许多页面但 URL 相同的动态 DataTable
- javascript - 如何在 mongo 集合中一次性查找、迭代和更新文档?
- c# - 使用 .NET 5 的问题
- excel - 以地址字符串为参考值的 Excel OFFSET 函数
- laravel - Laravel 验证消息包含“验证”。而不是自定义错误消息
- flutter - 选择 Tex Field flutter 时的输入警告
- python - 熊猫面具、GroupBy 和 CumSum
- visual-c++ - Visual Studio 2017。LNK1104:一次成功构建后无法打开文件 ....\Debug\....exe