【问题标题】:How to identify same emoji of different colors/skin tone in python?如何在python中识别不同颜色/肤色的相同表情符号?
【发布时间】:2021-01-12 13:28:53
【问题描述】:

如何识别不同颜色的相同表情符号?

例如:?????????? ?????? ???应该被认为是相同的

编辑:目前我正在使用emoji

import regex
import emoji
exm = "poli kariku fans adi like ???????? ???????? ???? sub tharamo"
characters = regex.findall("\X",exm)
for char in character:
  if char in emoji.UNICODE_EMOJI:
     #do something

【问题讨论】:

  • 请提供您用于阅读这些表情符号的python包/示例代码

标签: python python-3.x unicode emoji


【解决方案1】:

表情包中没有可用的方法来处理不同颜色的相同符号相似。但是,我们可以通过将表情符号名称与普通字符串进行比较来实现这一点(这里是thumbs_up

试试下面的代码。

import regex
import emoji
exm = "poli kariku fans adi like ?? ?? ? sub tharamo"
characters = regex.findall("\X",exm)
for char in characters:
  if char in emoji.UNICODE_EMOJI:
      if "thumbs_up" in (emoji.demojize(char)):
          print("It is thumbs_up")

有关支持的表情符号列表及其名称,请参阅源代码here

【讨论】:

  • 正确的字符分割很重要。干得好
【解决方案2】:

每个竖起大拇指的表情符号都以代码点1F44D ('THUMBS UP SIGN') 开头,然后是肤色组件代码点,因此您可以像这样过滤它们:

thumbs_up = chr(0x1F44D) # or '\N{THUMBS UP SIGN}' or just '?'
thumbs = filter(lambda c: c.startswith(thumbs_up), characters)
for thumb in thumbs:
    print(thumbs)

输出

??
??
?

【讨论】:

    【解决方案3】:

    我认为您不需要为您的用例使用正则表达式,您可以只使用表情符号的长度:

    import emoji
    
    NUM_COLUMNS = 4
    TABLE_COLUMN_WIDTH = 18
    
    def is_emoji(s):
        return s in emoji.UNICODE_EMOJI
    
    def is_default_emoji(s):
        return len(s) == 1 and s in emoji.UNICODE_EMOJI
    
    def get_default_emoji(s):
        return s[0] if s in emoji.UNICODE_EMOJI else None
    
    def pretty_print_line(line):
        print(''.join(word.ljust(TABLE_COLUMN_WIDTH) for word in line.split()))
    
    text = "poli kariku fans adi like ?? ?? ?? ?? ?? ? sub tharamo"
    
    pretty_print_line("string is_emoji is_default_emoji get_default_emoji")
    print("=" * NUM_COLUMNS * TABLE_COLUMN_WIDTH)
    for s in text.split():
        pretty_print_line(f'{s} {is_emoji(s)} {is_default_emoji(s)} {get_default_emoji(s)}')
    

    输出:

    string            is_emoji          is_default_emoji  get_default_emoji 
    ========================================================================
    poli              False             False             None              
    kariku            False             False             None              
    fans              False             False             None              
    adi               False             False             None              
    like              False             False             None              
    ??                True              False             ?                 
    ??                True              False             ?                 
    ??                True              False             ?                 
    ??                True              False             ?                 
    ??                True              False             ?                 
    ?                True              True              ?                 
    sub               False             False             None              
    tharamo           False             False             None  
    

    您可以为您的用例使用类似于 get_default_emoji 的一些逻辑,因为无论是否存在肤色修饰符,它都会返回相同的表情符号。

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 2017-10-06
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      相关资源
      最近更新 更多