python过滤文本中的emoji表情

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的编码以及常见问题处理
非常感谢!!

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值