如何从Python中的字符串中提取表情包和标志? [英] How to extract emojis and flags from strings in Python?

查看:0
本文介绍了如何从Python中的字符串中提取表情包和标志?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

import emoji

def emoji_lis(string):
_entities = []
for pos,c in enumerate(string):
    if c in emoji.UNICODE_EMOJI:
        print("Matched!!", c ,c.encode('ascii',"backslashreplace"))
        _entities.append({
            "location":pos,
            "emoji": c
            })
return _entities

emoji_lis("👧🏿 مدیحہ🇵🇰  así, se 😌 ds 💕👭")
  • 匹配!!👧U0001f467
  • 匹配!!🏿U0001f3ff
  • 匹配!!😌U0001f60c
  • 匹配!!💕U0001f495
  • 匹配!!👭U0001f46d

我的代码适用于所有其他表情符号,但我如何检测国家旗帜🇵🇰?

推荐答案

这里有一篇关于Unicode encodes country flags的文章。它们被表示为两个regional indicator symbols(码位范围从U+1F1E6到U+1F1FF)的序列,尽管显然不是两个符号的每一个可能的组合都对应于一个国家(因此也对应于一个国旗)。您可以假设不会出现"坏"组合,或者维护(或导入)具有(当前)270个有效符号对的集合。

然后是地区旗帜。它们被表示为一个黑色标志代码点(U+1F3F4),后跟一系列拼写区域标识符的tags(代码点U+E0001,范围从U+E0020到U+E007F)(例如,对于flag or Wales将是"gbwls"),加上一个"取消标记"代码点(U+E007F)。

除此之外,你当然还有看起来像国旗的常规表情符号。前面提到的black flag (U+1F3F4)是其中之一,但你也有triangular flag (U+1F6A9)等。其中大多数你应该已经能够检测到,因为它们就像其他表情符号一样。但是,我们还没有完全完成。你有复合表情符号的问题,这会影响一些国旗,但也会影响许多其他表情符号。在您的示例中,您可以看到输入字符串中黑人女性的匹配表情符号是一个"基本"女性表情符号,然后是这个棕色补丁。这是因为black woman emojiwoman (U+1F469)dark skin tone (U+1F311)两个代码点组成。在许多其他情况下,您需要两个代码点,并在其间加上一个zero-width joiner (U+200D),以指定您想要合并它们。有时你还需要加上一个variation selector (typically 16, U+FE0F),以表明你想把东西用作表情符号。您可以阅读有关此in this article的更多信息。在旗帜的情况下,例如,您有rainbow flag (U+1F3F3, U+FE0F,‍ U+200D, U+1F308),它将显示为"白旗,变体选择器16(使用白旗表情符号,而不是文本),零角细木,彩虹";或者pirate flag (U+1F3F4,‍ U+200D, U+2620, U+FE0F),将显示为"黑旗,零角细木,骷髅和十字骨,变体选择器16(使用骷髅和交叉骨骼表情符号,而不是文本)"。

现在,有不同的方法可以处理这一切,但在您当前的方法中,您一次迭代一个代码点,因此您将无法检测到复杂的表情符号。你可以只拥有一大组所有有趣的序列(旗帜、一些复合表情符号等)。并在输入中查找它们。您可以检查当前字符是否是区域指示器符号,如果是,则尝试读取下一个代码点以形成标志(并满足于使用单独的简单表情符号)。我不确定什么是最适合你的解决方案(就复杂性/利益权衡而言),但你应该意识到表情符号编码的细微差别和你可能会发现的陷阱。

这篇关于如何从Python中的字符串中提取表情包和标志?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆