NLP中文数据分析干货!!!——针对Chinese分析模版、苏宁空调评论分析实战(提供数据)

本文主要是介绍NLP中文数据分析干货!!!——针对Chinese分析模版、苏宁空调评论分析实战(提供数据),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NLP中文数据分析

    • 一、全套中文预处理代码
      • 去掉文本中多余的空格
      • 去除多余符号,保留指定中英文和数字
      • 繁体转简体
      • 分词
      • 去除停用词
      • 预处理封装
    • 二、统计词频+词云图分析
      • 统计词频
      • 词云图分析
    • 三、情感分析
      • SnowNLP
      • 情感分析实战
    • 四、主题分析
      • LDA前数据预处理
      • LDA主题模型
    • 五、实战演练-苏宁空调评论
      • 获取数据
      • 数据探索性分析(EDA)
      • 绘制词云图
      • 输出正负类主题分析
      • 细节
    • 六、代码开源
      • CSDN开源
      • Github开源

一、全套中文预处理代码

摘要:
这一套代码,对于每一步细分的功能一一写好了,下面的进一步操作可以对这套代码进行进一步封装,使用~

去掉文本中多余的空格

#输入句子,输出句子
import jieba
def process(sentence):    #去掉文本中多余的空格new_sentence = sentence.replace(' ','')   return new_sentence

去除多余符号,保留指定中英文和数字

#输入句子,输出句子
def clear_character(sentence):    pattern = re.compile("[^\u4e00-\u9fa5^a-z^A-Z^0-9]")  #只保留中英文和数字#替换为[^\u4e00-\u9fa5^,^.^!^a-z^A-Z^0-9]  #只保留中英文、数字和符号,去掉其他东西line=re.sub(pattern,' ',sentence)  #把文本中匹配到的字符替换成空格符new_sentence=' '.join(line.split())    #去除空白return new_sentence

繁体转简体

#输入句子,输出句子
from snownlp import SnowNLP
def complex_to_simple(sentence):  #繁体转简体new_sentence = SnowNLP(sentence)new_sentence = new_sentence.hanreturn new_sentence

分词

#输入一个句子,将该句子分词后,返回一个列表
import jieba
def jieba_fenci(sentence):seg_list = jieba.cut(new_sentence,cut_all =True) #全模式seg_list = ' '.join(seg_list)jieba_fenci_list = [i for i in seg_list.split(' ')if i != '']return jieba_fenci_list

去除停用词

中文停用词表cn_stopwords.txt下载链接🔗

#输入一个句子列表的列表,返回处理后的句子列表的列表
def remove_word(sentence_list): #去除停用词stop = pd.read_csv('cn_stopwords.txt',encoding='utf-8',header=None,sep='tipdm',engine='python')stop_words = list(stop[0])stop_words +=['哈哈']  #根据自定义添加停用词remove_sentence_list = [[w for w in sentence if w not in stop_words]for sentence in sentence_list] return remove_sentence_list

预处理封装

#对前三个功能的封装,输入句子,返回句子,每个句子都是经过简单处理后的
def processing_chinese(sentence):sentence = process(sentence) #去除空格sentence = clear_character(sentence) #去除符号new_sentence = complex_to_simple(sentence) #繁体转简体return new_sentence

二、统计词频+词云图分析

统计词频

#计算词频,把所有句子的整个列表丢进来就行,输出一个字典形式的词频集
def compute_word_fre(sentence_list):sentence_list =[jieba.cut(processing_chinese(sentence),cut_all =True) for sentence in sentence_list] #分词sentence_list = remove_word(sentence_list) #去除停用词new_sentence_list = [[w for w in sentence if w!='']for sentence in sentence_list]  #去除jieba分词空字符和停用词更新all_list=[]for i in new_sentence_list: all_list+=i   #拼接处理后的句子word_fre ={} for word in all_list :  #统计所有句子的全部词语的频率word_fre[word]=word_fre.get(word,0)+1return word_fre

词云图分析

设置参数:
mask=imread(‘cloud.png’,pilmode=“RGB”)设置为词云图背景,可以自定义图片
font_path=r"/System/Library/Fonts/STHeiti Medium.ttc"设置为本地中文字体路径
在这里插入图片描述

import matplotlib.pyplot as plt
from imageio import imread,imsave
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDSwordcloud = WordCloud(background_color='white',collocations=False,mask=imread('cloud.png',pilmode="RGB"),max_words=30,random_state=2021,width=1200, height=800,font_path=r"/System/Library/Fonts/STHeiti Medium.ttc").fit_words(word_fre)# 绘制词云图
plt.imshow(wordcloud)
wordcloud.to_file("wordcloud.png")
#plt.savefig("other_wordcloud.png",dpi=600) #另一种保存形式

三、情感分析

SnowNLP

SnowNLP是一个经过大量数据训练得到的模型,可以进行三分类的预测任务,分别是正类、中性、负类,具体划分,我们可以通过定义阈值确定。

情感分析实战

# 加载情感分析模块
from snownlp import SnowNLP
from snownlp import sentiment
positive_sentence = '你真厉害,每个同学的妈妈都夸你,英雄联盟打得好,还带同学们去上王者'
print(SnowNLP(positive_sentence).sentiments)
#0.9999948382464556
neutral_sentence = '你好,哈哈'
print(SnowNLP(neutral_sentence).sentiments)
#0.5312500000000001
negative_sentence = '你真垃圾,大家都觉得你不行'
print(SnowNLP(negative_sentence).sentiments)
#0.04962917764338359

可以看到,通过得分可以看出,三类句子的不同,然后我们可以主观划分三类。

得分类别
大于0.7positive正类
大于0.3,小于0.7neutral中性
小于0.3negative负类

四、主题分析

LDA前数据预处理

import gc
import tqdm
import numpy as np
from gensim import corpora, models, similarities
import time#LDA前数据预处理
def LDA_processing(sentence_list):sentence_list =[jieba.cut(processing_chinese(sentence),cut_all =True) for sentence in sentence_list] #分词sentence_list = remove_word(sentence_list) #去除停用词new_sentence_list = [[w for w in sentence if w!='']for sentence in sentence_list]  #去除jieba分词空字符和停用词更新return new_sentence_list

LDA主题模型

设置参数:
num_topics = 3 #指定训练主题数

#输入处理好的句子,与分类主题数目,进行聚类训练
def LDA_model(sentence_list,num_topics=3):sentence_list = LDA_processing(sentence_list)sentence_dict = corpora.Dictionary(sentence_list)  # 建立词典sentence_corpus = [sentence_dict.doc2bow(i) for i in sentence_list]lda_model = models.LdaModel(sentence_corpus, num_topics=num_topics, id2word=sentence_dict)  # LDA模型训练return lda_modelnum_topics = 3 #指定训练主题数
lda_model = LDA_model(new_sentence_list, num_topics = num_topics)
for i in range(num_topics):print(lda_model.print_topic(i))   # 输出每个主题

五、实战演练-苏宁空调评论

获取数据

  • 爬虫开源代码
  • 八爪鱼等免费软件
  • 本分析实战提供数据下载链接🔗

数据探索性分析(EDA)

通过以下代码,可以得到数据分析报告:example.html

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import missingno as msno# 用于可视化缺失值分布
import scipy.stats as st
%matplotlib inline
data = pd.read_csv('苏宁易购-商品评论.csv')import pandas_profiling
pfr = pandas_profiling.ProfileReport(data)
pfr.to_file("./example.html")

分析完毕后,发现只有评价星级和评价内容比较有意思,接下来对这两个特征进行归类、分析
在这里插入图片描述
将5星归为正类,1、2、3星归为负类,其余丢弃,对两类样本的中文评价内容继续进行下面的分析。

data_good = data[data['评价星级']=='5星']data_bad = data[data['评价星级']!='5星']
data_bad = data_bad[data_bad['评价星级']!='56px']
  • data_good部分数据如下
    在这里插入图片描述
  • data_bad部分数据如下
    在这里插入图片描述

绘制词云图

def compute_word_fre(sentence_list)函数上面已经介绍过了
这里只需更改输入word_fre = compute_word_fre(data_good)即可

def compute_word_fre(sentence_list):sentence_list =[jieba.cut(processing_chinese(sentence),cut_all =True) for sentence in sentence_list] #分词sentence_list = remove_word(sentence_list) #去除停用词new_sentence_list = [[w for w in sentence if w!='']for sentence in sentence_list]  #去除jieba分词空字符和停用词更新all_list=[]for i in new_sentence_list: all_list+=i   #拼接处理后的句子word_fre ={} for word in all_list :  #统计所有句子的全部词语的频率word_fre[word]=word_fre.get(word,0)+1return word_freword_fre = compute_word_fre(data_good) #注意:只调整输入即可import matplotlib.pyplot as plt
from imageio import imread,imsave
from wordcloud import WordCloud, ImageColorGenerator, STOPWORDSwordcloud = WordCloud(background_color='white',collocations=False,mask=imread('cloud.png',pilmode="RGB"),max_words=30,random_state=2021,width=1200, height=800,font_path=r"/System/Library/Fonts/STHeiti Medium.ttc").fit_words(word_fre)# 绘制词云图
plt.imshow(wordcloud, interpolation='bilinear')
wordcloud.to_file("wordcloud.png")
#plt.savefig("other_wordcloud.png",dpi=600) #另一种保存形式
  • 正类词云图
    在这里插入图片描述
  • 负类词云图
    在这里插入图片描述

输出正负类主题分析

因为我们的数据是已经明确标签了,用到这类无监督算法,其实可以分别对正类数据和负类数据进行聚类,但聚为一类,获取它们这一类的主题是什么。

import gc
import tqdm
import numpy as np
from gensim import corpora, models, similarities
import time#LDA前数据预处理
def LDA_processing(sentence_list):sentence_list =[jieba.cut(processing_chinese(sentence),cut_all =True) for sentence in sentence_list] #分词sentence_list = remove_word(sentence_list) #去除停用词new_sentence_list = [[w for w in sentence if w!='']for sentence in sentence_list]  #去除jieba分词空字符和停用词更新return new_sentence_list#输入处理好的句子,与分类主题数目,进行聚类训练
def LDA_model(sentence_list,num_topics=3):sentence_list = LDA_processing(sentence_list)sentence_dict = corpora.Dictionary(sentence_list)  # 建立词典sentence_corpus = [sentence_dict.doc2bow(i) for i in sentence_list]lda_model = models.LdaModel(sentence_corpus, num_topics=num_topics, id2word=sentence_dict)  # LDA模型训练return lda_modelnum_topics = 1 #指定训练主题数
lda_model = LDA_model(data_good, num_topics = num_topics)
for i in range(num_topics):print(lda_model.print_topic(i))   # 输出每个主题lda_model = LDA_model(data_bad, num_topics = num_topics)
for i in range(num_topics):print(lda_model.print_topic(i))   # 输出每个主题 
  • 正类主题

0.022*“不错” + 0.020*“服务” + 0.016*“非常” + 0.014*“效果” + 0.013*“品牌” + 0.012*“快” + 0.012*“满意” + 0.011*“送货” + 0.009*“制冷” + 0.008*“质量”

  • 负类主题

0.020*“安装” + 0.015*“苏宁” + 0.014*“空调” + 0.013*“说” + 0.011*“买” + 0.008*“客服” + 0.008*“格力” + 0.007*“没有” + 0.006*“一个” + 0.005*“电话”

细节

由于我们的负类数据不多,提取的负类主题词可能不是特别准确,我们可以通过对停用词进行人为干预,从而得到更理想的效果。

def remove_word(sentence_list): #去除停用词stop = pd.read_csv('cn_stopwords.txt',encoding='utf-8',header=None,sep='tipdm',engine='python')stop_words = list(stop[0])stop_words +=['安装','苏宁','买','一次','一个','客服','空调','格力','电话','11','问','点','师傅']  #根据自定义添加停用词remove_sentence_list = [[w for w in sentence if w not in stop_words]for sentence in sentence_list] return remove_sentence_list
  • 负类主题

0.014*“说” + 0.008*“没有” + 0.005*“差” + 0.005*“服务” + 0.005*“知道” + 0.005*“制冷” + 0.005*“不知” + 0.005*“送” + 0.004*“第一” + 0.004*“降价”

六、代码开源

CSDN开源

Csdn下载链接🔗

Github开源

Github下载链接🔗

注:本开源数据、代码仅供学习使用,不得用于商业用途。

这篇关于NLP中文数据分析干货!!!——针对Chinese分析模版、苏宁空调评论分析实战(提供数据)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595263

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2