【问题标题】:Getting a blank column when trying to extract emojis from text尝试从文本中提取表情符号时出现空白列
【发布时间】:2021-06-25 23:25:09
【问题描述】:

我正在尝试从句子中提取表情符号并将它们添加到新列中,但是当我这样做时,新列只包含任何内容,其中表情符号仍在句子中。

作为参考,我的数据集看起来像这样 - 但包含超过 70,000 个与此类似的句子:

Sentence
You look ???? good
Love you ❤️
I am so happy today ????

到目前为止,我已经尝试过this方法:

import pandas as pd 
import emoji

df['emojis'] = df['Sentence'].apply(lambda row: ''.join(c for c in row if c in emoji.UNICODE_EMOJI))
df

还有this方法:

def extract_emojis(text):
    return ''.join(c for c in text if c in emoji.UNICODE_EMOJI)

df['emojis'] = df['Sentence'].apply(extract_emojis)
df

但是,当我尝试它们时,我的最终输出似乎是这样的:

Sentence Emojis
You look ???? good
Love you ❤️
I am so happy today ????

因此,我希望我的输出如下所示:

Sentence Emojis
You look good ????
Love you ❤️
I am so happy today ????

除此之外,我还尝试了this 方法,这正是我想要做的:

import pandas as pd
import emoji as emj

def extract_emoji(df):
    df["emoji"] = ""
    for index, row in df.iterrows():
        for emoji in EMOJIS:
            if emoji in row["Sentence"]:
                row["Sentence"] = row["Sentence"].replace(emoji, "")
                row["emoji"] += emoji

extract_emoji(df)
print(df.to_string())

虽然,使用上面的方法,代码似乎没有完全执行,而且我认为它无法处理数据集中的这么多行;因此,我有超过 70,000 个句子,需要表情符号提取。

如您所见,我快到了,但还没有完全到达。

这三种方法对我来说并不完全奏效,我需要一些额外的帮助。

总之,我只想从每个句子中提取表情符号并将它们添加到一个新列中 - 如果可能的话。

非常感谢。

【问题讨论】:

    标签: python pandas dataframe emoji


    【解决方案1】:

    试试:

    import re
    import emoji
    
    pattern = re.compile(r"|".join(map(re.escape, emoji.UNICODE_EMOJI["en"])))
    
    df["Emojis"] = df["Sentence"].apply(lambda x: "".join(pattern.findall(x)))
    df["Sentence"] = df["Sentence"].apply(lambda x: pattern.sub("", x))
    print(df)
    

    打印:

                   Sentence  Emojis
    0        You look  good      ?
    1              Love you      ❤️
    2   I am so happy today      ?
    

    【讨论】:

    • 嗨 - 感谢您的回复。首先,import emojis 应该是import emoji 吗?此外,当我执行代码时,代码确实有效,但它从所有句子中删除了表情符号,并添加了一个完全没有表情符号的空白列。它与我之前的方法在我的帖子中所做的完全一样。
    • @AnandP2812 是emoji,抱歉错字(pypi.org/project/emoji)。您是否使用 emoji.UNICODE_EMOJI["en"] 创建了模式?
    • 您好,类型没问题。通过创建模式,您指的是这段代码吗? pattern = re.compile(r"|".join(map(re.escape, emoji.UNICODE_EMOJI["en"])))
    • @AnandP2812 是的,这就是模式。
    • 再次您好 - 非常感谢。我分离了那行代码,它已经成功运行。再次感谢!
    猜你喜欢
    • 2015-08-02
    • 2020-12-24
    • 1970-01-01
    • 2017-06-10
    • 2020-03-15
    • 1970-01-01
    • 2021-09-21
    • 2017-07-03
    相关资源
    最近更新 更多