python过滤文本中的emoji表情


最近在处理文本内容的时候发现很多文本会有特色表情,由于占位较多,想着能过滤掉就好,也不影响文本内容含义,并且对后续做语义分析也有帮助。
网上搜了下,总体还是通过正则匹配过滤表情,因为表情字符在unicode中有对应对编码集。
比较多的搜索结果采用如下的正则:
import re
def filter_emoji(content):
    try:
        cont = re.compile(u'[\U00010000-\U0010ffff]')
    except re.error:
        cont = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
    return cont.sub(u'', content)

但是在实际应用中发现以上方法过滤不彻底,还会有部分表情保留下来,故此又找到了如下方法:

import re
def filter_emoji(content):
	try:
	    # Wide UCS-4 build
	    cont = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55]+')
	except re.error:
	    # Narrow UCS-2 build
	    cont = re.compile(u'('u'\ud83c[\udf00-\udfff]|'u'\ud83d[\udc00-\ude4f\ude80-\udeff]|'u'[\u2600-\u2B55])+')
	    return cont.sub (u'', content)

此方法效果相对较好,前一种方法不能过滤的表情也能很好过滤。其原因也很好理解,无外乎前一种方法的正则匹配编码覆盖不全,所以有漏掉的表情未过滤。
最后,这里也对后一种方法所匹配对正则编码做一说明:

<U+1F300> - <U+1F5FF>      # symbols & pictographs
<U+1F600> - <U+1F64F>      # emoticons
<U+1F680> - <U+1F6FF>      # transport & map symbols
<U+2600>  - <U+2B55>       # other

后一种方法的参考来源:Emoji的编码以及常见问题处理
非常感谢!!

Python实现emoji表情处理过滤,让你的文本内容更加干净整洁在数字化时代,人们在社交媒体、聊天应用等场景越来越频繁地使用表情符号来传达情感和信息。虽然表情符号美观且易于使用,但它们也可能妨碍文本的清晰度和可读性。如果你想对文本数据表情符号进行处理和过滤,那么Python是一个非常适用的工具。本文将介绍如何在Python实现emoji表情处理过滤功能。我们将使用Python emoji库,它可以方便地识别和操作各种表情符号。使用这个库可以快速、方便地删除、替换或保留表情符号。 服务器端不支持Emoji表情,因此客户端在上传用户输入时,不能包含Emoji表情。 在客户端发送请求前,判断用户输入是否含有表情,如果含有表情,则提示用户重新输入。这个过程关键是如何判断字符串是否含有Emoji表情。要判断是否含有Emoji表情,必须先了解什么是EmojiEmoji 是一套起源于日本的12×12像素表情符号,由栗田穣崇(Shigetaka Kurit)创作,最早在日本网络及手机用户流行,自苹果公司发布的iOS 5输入法加入了emoji后,这种表情符号开始席卷全球,目前emoji已被大多数现代计算机系统所兼容的Unicode编码采纳,普 def filter_emoji(desstr, restr=''): # 过滤表情 res = re.compile(u'[\U00010000-\U0010ffff\\uD800-\\uDBFF\\uDC00-\\uDFFF]') return res.sub(restr, desstr) Python表情包处理教程:如何过滤和替换emoji表情Python是一种高级编程语言,它也是一个非常流行的用于数据分析、机器学习和自然语言处理的工具。在这些领域使用文字和符号非常重要,但是有时我们可能需要过滤或替换掉一些特殊字符,比如表情符号。在现代通讯表情符号已经成为了人们通过文字交流的一个重要组成部分。但是,在某些情况下,我们可能需要将这些表情符号从文本删除或替换掉。那么,在Python如何实现呢? #过滤表情 co = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55]+') except re.error: 微信聊天记录,微信自带表情会变成[微笑] [握手]等格式,如何判断出字符串该类表情以及如何去除 对于emoji表情,字符串是一个小方块,如何筛选与判断 public static void main(String[] args) { String str = "[微笑]][[好\uD83D\uDC4C的[握拳]"; Syste 字符串间有 emoji 表情,替换掉。 text = "????贝贝有点甜????" res = emoji.demojize(text) # ':rabbit_face:贝贝有点甜:rabbit_face:' # 正则表达式替换为 r"想换的字符串" res = re.sub(emoji.get_emoji_regexp(), r" ", text) # ' 贝贝有点甜 ' p = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF' u'\u2600-\u2B55 \U00010000-\U0010ffff]+') txt = re.sub(p,'',text) # 正则匹配,将表情符合替换为空'' 正则编码解释如下: <U+1F300> - <U+1F5FF> # 符号和象形字 项目有时需要过滤掉四字节以上的字符,比如mysql数据库5.5.3以下的版本text字段不支持四字节以上字符于是就需要过滤掉再入库,python的方法为: # python UCS-4 build的处理方式 highpoints = re.compile(u'[\U00010000-\U0010ffff]') except re.error: test_str = """服务周到,性价比高,量还多,强烈推荐????????????""" result = emoji.demojize(test_str) print(result) print(emoji.emojize(result)) # 使用demojize方法:用em...... co = re.compile(u’[\U00010000-\U0010ffff]’) except re.error: co = re.compile(u’[\uD800-\uDBFF][\uDC00-\uDFFF]’) return co.sub(restr, desstr)