【问题标题】:Stripping every and all emoji from a sentence string从句子字符串中剥离所有表情符号
【发布时间】:2017-11-28 16:16:27
【问题描述】:

工作环境Python版本:

Python 3.6.1

我已经在 StackOverflow 和互联网上的其他地方尝试了这里列出的一些方法 - 但我似乎仍然无法使其正常工作。

我可以有任何字符串...并且表情符号可能会或可能不会被空格包围,可能在 " 内或在主题标签等之后...无论如何,这些情况给我带来了一些麻烦。

这就是我所拥有的:

import sys
sys.maxunicode

emoji_pattern = re.compile("["
                           u"\U0001F600-\U0001F64F"  
                           u"\U0001F300-\U0001F5FF"
                           u"\U0001F680-\U0001F6FF"
                           u"\U0001F1E0-\U0001F1FF"
                           "]+", flags=re.UNICODE)

text = "" #This could be any text with or without emojis
text = emoji_pattern.sub(r'', text)

然而,当显示或打印时,文本中仍有表情符号。

text是一个unicode字符串,即type(text)返回<type 'unicode'>

那么我错过了什么?我似乎还有表情符号。我还希望有一种方法可以反映将来可以扩展这些 Unicode 名称,因此我宁愿有一种方法可以保留所有常规字符。

将文本编码为'unicode_escape' 会得到以下结果:

b'[1/2] Can you see yourself as Prompto or Aranea?\\nGet higher quality images from our FB page \\n\\u2b07\\ufe0f\\u2026'

未格式化的原始文本为:

[1/2] Can you see yourself as Prompto or Aranea?
Get higher quality images from our FB page
⬇️…

【问题讨论】:

  • 你确定你使用的是 Python 3 吗?在 Python 3 上,type(text) 应该返回 str
  • 您的正则表达式似乎使用的是 UTF-16 代理项,而不是您要删除的字符的实际代码点。
  • @AlastairMcCormack 嗨,Alistair - 你是对的。我没有在正确的环境中 - 刚刚激活,我实际上得到了<Class 'str'> ...话虽如此,在 Python 3.6 环境中,我仍然返回带有表情符号的文本。
  • @user2357112 好的 - 刚刚快速检查了这一点,并修改为包含 sys.maxunicode 并将 emoji_pattern 更改为引用。
  • 这是一个带有文字转义码的字节字符串。 .decode('unicode-escape') 获取 Unicode 字符串。但是,这些字符不在您指定的范围内。我认为 Twitter 返回了 JSON,因此您可能需要查看 json 模块来处理它。

标签: python unicode emoji


【解决方案1】:

不确定您认为sys.maxunicode 做了什么,但您的代码适用于 Python 3.6。你确定你已经涵盖了所有的表情符号范围吗?

import re

emoji_pattern = re.compile("["
                           u"\U0001F600-\U0001F64F"  
                           u"\U0001F300-\U0001F5FF"
                           u"\U0001F680-\U0001F6FF"
                           u"\U0001F1E0-\U0001F1FF"
                           "]+", flags=re.UNICODE)

text = 'Actual text with emoji: ->\U0001F620\U0001F310\U0001F690\U0001F1F0<-'
print(text)
text = emoji_pattern.sub(r'', text)
print(text)

输出:

Actual text with emoji: ->????<-
Actual text with emoji: -><-

请注意,flags=re.UNICODE 是 Python 3.6 中的默认值,因此不需要它。 Unicode 字符串也是默认的,所以u"xxxx" 可以只是"xxxx"

【讨论】:

  • @Michael Roberts 然后为minimal, correct, verifiable example 提供一个对您来说失败的实际文本字符串,而不是text = "" #This could be any text with or without emojis。我们不是读心术的人。您不必提供从 Twitter 检索数据的代码,而是提供您收到的文本字符串。它可能是一个字节字符串或 JSON 编码的什么的。
  • 添加了原始格式和编码的 unicode 转义格式的文本示例。希望有人知道如何处理它。
猜你喜欢
  • 1970-01-01
  • 2016-10-30
  • 2019-04-08
  • 2010-09-19
  • 2012-09-30
  • 2018-04-20
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多