统计QQ聊天记录基础版(分词+统计关键字出现的次数)

最近刚接触python,沉迷爬虫无法自拔,就准备来尝试尝试。虽然代码可能有点乱,我会尽量解释的详细的。

目标:从QQ中导出txt文件的聊天记录,用jieba对聊天记录进行分词,统计每个关键字出现的次数,把关键字以及其对应出现的次数导出到csv格式的文件中。

1.安装jieba

首先要根据python的版本安装jieba库。

win10操作系统,win+R输入cmd出现命令行窗口

输入pip install jieba就可以安装好啦

因为我的电脑之前装过Anaconda3,所以可以在Jupyter Notebook中写代码

2.布置好相关文件

我这里导出的聊天记录文件命名为1.txt。新建python3文件统计关键字用于写python代码

3.分部代码

3.1读取文本中的文件并进行清洗后保存至字符串s中

由于QQ读取到的聊天记录的格式是

2018-04-23 20:48:59 XX网名

聊天记录

我们需要的是聊天记录的内容,所以读取每一行时,如果第一个字符是'2'或者该行没有数据就跳过该行。对聊天记录中的每一行的数据中得符号等进行清洗。将有用的字符挨个保存至字符串中。

fr=open('1.txt','r',encoding='utf-8')
s=""
data={}
for line in fr:
    line=line.strip()
    if len(line)==0:
        continue
    if line[0]=='2':
        continue
    for x in range(0,len(line)):
        if line[x] in [' ','\t','\n','。',',','[', ']', '(', ')', ':', '-',
'?', '!', '《', '》', '、', ';', '“', '”', '……','0','1','2','3','4','5','6','7','8','9','=','~','…']:
            continue
        s+=str(line[x])
print(s)

3.2对字符串s中的内容进行分词

利用jieba进行分词,采用默认模式。

seg_list = jieba.cut(s, cut_all=False, HMM=True)

对分词好的每个关键词进行统计次数,由于长度为1的关键字通常没有意义,所以我们把它清除。用字典类型的data存储对应的关键字和统计次数。

for word in seg_list:
    if len(word)>=2:
        if not data.__contains__(word):
            data[word]=0
        data[word]+=1

根据统计次数对字典进行排序,sort以及lambda在python基础里都已经讲过。

data=sorted(data.items(),key=lambda d:d[1],reverse=True)

3.3将关键字以及出现的次数保存到文件中

fw=open('result.csv','w',encoding='utf-8')
fw.write(str(len(data))+'\n')
for item in data:
    fw.write(item[0]+','+str(item[1])+'\n')
fw.close()

4.完整代码

import jieba

fr=open('1.txt','r',encoding='utf-8')

s=""
data={}
for line in fr:
    line=line.strip()
    if len(line)==0:
        continue
    if line[0]=='2':
        continue
    for x in range(0,len(line)):
        if line[x] in [' ','\t','\n','。',',','[', ']', '(', ')', ':', '-',
'?', '!', '《', '》', '、', ';', '“', '”', '……','0','1','2','3','4','5','6','7','8','9','=','~','…']:
            continue
        s+=str(line[x])
print(s)

seg_list = jieba.cut(s, cut_all=False, HMM=True)
for word in seg_list:
    if len(word)>=2:
        if not data.__contains__(word):
            data[word]=0
        data[word]+=1
    
data=sorted(data.items(),key=lambda d:d[1],reverse=True)

fw=open('result.csv','w',encoding='utf-8')
fw.write(str(len(data))+'\n')
for item in data:
    fw.write(item[0]+','+str(item[1])+'\n')
fr.close()
fw.close()

5.结果显示

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值