在使用spark处理用户评论时发现大量的ermoji无效表情,几乎不能作为有效评论,所以需要删除其中的无用emoji表情
pip install emoji
import emoji
def give_emoji_free_text(text):
allchars = [str for str in text.decode('utf-8')]
emoji_list = [c for c in allchars if c in emoji.UNICODE_EMOJI]
clean_text = ' '.join([str for str in text.decode('utf-8').split() if not any(i in str for i in emoji_list)])
return clean_text
temp = u"it's okay love you \u2764\ufe0f\u2665\ufe0f\u2665\ufe0f\u2665\ufe0f"
temp1 = u'nice\U0001f60a\U0001f60a'
result = give_emoji_free_text(temp.encode('utf8'))
temp 的输出是已经去掉了字符串中原有的emoji
temp (u"it's okay love you")
temp1 (u'nice\U0001f60a\U0001f60a')
但是对于temp1的例子输出则不能去除emoji,因为emoji字符与单子紧紧相连,在解码的时候会因为emoji编码长度与单词不同,而将一个emoji的编码分开成两个,导致无法在emoji.UNICODE_EMOJI编码序列中识别
所以需要使用方法二
emoji.get_emoji_regexp().sub(r'', temp1.encode('utf8').decode('utf8'))
方法二可以直接对temp、temp1的情况都去除掉其中的emoji
nice
it's okay love you