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)

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

 -       # symbols & pictographs
 -       # emoticons
 -       # transport & map symbols
  -        # other

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

你可能感兴趣的:(python)