You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pandas与emoji库标准化彩色Emoji并合并同类型计数?

合并同类型Emoji统计的解决方案

问题原因

  • 带肤色修饰的Emoji(如👍🏻、👍🏼、👍)属于不同Unicode字符,emoji.emoji_list会将其视为独立条目,无法自动合并。
  • 语义相近的Emoji(如😃、😀)本身是不同的Emoji实体,库默认不会归为同一类,需手动定义分类规则。

方法1:合并带肤色修饰符的同基础Emoji

利用emoji.demojize将Emoji转为文本名称,去除肤色相关后缀后作为分组依据,实现同基础Emoji的合并统计。

import emoji
import pandas as pd

# 示例数据
data = {'id': [1, 2, 3],
        'renderedContent': ['Hello 😃👍🏻', 'How are you? 😀👍🏼', '👍']}
df5 = pd.DataFrame(data)

# 提取所有Emoji
text = df5['renderedContent'].str.cat(sep='\n')
emoji_list = pd.DataFrame(emoji.emoji_list(text))

# 标准化Emoji:去除肤色修饰符,得到基础Emoji
def normalize_emoji(emoji_char):
    demojized = emoji.demojize(emoji_char)
    # 截断肤色修饰符后缀
    base_name = demojized.split('_skin_tone')[0] if '_skin_tone' in demojized else demojized
    # 转回Emoji用于展示
    base_emoji = emoji.emojize(base_name)
    return base_emoji, base_name

emoji_list[['base_emoji', 'base_name']] = emoji_list['emoji'].apply(lambda x: pd.Series(normalize_emoji(x)))

# 按基础Emoji分组统计
out = (emoji_list.value_counts('base_emoji')
       .rename_axis('Smiley').rename('Count').reset_index()
       .assign(Type=lambda x: x['Smiley'].apply(emoji.demojize)))

print(out)

运行后,所有带不同肤色的👍会被合并为同一条目,计数为3。


方法2:合并语义同类的Emoji(如不同笑脸)

如果需要将语义相近的Emoji(如😃、😀)归为同一类统计,需自定义分类映射表,将不同Emoji名称映射到统一类别。

import emoji
import pandas as pd

# 示例数据
data = {'id': [1, 2, 3],
        'renderedContent': ['Hello 😃👍🏻', 'How are you? 😀👍🏼', '👍']}
df5 = pd.DataFrame(data)

# 自定义Emoji分类映射(可根据需求扩展)
emoji_categories = {
    ':grinning_face:': '笑脸类',
    ':grinning_face_with_big_eyes:': '笑脸类',
    ':thumbs_up:': '点赞类'
}

# 提取所有Emoji
text = df5['renderedContent'].str.cat(sep='\n')
emoji_list = pd.DataFrame(emoji.emoji_list(text))

# 标准化并分类Emoji
def categorize_emoji(emoji_char):
    demojized = emoji.demojize(emoji_char)
    base_name = demojized.split('_skin_tone')[0] if '_skin_tone' in demojized else demojized
    # 映射到自定义类别,未匹配的保留原名称
    category = emoji_categories.get(base_name, base_name)
    base_emoji = emoji.emojize(base_name)
    return base_emoji, category

emoji_list[['base_emoji', 'Category']] = emoji_list['emoji'].apply(lambda x: pd.Series(categorize_emoji(x)))

# 按类别分组统计
out = (emoji_list.value_counts('Category')
       .rename_axis('Emoji Category').rename('Count').reset_index())

print(out)

运行后,😃、😀会合并为“笑脸类”(计数2),所有点赞Emoji合并为“点赞类”(计数3)。


关键要点

  • emoji.demojize是核心处理工具,通过文本化Emoji名称,方便处理修饰符和分类逻辑。
  • 自定义分类映射表可根据业务需求扩展,覆盖更多需要合并的Emoji类别。
  • 仅需合并带肤色的同基础Emoji时,使用方法1即可;需要宽泛语义分类时,使用方法2。

内容的提问来源于stack exchange,提问作者Sebastián

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:15:30