我正在使用 Kaggle 的灾难推文数据集进行 nlp。我正在清理数据并尝试删除表情符号。数据集太大了,我无法单独挑选每一个表情符号并将它们删除。有人知道如何一次性删除它们吗?
这是我尝试过但不起作用的代码
def remove_emoji(string):
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002500-\U00002BEF" # chinese char
u"\U00002702-\U000027B0"
u"\U00002702-\U000027B0"
u"\U000024C2-\U0001F251"
u"\U0001f926-\U0001f937"
u"\U00010000-\U0010ffff"
u"\u2640-\u2642"
u"\u2600-\u2B55"
u"\u200d"
u"\u23cf"
u"\u23e9"
u"\u231a"
u"\ufe0f" # dingbats
u"\u3030"
"]+", flags=re.UNICODE)
return emoji_pattern.sub(r'', string)
为了清除数据,您必须传递完整的数据帧,时间复杂度为 O(n),因此无论如何,您都将选择每一条推文并在其中添加表情符号。
--- 您的函数的稍微改进版本 ---
import re
import emoji
def remove_emoji(text):
emoji_list = emoji.UNICODE_EMOJI.values()
emoji_pattern = "[" + "".join(emoji_list) + "]+"
return re.sub(emoji_pattern, '', text)
为了有效地清除数据,我们可以利用pandarallel库中的parallel_apply方法。该方法允许并行计算,从而显着加速。
from tqdm import tqdm
tqdm.pandas()
from pandarallel import pandarallel
pandarallel.initialize(progress_bar=True)
# assuming your dataframe is called 'df' and the column you want to remove emojis from is 'tweet'
df['tweet_filtered'] = df['tweet'].parallel_apply(remove_emoji)