基于规则的文本中颜文字识别方法【附:颜文字词典】

最近在做弹幕话题分析的时候,我发现颜文字可以承载情感,有分析价值,但是数量很多,匹配起来很麻烦,所以考虑探索一下基于规则的颜文字识别方法。

我汇总了搜狗输入法、QQ输入法等几个输入法的颜文字,以及我自己从抓取的弹幕中提取的颜文字共计1716个。
颜文字词典下载

通过对这些颜文字的分析,我发现颜文字基本上符合如下特征:

  • 是多个非文字(中文或英文)字符的连接
  • 包含多种不同的字符
  • 包含除数字以外的其他符号
  • 包含除常见标点符号(逗号、句号、顿号、问号、感叹号、括号、书名号)以外的其他符号
  • 可能包含英文字母或中文字符(例如“T”经常作为眼睛)
    基于这些特征,我设计了如下代码:
import re
def find_emoticons(sentence: str):
    """ 在字符串中识别颜文字
    :param sentence:  需要识别的句子
    :return:  识别出的颜文字
    """
    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)/']

代码下载

你可能感兴趣的:(基于规则的文本中颜文字识别方法【附:颜文字词典】)