Получить все смайлики в строке

Я пытаюсь создать функцию, в которую я передаю полную строку, и она находит и возвращает любые присутствующие смайлики. Например, если есть 2 смайлика, он должен вернуть оба. Как я могу это сделать?

В настоящее время я могу понять, как проверить только один конкретный смайлик. Это функция, которую я использую для проверки:

def check(string):
    if '✅' in string:
        print('found', string)

Я хочу сделать это без указания каких-либо смайликов и просто искать все. Я рассмотрел from emoji import UNICODE_EMOJI.

import emoji
import regex

def split_count(text):
    emoji_counter = 0
    data = regex.findall(r'\X', text)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI for char in word):
            emoji_counter += 1
            # Remove from the given text the emojis
            text = text.replace(word, '') 

    words_counter = len(text.split())

    return emoji_counter, words_counter

Хотя это дает нам счет, я не уверен, как изменить его, чтобы получить все смайлики.


person a125    schedule 30.11.2020    source источник
comment
stackoverflow.com/a/62898106/1554386 дает решение без использования внешней библиотеки.   -  person Alastair McCormack    schedule 30.11.2020


Ответы (2)


Вы можете проверить, находится ли буква в emoji.UNICODE_EMOJI:

import emoji

def get_emoji_list(text):
    return [letter for letter in text if letter in emoji.UNICODE_EMOJI]

print(get_emoji_list('✅aze✅'))
# ['✅', '✅']

Если вам нужен набор уникальных эмодзи, измените свое понимание в функции, чтобы создать set вместо list:

import emoji

def get_emoji_set(text):
    return {letter for letter in text if letter in emoji.UNICODE_EMOJI}

print(get_emoji_list('✅aze✅'))
# {'✅'}
person Dorian Turba    schedule 30.11.2020
comment
Предупреждение для OP: похоже, что UNICODE_EMOJI станет dict из dict в будущем выпуске (внешний dict сопоставляет языковые коды с dict для каждого языка, который вы используете в настоящее время) благодаря этот запрос на включение. Возможно, вы захотите сделать что-то вроде from emoji import UNICODE_EMOJI, а затем выполнить try:, UNICODE_EMOJI = UNICODE_EMOJI['en'], except KeyError: pass, чтобы убедиться, что в будущем все будет работать так, как ожидается (сработает try/except и ничего не сделает сейчас, а в будущем будет искать английское dict). - person ShadowRanger; 30.11.2020
comment
Вместо UNICODE_EMOJI["en*] вы можете использовать .get(...) и избегать использования try, кроме - person Dorian Turba; 01.12.2020

Этот emoji_finder метод yield определяет слова, в которых находится смайлик. Таким образом, generator object можно преобразовать в список и использовать где угодно.

import emoji
import regex

def emoji_finder(text):
    emoji_counter = 0
    data = regex.findall(r'\X', text)
    for word in data:
        if any(char in emoji.UNICODE_EMOJI for char in word):
            emoji_counter += 1
            text = text.replace(word, '') 
            yield word

print(list(split_count(stringWithEmoji))) #prints all the emojis in stringWithEmoji
person theWellHopeErr    schedule 30.11.2020