第二个情感分析写出来,主要通过python实现qq群消息分析,分析群成员发言总次数,群成员情绪对比,单个群成员的发言词云状况以及单个同学的发言情感走势。
用到一下库:

  • re正则,matplotlib,wordcloud,numpy,jieba分词,snownlp情感分析。

  • 上述库的用法很简单,安装也很简单,所以不需要担心门槛。

最好结合第一篇或者先看第一篇
详细说一下模块的制作流程:

  1. 正则匹配文本内容

    ,第一篇只考虑总计文本的展示,并没有考虑到群成员的群体。所以要用字典{}讲学生的qq/邮箱和昵称存一下。还有他的发言记录。这里有个比较重要的是他的昵称可能是变得,你的群消息里面展示的是那个时候他的群昵称,,可能从大演说家变成啥啥啥的。所以我的思想就是主要按照qq/邮箱这个点确定唯一,而昵称只用第一次出现的。文本先相加。

value={}
def analyseinformation(lines):
   qqnow=''#qq或者email当前用户
   for line in lines:
       if line != "\n" and line.strip() != "\n" and line != None and not line.__contains__("撤回了"):
          line = line.replace("[表情]", " ").replace("@全体成员", " ").replace("[表情]", " ").\
               replace("[QQ红包]我发了一个“专享红包”,请使用新版手机QQ查收红。", "").replace("\n", " ").replace("[图片]",'')          
          if pattern.search(line):#匹配到正确的对象
              # print(line)
               if pattern3.search(line):
                   qq1=str(pattern3.search(line).group(3))
                   namenow=str(pattern3.search(line).group(1))
                   if  not qq1 in value.keys():
                        value[qq1]={'name':namenow,'qq':qq1,'text':[]}
                   qqnow=qq1#当前用户发言发生了更改
               elif pattern4.search(line):
                   email=str(pattern4.search(line).group(2))
                   namenow=str(pattern4.search(line).group(1))
                   if  not email in value.keys():
                        value[email]={'name':namenow,'qq': email,'text':[]}
                   qqnow=email
              # print(name)
          elif not qqnow.__eq__(''):#初始化的时候的坑,初始化为'',前几行没用文本直接过滤
               value[qqnow]['text'].append(str(line))
  1. 上面就说讲所有有用的信息放到字典value中,但是我想用几个小数组

    分开存储一些信息

    。可以稍微处理一下:

time=[]#次数
text=[]#文本
name=[]#姓名
qq=[]#qq或者邮箱提取
def getmotion(values):
   for key in values:
       print(values[key])
       time.append(values[key]['text'].__len__())
       usertxt=''
       for txt in values[key]['text']:
           usertxt+=txt+' '
       text.append(usertxt)
       name.append(values[key]['name'])
       qq.append(key)
  1. 剩下就可以开始完成自己想要展示的部分了。首先,我想查看这段时间每个人到底发言多少次。因为matplotlib图形显示不了太多,我显示部分(可以自己更改,只不过是效果问题),你还可以自定义排序完成排序然后再展示:

#展示各个同学的发言次数
def getspeaktimeall(time,name):
   Xi = np.array(time[20:50])#根据自己展示的需要需改范围,我们群人数太多
   Yi = np.array(name[20:50])
   x=np.arange(0,30,1)
   width=0.6
   plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
   plt.figure(figsize=(8, 6))  ##指定图像比例: 8:6
   plt.barh(x , Xi, width, color='SkyBlue',alpha=0.8)
   plt.xlabel("time")
   plt.ylabel("name")
   for a,b,c in zip(Xi,Yi,x):
       print(a,b,c)
       plt.text(a+10,c-0.4,'%d'%int(a),ha='center',va='bottom')
   plt.yticks(x,Yi)
  # plt.legend()
   plt.show()
   plt.close()
  1. 我还想看到所有人的发言情感总的比较。那么我就将所有同学的发言成为一个大的字符串,然后用snownlp去分析,snownlp的api很简单。
    s=SnowNLP(text)
    print(s.sentiments)就出来了,这部分的坑点是标签的展示我以前记录过可以结合着看,就不详述了。这部分详细代码为:

def getemotionall(time,text,name,qq):
   emotion=[]
   for i in range(0,len(qq)):
       print(name[i],text[i])
       s=SnowNLP(text[i])
       emotion.append(s.sentiments*100)
   print(len(name),len(emotion))
   Xi = np.array(emotion[10:40])
   Yi = np.array(name[10:40])
   x = np.arange(0, 30, 1)
   width = 0.6
   plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
   plt.figure(figsize=(8, 6))  ##指定图像比例: 8:6
   plt.barh(x, Xi, width, color='red',label='同学发言总情绪', alpha=0.8)
   plt.xlabel("emotion")
   plt.ylabel("name")
   for a, b, c in zip(Xi, Yi, x):
       print(a, b, c)
       plt.text(a + 2, c - 0.4, '%d' % int(a), ha='center', va='bottom')
   plt.yticks(x, Yi)
   # plt.legend()
   plt.show()
   plt.close()
  1. 接下来我想分析的是每个人的发言词云,这部分第一篇也讲过实现的方式,代码就留在完整贴了。你可以查看你讨厌的人,喜欢的人,或者两个人的聊天记录。看看她关心啥。。嘿嘿

©著作权归作者所有:来自51CTO博客作者MySQL技术栈的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Activity作为dialog展示,如何添加自定义圆角背景
  2. ArcGIS4Android开发----地图展示
  3. Android(安卓)展示本地或网络pdf文件
  4. ListView组件的使用
  5. android mvp快速开发框架介绍(继续dileber)
  6. Android之ListView
  7. Android(安卓)App内文档展示方案整理
  8. Android超简单实现九宫格抽奖
  9. Android(安卓)菜商品列表展示

随机推荐

  1. Linux Socket 网络编程 (IBM网站)
  2. centos系统安装redis4.0(单机)
  3. 对linux字符设备的理解(整体架构)
  4. 【嵌入式Linux学习七步曲之第五篇 Linux
  5. 如何查看最近安装的rpms?
  6. Uncompressing Linux... done, booting t
  7. 小米随身WiFi,Linux下AP热点驱动(开源)
  8. 走近Linux世界:Linux与Windows特性比较
  9. linux系统时间和硬件时钟问题(date和hwcl
  10. Linux 下串口编程之三 termios结构体介绍