基于规则的文本中颜文字识别方法【附:颜文字词典】
2020-02-06 本文已影响0人
长行徇上
最近在做弹幕话题分析的时候,我发现颜文字可以承载情感,有分析价值,但是数量很多,匹配起来很麻烦,所以考虑探索一下基于规则的颜文字识别方法。
我汇总了搜狗输入法、QQ输入法等几个输入法的颜文字,以及我自己从抓取的弹幕中提取的颜文字共计1716个。
颜文字词典下载
通过对这些颜文字的分析,我发现颜文字基本上符合如下特征:
- 是多个非文字(中文或英文)字符的连接
- 包含多种不同的字符
- 包含除数字以外的其他符号
- 包含除常见标点符号(逗号、句号、顿号、问号、感叹号、括号、书名号)以外的其他符号
- 可能包含英文字母或中文字符(例如“T”经常作为眼睛)
基于这些特征,我设计了如下代码:
import re
def find_emoticons(sentence: str):
""" 在字符串中识别颜文字
:param sentence: <str> 需要识别的句子
:return: <list> 识别出的颜文字
"""
number_list = list("0123456789") # 数字列表
common_list = list(",.?!,。、?!T()()《》") # 其他常用字符列表
emoticons_list = list()
for maybe_emoticons in re.findall("[^a-zA-SU-Z\u4e00-\u9fa5]{2,}", sentence):
character_list = set()
for character in maybe_emoticons:
if character not in character_list and character not in number_list and character not in common_list:
character_list.add(character)
if len(character_list) <= 1:
continue
emoticons_list.append(maybe_emoticons)
return emoticons_list
运行测试:
if __name__ == "__main__":
string = "稳一点啊阿水(/TДT)/"
print(find_emoticons((string)))
运行结果:
['(/TДT)/']