Je obecně známo, že téměř před každou analýzou je potřeba data zkontrolovat a vyčistit, typicky odstranit chybné hodnoty. Příprava dat však zahrnuje mnohem více úkonů, ostatně ne nadarmo se označuje za jednu z nejdůležitějších, avšak i časově nejnáročnějších částí celého postupu analýzy.
Některé softwary neumí správně zpracovat všechny druhy vstupů. Programy mají často problém s texty obsahujícími netisknutelné znaky, speciálními formáty nebo například vloženými obrázky/emoji umístěnými přímo v textu. Dnešní článek je zaměřen na poslední uvedený případ neboli odstranění různých druhů emotikonů (definovaných pomocí Unicode, nikoliv obrázků) z textu uložených např. v Excelu.
Samozřejmě existuje více způsobů, jak se smajlíků z textu zbavit, např. lze jednoduše použít volbu Najít a Nahradit, kterou v dnešní době nabízí téměř každý program. Nevýhodou tohoto přístupu je však nutnost opakovat vyhledávání pro každý druh emotikony znova, takže v případě textu s desítkami až stovkami emoji se stává ruční práce velmi neefektivní.
Automatizovaný postup odstranění smajlíků z textu bude ukazován na následujících datech, ze kterých budeme chtít zanechat pouze text:
Odstranění emoji bude probíhat pomocí programovacího jazyka Python, proto je potřeba si nejprve Excel načíst do prostředí, ve kterém budeme spouštět kód pythonu (např. Visual Studio Code, Jupyter Notebook atd.). K načtení dat použijeme knihovnu pro manipulaci s daty Pandas. V úvodu práce si rovnou nainstalujme i knihovnu pro zadávání regulárních výrazů re, kterou využijeme v dalším kroku postupu.
Kód pro import knihoven:
import pandas as pd
import re
A pro načtení dat:
data_emoji = pd.read_excel(C:\odstraneni_emoji\emoji_seznam.xlsx‘, sheet_name= „seznam_emoji“)
K samotnému odstranění emoji budeme využívat nadefinovanou funkci, ve které jsou uvedeny Unicode pro různé druhy emotikon:
def remove_emoji(string):
emoji_pattern = re.compile(„[„
u“\U0001F600-\U0001F64F“
u“\U0001F900-\U0001F9FF“
u“\U0001F300-\U0001F5FF“
u“\U00002600-\U000026FF“
u“\U0001F680-\U0001F6FF“
u“\U0001F1E0-\U0001F1FF“
u“\U00002500-\U00002BEF“
u“\U00002702-\U000027B0″
u“\U00002702-\U000027B0″
u“\U000024C2-\U0001F251″
u“\U0001f926-\U0001f937″
u“\U00010000-\U0010ffff“
u“\U00002194-\U0000FE0F“
u“\U00002100-\U0000214F“
u“\U000000AE“
u“\U000020E3″
u“\U000000A9″
u“\U0000200D“
„]+“, flags=re.UNICODE)
return emoji_pattern.sub(r“, string)
Jakmile máme načtená data, připravené knihovny Pandas a re a zadefinovanou funkci, přejdeme ke spuštění funkce na našich datech. Zároveň je poté vhodné odstranit z počátku každého řádku mezeru, která zůstala po odstranění emotikonu (protože původní data byla ve formátu „emoji“+“mezera“+“textový popis emoji“).
data_emoji[„emoji“] = data_emoji[„emoji“].astype(str)
data_emoji[„emoji“] = data_emoji[„emoji“].apply(lambda x:remove_emoji(x))
data_emoji[„emoji“] = data_emoji[„emoji“].str.strip()
V našem případě byla původní data uložená ve formátu .xlsx, proto i po očištění byl při exportu zvolen formát .xlsx. Nicméně v praxi je mnohdy vhodnější používat spíše „obyčejnější“ formáty, např. .csv.
data_emoji.to_excel(„C:\odstraneni_emoji\Emoji_seznam_cisty.xlsx“, index=False, sheet_name= „seznam_emoji“)
Celý kód včetně zkušebního souboru lze stáhnout na tomto odkazu. Pozn.: Aby kód správně fungoval, je potřeba mít vytvořenou složku na disku C:\odstraneni_emoji\ a v ní uložený soubor Emoji_seznam.xlsx.
Vyčištění textu od všech emoji by se také dalo udělat opačným přístupem, a to povolením v kódu pouze ASCII znaků a případně české diakritiky. Ukázaný postup lze tedy využít zejména pro odstranění pouze vybraných emotikonů, a to jednoduchým ponecháním daného Unicode v Python kódu a smazáním řádků s ostatními Unicode.
Na závěr je nutné dodat, že i když v dnešní době je již velké množství emotikonů dostupných, tak se stále vytváří nové typy. Proto se může stát, že výše uvedený skript nedokáže nějaký emotikon odstranit. Pokud na takovou situaci narazíte, budeme rádi, když se o příslušný chybějící Unicode s námi podělíte prostřednictvím komentáře.