如何从文本中提取所有表情符号?

新手上路,请多包涵

考虑以下列表:

 a_list = ['🤔 🙈 me así, bla es se 😌 ds 💕👭👙']

如何在新列表中提取所有表情符号 a_list ?:

 new_lis = ['🤔 🙈 😌 💕 👭 👙']

我尝试使用正则表达式,但我没有所有可能的表情符号编码。

原文由 tumbleweed 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

您可以使用 emoji 库。您可以检查单个代码点是否为表情符号代码点,方法是检查它是否包含在 emoji.UNICODE_EMOJI 中。

 import emoji

def extract_emojis(s):
  return ''.join(c for c in s if c in emoji.UNICODE_EMOJI['en'])

原文由 Pedro Castilho 发布,翻译遵循 CC BY-SA 4.0 许可协议

我认为必须指出,之前的答案不适用于 👨‍👩‍👦‍👦 等表情符号,因为它由 4 个表情符号组成,使用 ... in emoji.UNICODE_EMOJI 将返回 4 个不同的表情符号。对于像 🙅🏽 这样的肤色的表情符号也是如此。

我的解决方案

包括 emojiregex 模块。正则表达式模块支持识别字 _素簇_(呈现为单个字符的 Unicode 代码点序列),因此我们可以计算像 👨‍👩‍👦‍👦 这样的表情符号

import emoji
import regex

def split_count(text):

    emoji_list = []
    data = regex.findall(r'\X', text)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI['en'] for char in word):
            emoji_list.append(word)

    return emoji_list

测试

更多带有肤色的表情符号:

 line = ["🤔 🙈 me así, se 😌 ds 💕👭👙 hello 👩🏾‍🎓 emoji hello 👨‍👩‍👦‍👦 how are 😊 you today🙅🏽🙅🏽"]

counter = split_count(line[0])
print(' '.join(emoji for emoji in counter))

输出:

 🤔 🙈 😌 💕 👭 👙 👩🏾‍🎓 👨‍👩‍👦‍👦 😊 🙅🏽 🙅🏽

包括标志

如果你想包含标志,比如 🇵🇰 Unicode 范围将从 🇦🇿 ,所以添加:

 flags = regex.findall(u'[\U0001F1E6-\U0001F1FF]', text)

上面的函数,和 return emoji_list + flags

有关标志的更多信息,请参阅 “A python regex that matches the regional indicator character class”的答案

对于较新的 emoji 版本

要使用表情符号 >= v1.2.0,您必须添加语言说明符(例如 en 如上面的代码所示):

 emoji.UNICODE_EMOJI['en']

原文由 sheldonzy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题