Извлечь Unicode-смайлики в список, Python 3.x

Я работаю над некоторыми твиттер-данными и хочу отфильтровать смайлики в списке. Сами данные закодированы в utf8. Я читаю файл построчно, как эти три строки примера:

['This', 'is', 'a', 'test', 'tweet', 'with', 'two', 'emoticons', '????', '⚓️']
['This', 'is', 'another', 'tweet', 'with', 'a', 'emoticon', '????']
['This', 'tweet', 'contains', 'no', 'emoticon']

Я хотел бы собрать смайлики для каждой строки следующим образом:

['????', '⚓️']

и так далее.

Я уже исследовал и обнаружил, что в python есть пакет «emoji». Я пытался использовать его в своем коде вот так

import emoji

with open("file.txt", "r", encoding='utf-8') as f:
    for line in f:
        elements = []
        col = line.strip('\n')
        cols = col.split('\t')
        elements.append(cols)

        emoji_list = []
        data = re.findall(r'\X', elements)
        for word in data:
            if any(char in emoji.UNICODE_EMOJI for char in word):
                emoji_list.append(word)

Первая попытка

import emoji

with open("file.txt", "r", encoding='utf-8') as f:
    for line in f:
        elements = []
        col = line.strip('\n')
        cols = col.split('\t')
        elements.append(cols)

        emoji_list = []

        for c in elements:
            if c in emoji.UNICODE_EMOJI:
                emojilist.append(c)

Вторая попытка

Я попробовал примеры, которые были приведены здесь Как извлечь все смайлики из текста ? но мне они не подошли, и я не знаю, что я сделал не так.

Я был бы очень признателен за любую помощь в извлечении смайликов, заранее спасибо! :)


person Anastasia    schedule 16.06.2018    source источник
comment
Ваш отступ неверен; после for line in f: вам нужно отступить от остальных.   -  person L3viathan    schedule 16.06.2018
comment
Почему в ожидаемом выводе нет смайлика ?????   -  person Austin    schedule 16.06.2018
comment
Я хочу, чтобы он создавал список со смайликами для каждой строки, а не для всего набора данных сразу. Так что мне также нужно рассмотреть строки, которые не содержат смайликов.   -  person Anastasia    schedule 16.06.2018


Ответы (1)


Смайлики существуют в нескольких диапазонах Unicode, представленных этим шаблоном регулярного выражения:

>>> import re
>>> emoji = re.compile('[\\u203C-\\u3299\\U0001F000-\\U0001F644]')

Вы можете использовать это для фильтрации ваших списков:

>>> list(filter(emoji.match, ['This', 'is', 'a', 'test', 'tweet', 'with', 'two', 'emoticons', '????', '⚓️']))
['????', '⚓️']

Примечание. Шаблон является приблизительным и может содержать некоторые дополнительные символы.

person L3viathan    schedule 16.06.2018
comment
Огромное спасибо! :) - person Anastasia; 16.06.2018