Как идентифицировать одинаковые смайлики разных цветов / оттенков кожи в python?

#python #python-3.x #unicode #emoji

#python #python-3.x #юникод #смайлики

Вопрос:

Как идентифицировать одинаковые смайлики с разными цветами?

Пример: 👍🏻 👍🏽 👍 следует рассматривать как одинаковые

Редактировать: в настоящее время я использую пакет 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
  

Комментарии:

1. пожалуйста, предоставьте пакет python / пример кода, который вы используете для чтения этих смайликов

Ответ №1:

В пакете emoji нет метода, доступного для одинаковой обработки одних и тех же символов разными цветами. Однако мы можем добиться этого, сравнив имена смайликов с общей строкой (вот она 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")
  

Список поддерживаемых смайликов и их названия см. в исходном коде здесь .

Комментарии:

1. важно правильное разделение символов. Хорошая работа

Ответ №2:

Каждый смайлик с поднятыми пальцами начинается с 1F44D codepoint ( 'THUMBS UP SIGN' ) , за которым следует кодовая точка компонента skin tone, поэтому вы можете фильтровать их следующим образом:

 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 для вашего варианта использования, поскольку она возвращает один и тот же смайлик независимо от наличия или отсутствия модификатора тона кожи.