Я сохранил сообщение Skype в виде строк (на телефоне Android). Строки могут содержать эмодзи Skype. Например, строка может быть «Это тест (смеется)». Смайлики закодированы в скобках, например (смеется), (улыбается) и так далее.
Теперь я хотел бы подсчитать количество смайликов в предложении и удалить смайлики из предложения. Конечно, я мог бы просто подсчитать количество пар () и удалить их, но это также удалит обычный текст, указанный в скобках. Более того, в редких случаях может случиться так, что смайлики также будут представлены как :( или :/ и так далее.
Есть ли элегантный способ подсчитать количество смайликов в строке и удалить их в Python?
Похоже, это может работать даже с emojize(string, delimiters=('(', ')'))
Обратите внимание, что Skype и некоторые другие программы используют его формат «эмодзи». Истинный формат эмодзи строго указан. Существует библиотека Python для работы с настоящими эмодзи: эмодзи. Вы можете попробовать найти свои смайлики с параметром delimiters
функции emojize
и с функцией emoji_lis
:
import emoji
waka = ':smile: :) (smile) :smiling_face: WAKA (sign_of_the_horns_medium-light_skin_tone) :speak-no-evil_monkey:'
print(emoji.emoji_lis(emoji.emojize(waka, use_aliases=True)))
[{'location': 0, 'emoji': '?'}, {'location': 13, 'emoji': '☺'}, {'location': 63, 'emoji': '?'}]
print(emoji.emoji_lis(emoji.emojize(waka, delimiters=('(', ')'))))
[{'location': 39, 'emoji': '?'}]
Обратите внимание, что вы не найдете улыбки (например, :)
, :(
и т. д.), только смайлики. Вы также не можете найти все «смайлики» в тексте, потому что вы не можете гарантировать, что Skype использует официальные имена смайликов (более того, я уверен, что их использует нет). Если вы тоже хотите найти улыбки, вам следует создать свой собственный словарь с улыбками, «смайликами» Skype и т. д.
Как я могу подсчитать количество смайликов и как удалить обнаруженные смайлики из строки с помощью вашего подхода, описанного выше?
Должен ли я использовать use_alises=True в emoji.emojize(waka, delimiters=('(', ')'), use_alises=True)?
Это не обязательно, но вы можете использовать его. Это улучшит результаты.
Может быть рабочий процесс, использующий модуль эмодзи. Если вы можете придумать тест, чтобы увидеть, было ли преобразование, то я могу представить следующую методологию: 1. попытаться преобразовать текущий текст (чтобы поймать
;-*
и т. д.); 2. протестируйте замену(text)
на:text:
там, где вtext
нет пробелов или скобок, и проверьте, удалось ли такое преобразование