首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从文本中提取所有表情符号?

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

Stack Overflow用户
提问于 2017-03-31 17:30:57
回答 16查看 72.4K关注 0票数 72

考虑以下清单:

代码语言:javascript
复制
a_list = ['  me así, bla es se  ds ']

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

代码语言:javascript
复制
new_lis = ['     ']

我尝试使用regex,但我没有所有可能的表情编码。

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2017-03-31 17:39:14

您可以使用emoji库。您可以通过检查是否包含在emoji.UNICODE_EMOJI中来检查单个代码点是否是表情符号编码点。

代码语言:javascript
复制
import emoji

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

Stack Overflow用户

发布于 2018-03-12 19:05:16

我认为重要的是要指出,前面的答案不适用于像‍‍‍这样的表情符号,因为它由4个表情符号组成,使用‍‍‍将返回4个不同的表情符号。同样的表情和皮肤颜色类似。

我的解决方案

包括emojiregex模块。regex模块支持识别字素簇(呈现为单个字符的Unicode码点序列),因此我们可以像‍‍‍一样对emojis进行计数。

代码语言:javascript
复制
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

测试

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

代码语言:javascript
复制
line = ["  me así, se  ds  hello ‍ emoji hello ‍‍‍ how are  you today"]

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

产出:

代码语言:javascript
复制
      ‍ ‍‍‍   

包括旗子

如果您希望包括标志,就像Unicode范围将从to,所以添加:

代码语言:javascript
复制
flags = regex.findall(u'[\U0001F1E6-\U0001F1FF]', text) 

到上面的函数和return emoji_list + flags

有关标志的更多信息,请参见这是对“匹配区域指示字符类的python正则表达式”的回答。

用于更新的emoji版本

要使用emoji >= v1.2.0,您必须添加一个语言说明符(如上面代码中的en ):

代码语言:javascript
复制
emoji.UNICODE_EMOJI['en']
票数 46
EN

Stack Overflow用户

发布于 2017-03-31 18:20:32

如果不想使用外部库,可以使用正则表达式和带有适当正则表达式的re.findall()查找表情:

代码语言:javascript
复制
In [74]: import re
In [75]: re.findall(r'[^\w\s,]', a_list[0])
Out[75]: ['', '', '', '', '', '']

正则表达式r'[^\w\s,]'是一个否定式字符类,它与任何不是单词字符、空格或逗号的字符匹配。

正如我在注释中提到的,文本通常包含单词字符和标点符号,这些字符和标点符号将很容易通过这种方法处理,对于其他情况,您只需手动将它们添加到字符类中即可。请注意,由于您可以在字符类中指定一系列字符,您甚至可以使其更短、更灵活。

另一种解决方案是使用接受表情符号的字符类([]不含^)来代替不包含非表情符号字符的否定式字符类。因为有大量的emojis 具有不同的unicode值,所以只需要将范围添加到字符类中。如果您想匹配更多的表情符号,这里是一个很好的引用,包含所有标准的表情符号,并为不同的表情符号提供相应的范围http://apps.timwhitlock.info/emoji/tables/unicode

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43146528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档