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