当前位置:   article > 正文

基于电商产品评论数据情感分析_电商产品评论数据情感代码

电商产品评论数据情感代码
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. # # —— 基于电商产品评论数据情感分析 ——
  4. # ### 1.案例简介
  5. #
  6. # 1、利用文本挖掘技术,对碎片化、非结构化的电商网站评论数据进行清洗与处理,转化为结构化数据。
  7. # 2、参考知网发布的情感分析用词语集,统计评论数据的正负情感指数,然后进行情感分析,通过词云图直观查看正负评论的关键词。
  8. # 3、比较“机器挖掘的正负情感”与“人工打标签的正负情感”,精度达到88%。
  9. # 4、采用LDA主题模型提取评论关键信息,以了解用户的需求、意见、购买原因、产品的优缺点等。
  10. #
  11. # ### 2.框架
  12. #
  13. # 工具准备
  14. #
  15. # 一、导入数据
  16. # 二、数据预处理
  17. # (一)去重
  18. # (二)数据清洗
  19. # (三)分词、词性标注、去除停用词、词云图
  20. # 三、模型构建
  21. # (一)决策树
  22. # (二)情感分析
  23. # (三)基于LDA模型的主题分析
  24. # ## 工具准备
  25. # In[ ]:
  26. import os
  27. import numpy as np
  28. import pandas as pd
  29. import matplotlib.pyplot as plt
  30. import seaborn as sns
  31. from matplotlib.pylab import style #自定义图表风格
  32. style.use('ggplot')
  33. from IPython.core.interactiveshell import InteractiveShell
  34. InteractiveShell.ast_node_interactivity = "all"
  35. plt.rcParams['font.sans-serif'] = ['Simhei'] # 解决中文乱码问题
  36. import re
  37. import jieba.posseg as psg
  38. import itertools
  39. #conda install -c anaconda gensim
  40. from gensim import corpora,models #主题挖掘,提取关键信息
  41. # pip install wordcloud
  42. from wordcloud import WordCloud,ImageColorGenerator
  43. from collections import Counter
  44. from sklearn import tree
  45. from sklearn.model_selection import train_test_split
  46. from sklearn.feature_extraction.text import CountVectorizer
  47. from sklearn.metrics import classification_report
  48. from sklearn.metrics import accuracy_score
  49. import graphviz
  50. # #### 注意
  51. #
  52. # 以下方法,是为了帮助我们直观查看对象处理的结果。是辅助代码,非必要代码!
  53. # .head()
  54. # print()
  55. # len()
  56. # .shape
  57. # .unique()
  58. # ## 一、导入数据
  59. # In[ ]:
  60. raw_data=pd.read_csv('data/reviews.csv')
  61. raw_data.head()
  62. # In[ ]:
  63. raw_data.info()
  64. # In[ ]:
  65. raw_data.columns
  66. # In[ ]:
  67. #取值分布
  68. for cate in ['creationTime', 'nickname', 'referenceName', 'content_type']:
  69. raw_data[cate].value_counts()
  70. # ## 二、数据预处理
  71. # ### (一)去重
  72. #
  73. # 删除系统自动为客户做出的评论。
  74. # In[ ]:
  75. reviews=raw_data.copy()
  76. reviews=reviews[['content', 'content_type']]
  77. print('去重之前:',reviews.shape[0])
  78. reviews=reviews.drop_duplicates()
  79. print('去重之后:',reviews.shape[0])
  80. # ### (二)数据清洗
  81. # In[ ]:
  82. # 清洗之前
  83. content=reviews['content']
  84. for i in range(5,10):
  85. print(content[i])
  86. print('-----------')
  87. # In[ ]:
  88. #清洗之后,将数字、字母、京东美的电热水器字样都删除
  89. info=re.compile('[0-9a-zA-Z]|京东|美的|电热水器|热水器|')
  90. content=content.apply(lambda x: info.sub('',x)) #替换所有匹配项
  91. for i in range(5,10):
  92. print(content[i])
  93. print('-----------')
  94. # ### (三)分词、词性标注、去除停用词、词云图
  95. # (1)分词
  96. # 目标
  97. #
  98. # 输入:
  99. # - content、content_type
  100. # - 共有1974条评论句子
  101. # 输出:
  102. # - 构造DF,包含: 分词、对应词性、分词所在原句子的id、分词所在原句子的content_type
  103. # - 共有6万多行
  104. #
  105. # 非结构化数据——>结构化数据
  106. # ![image.png](attachment:image.png)
  107. # In[ ]:
  108. #分词,由元组组成的list
  109. seg_content=content.apply( lambda s: [(x.word,x.flag) for x in psg.cut(s)] )
  110. seg_content.shape
  111. len(seg_content)
  112. print(seg_content[0])
  113. # In[ ]:
  114. #统计评论词数
  115. n_word=seg_content.apply(lambda s: len(s))
  116. len(n_word)
  117. n_word.head(6)
  118. # In[ ]:
  119. #得到各分词在第几条评论
  120. n_content=[ [x+1]*y for x,y in zip(list(seg_content.index),list(n_word))] #[x+1]*y,表示复制y份,由list组成的list
  121. # n_content=[ [x+1]*y for x,y in [(0,32)]]
  122. index_content_long=sum(n_content,[]) #表示去掉[],拉平,返回list
  123. len(index_content_long)
  124. # n_content
  125. # index_content_long
  126. # list(zip(list(seg_content.index),list(n_word)))
  127. # In[ ]:
  128. sum([[2,2],[3,3,3]],[])
  129. # In[ ]:
  130. #分词及词性,去掉[],拉平
  131. seg_content.head()
  132. seg_content_long=sum(seg_content,[])
  133. seg_content_long
  134. type(seg_content_long)
  135. len(seg_content_long)
  136. # In[ ]:
  137. seg_content_long[0]
  138. # In[ ]:
  139. #得到加长版的分词、词性
  140. word_long=[x[0] for x in seg_content_long]
  141. nature_long=[x[1] for x in seg_content_long]
  142. len(word_long)
  143. len(nature_long)
  144. # In[ ]:
  145. #content_type拉长
  146. n_content_type=[ [x]*y for x,y in zip(list(reviews['content_type']),list(n_word))] #[x+1]*y,表示复制y份
  147. content_type_long=sum(n_content_type,[]) #表示去掉[],拉平
  148. # n_content_type
  149. # content_type_long
  150. len(content_type_long)
  151. # In[ ]:
  152. review_long=pd.DataFrame({'index_content':index_content_long,
  153. 'word':word_long,
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/819302
推荐阅读
相关标签
  

闽ICP备14008679号