问题引出
在做文本分析时,例如网上购物的评论中,有些用户会为了获取积分或者获取金钱奖励,而采取一种复制手段,可以称之为机械重复词:如下图所示:
这些重复词只是为了单纯的凑字数,并没实际含义,但在文本分析时产生的影响确实不可忽略的。
问题处理
对于这些机械重复词,直接利用jieba分词处理显然是不合适的,可以利用一些规则找出这些重复词的索引,然后将这些索引对应的词给删掉,以达到去重目的:
(1)首先把字符串转化列表,list会自动按单个字符分词;
(2)准备两个空列表,一个list1用于存储当前词,一个list2用于存储判断重复词;
(3)判断第i个字符是否为此字符串的最后一个字符,若是就判断list1与list2是否相等,若相等就记录其索引;
(4)比较当前单个字符分词与list1中的第一个单个字符是否相等,同时需要判断list2的长度是否大于1,若当前字符和list1首字符相同,list2为空,将词加入list2;当前字符和list1首字符不同,list2为空,将词加入list1;
(5)当前词和list1不同,list2不为空,若list1与list2重复,记录list2字符的索引,list1本来的内容不用再去判断重复了清空list1与list2,并把当前值赋个list1;当前词和list1首字符不同,list2不为空,若list1与list2不重复,将当前字符添加到list2;
(6)当前字符词和list1首字符相同,list2不为空,若list1与list2重复,记录list2中字符对应的索引,删除list2里的内容,list1需要再去和后面的词汇继续判断重复,再将当前值赋到list2,当前字符词和list1首字符相同,list2不为空,若list1与list2不重复,将list2的值赋给list1,当前字符赋给list2;
(7)将记录的索引对应重复的字符删除,并将剩下的字符重新拼接起来。
函数代码
// An highlighted block
def qc_string_forward(s):
filelist = s
filelist2 = []
for a_string in filelist:
temp1 = a_string.strip('\n')
temp2 = temp1.lstrip('\ufeff')
temp3 = temp2.strip('\r')
char_list = list</