Как да изразя цялото това забавление с думи
В момента съм по средата на проект за изтриване на Twitter (повече за това друг ден) и се натъкнах на това:
„Комуникации 🌿🖤 | тук за пуканките.🍿’
Излишно е да казвам, че трябваше да направя нещо.
За мое щастие съществува чудесна библиотека, която превръща това:
🗣 @GamblingPodcast\n🚀 @theSGPNetwork🤝@bluewirepods\n\n #TogetherBlue | #Hokies 🦃 | #Bitcoin\n\nАкредитиран 1H под инвеститор\n🎥
в това:
:speaking_head: @GamblingPodcast\n:rocket: @theSGPNetwork:handshake:@bluewirepods\n\n #TogetherBlue | #Hokies :turkey: | #Bitcoin\n\nАкредитиран 1 час под инвеститор\n:movie_camera:
Коя библиотека е това, ще попитате? Защо „емоджи“, разбира се 😁.
Как да използвате emoji
Инсталация
Не може да бъде по-лесно да инсталирате emoji
:
$ pip install emoji
След като бъде инсталиран, можем да проучим функционалността му.
Основни случаи на употреба
Въпреки че можете да конвертирате кратки кодове в емотикони по този начин:
result = emoji.emojize('Python is the :bomb:') print(result)
Python is the 💣
истинската стойност на тази библиотека е преобразуването на емотикони в кратки кодове по следния начин:
result = emoji.demojize('Python is the 💣') print(result)
'Python is the :bomb:'
за почистване, филтриране и/или бъдещ анализ.
Езици, различни от английски
Както е посочено в документите, езикът по подразбиране е английски, но също така поддържа следните европейски езици: немски португалски, италиански, френски и испански. Примерно:
result = emoji.demojize('Python es la 💣', language='es') print(result)
Python es la :bomba:
Сега знам какво си мислите:
„Как да почистя цяла серия Pandas?“
Благодаря, че попита.
Почистване на серия Pandas
Представете си, че имате серия от панди като тази по-долу:
sentences = ["I want a 🍔", "I don't want a 🍔", "I ❤️ 🍔", "I 💩 🍔", "I am 💩 ⚽"] pd.Series(sentences) 0 I want a 🍔 1 I don't want a 🍔 2 I ❤️ 🍔 3 I 💩 🍔 4 I am 💩 ⚽
За да замените емоджитата с кратките кодове, можете просто да подадете emoji.demojize()
in ламбда функция като тази:
pd.Series(sentences).apply(lambda x: emoji.demojize(x))
и за нашия пример с играчка ще получите желания резултат:
0 I want a :hamburger: 1 I don't want a :hamburger: 2 I :red_heart: :hamburger: 3 I :pile_of_poo: :hamburger: 4 I am :pile_of_poo: :soccer_ball:
Въпреки това, „животът не е шоу с пони“, така че не можем да сме сигурни, че всеки запис в нашия pd.Series
ще съдържа текст като в нашия пример за играчка по-горе. Например, ако нашето pd.Series
съдържа една единствена Nan
стойност като тази:
sentences = ["I want a 🍔", "I don't want a 🍔", "I ❤️ 🍔", "I 💩 🍔", "I am 💩 ⚽, np.nan"] pd.Series(sentences) 0 I want a 🍔 1 I don't want a 🍔 2 I ❤️ 🍔 3 I 💩 🍔 4 I am 💩 ⚽ 5 NaN
ще получим следната грешка:
TypeError: object of type ‘float' has no len()
За тази цел се нуждаем от начин да обработваме NaN
стойности и въпреки че не се съмнявам, че има други безкрайно по-сбити/ефективни/питонични начини за справяне с този проблем (и ако знаете за такъв, моля, оставете го в коментарите), методът, описан по-долу, работи за мен и е много лесен.
def emoji_to_text(text):
if type(text) != float:
return emoji_cleaner(text)
else:
return text
Казано по-просто, докато стойността в нашата серия не е float (каквито са NaN
стойностите), ние сме добри.
Накрая предаваме нашата emoji_to_text()
функция на pd.apply()
за създаване на new pd.Series
:
pd.Series.apply(emoji_to_text)
Ето! Вече имате pd.Series
, където всяко емоджи е заменено със съответния кратък код.
Това е страхотно, работя с DataFrame. Какво да правя?
О, това е наистина лесно!
Просто извикайте apply()
на колоната във вашия pd.DataFrame
, която искате да конвертирате, и запазете изхода в нова колона по следния начин:
df['clean_sentences'] = df['sentences'].apply(cleaner)
Заключителни мисли
Ако правите текстов анализ на публикации в социалните медии, вероятността да срещнете емотикони е почти 100%. Като такъв, наличието на инструмент, който бързо и лесно ги преобразува в използваем текст, е от съществено значение.
За наш късмет библиотеката emoji
е един такъв инструмент.