Python:电商产品评论数据情感分析,jieba分词,LDA模型本节涉及⾃然语⾔处理(NLP),具体涉及⽂本数据采集、预处理、分词、去停⽤词、词频分析、LDA主题模型
代码部分
1# -*- coding: utf-8 -*-
2"""
3Created on Mon Oct  1 12:13:11 2018
4
5@author: Luove
6"""
7
8import os
9import pandas as pd
redis宕机怎么办面试题
10import jieba
11from gensim import corpora, models
12
13 os.chdir('D:\Analyze\Python Matlab\Python\BookCodes\Python数据分析与挖掘实战\图书配套数据、代码\chapter15\demo\code')
14 filepath='../data/huizong.csv'
15 ad_csv(filepath)
16 data.head()
17 data_target=data[['评论']][data['品牌']=='美的']
18#set(data['品牌'])
19 count_1=len(data_target)  # 55774
20 data_target=pd.DataFrame(data_target['评论'].unique())  # 去重后返回时array,需要DataFrame化
21 count_2=len(data_target)  # 53049
22 same_comment_count=count_1-count_2  # 2725,5%
23
24 inputfile1 = '../data/meidi_jd_process_end_负⾯情感结果.txt'# 来之ROSTCM6软件,情感倾向性分析,负⾯、中性、正⾯,这⾥只研究负⾯、正⾯
25 inputfile2 = '../data/meidi_jd_process_end_正⾯情感结果.txt'
26
27 with open(inputfile1,'r',encoding='UTF-8') as data1: # 针对含中⽂名的⽂件的读取⽅式,重编码成utf-8
28    data1 = pd.read_csv(data1,header = None) #读⼊数据
29 with open(inputfile2,'r',encoding='UTF-8') as data2:
30    data2 = pd.read_csv(data2,header = None) #读⼊数据
31 data1 = pd.DataFrame(data1[0].place('.*?\d+?\\t ', '')) #⽤正则表达式修改数据,⾮贪婪模式:*?,0个或多个⾮\n字符  +?,1个或多个数字
32 data2 = pd.DataFrame(data2[0].place('.*?\d+?\\t ', ''))
33# jieba分词
34 mycut = lambda s: ''.join(jieba.cut(s)) #⾃定义简单分词函数,分词结果通过空格链接
35 data1 = data1[0].apply(mycut) #通过“⼴播”形式分词,加快速度。
36 data2 = data2[0].apply(mycut)
37# 去停⽤词
38 stopfilepath='../'
源码库下载
39 stop = pd.read_csv(stopfilepath, encoding = 'utf-8', header = None, sep = 'tipdm')  # 这⾥sep分割符⾮停⽤词符均可,这⾥选的是竞赛站名
40#sep设置分割词,由于csv默认以半⾓逗号为分割词,⽽该词恰好在停⽤词表中,因此会导致读取出错
41#所以解决办法是⼿动设置⼀个不存在的分割词,如tipdm。
42 stop = ['', ''] + list(stop[0]) #Pandas⾃动过滤了空格符,这⾥⼿动添加
43 neg=pd.py())
44 pos=pd.py())
ruby适合开发什么45 neg[1] = neg[0].apply(lambda s: s.split('')) #定义⼀个分割函数,然后⽤apply⼴播,每⾏按空格分隔,每⾏由str转变为list
46 neg[2] = neg[1].apply(lambda x: [i for i in x if i not in stop]) #逐词判断是否停⽤词,思路同上
47 pos[1] = pos[0].apply(lambda s: s.split(''))
48 pos[2] = pos[1].apply(lambda x: [i for i in x if i not in stop])
49
50
51# =============================================================================
52# ldamodel = dels.ldamodel.LdaModel(corpus=corpus, num_topics=3, id2word = dictionary, passes=20)
53# corpus: 必须。语料库
54# num_topics: 必须。LDA 模型要求⽤户决定应该⽣成多少个主题。由于我们的⽂档集很⼩,所以我们只⽣成三个主题;
55# id2word:必须。LdaModel 类要求我们之前的 dictionary 把 id 都映射成为字符串;
小舍得被央视批评56# passes:可选。模型遍历语料库的次数。遍历的次数越多,模型越精确。但是对于⾮常⼤的语料库,遍历太多次会花费很长的时间。
57# 调整模型的主题数和遍历次数对于得到⼀个好的结果是很重要的
58# =============================================================================
58# =============================================================================
59#负⾯主题分析
60 neg_dict = corpora.Dictionary(neg[2]) #建⽴词典
61 neg_corpus = [neg_dict.doc2bow(i) for i in neg[2]] #建⽴语料库
weblogic 12c62 neg_lda = models.LdaModel(neg_corpus, num_topics = 3, id2word = neg_dict) #LDA模型训练,⼀种主题模型,它基于⼀组⽂档中的词频⽣成主题63for i in range(3):  # num_topics = 3
64print(neg_lda.print_topic(i)) #输出每个主题
65
66#正⾯主题分析
67 pos_dict = corpora.Dictionary(pos[2])
68 pos_corpus = [pos_dict.doc2bow(i) for i in pos[2]]
69 pos_lda = models.LdaModel(pos_corpus, num_topics = 3, id2word = pos_dict)
70for i in range(3):
京东python入门教程71print(pos_lda.print_topic(i)) #输出每个主题
72print(pos_lda.print_topic(num_topics = 3, num_words = 3))
主题分析结果
#负⾯评价潜在主题
#  聚成3个主题,每个主题下⽣成10个最可能出现的词及其概率
0.033*"安装" + 0.017*"加热" + 0.014*"买" + 0.012*"美的" + 0.011*"好" + 0.011*"不错" + 0.010*"热⽔器
" + 0.009*"售后" + 0.008*"⼀个" + 0.007*"速度" 0.037*"安装" + 0.029*"不错" + 0.027*"买" + 0.018*"热⽔器" + 0.017*"好" + 0.016*"知道" + 0.013*"师傅" + 0.011*"美的" + 0.011*"京东" + 0.010*"送货" 0.049*"安装" + 0.024*"热⽔器" + 0.011*"师傅" + 0.011*"好" + 0.010*"知道" + 0.008*"有点" + 0.008*"安装费" + 0.007*"n" + 0.006*"使⽤" + 0.006*"装"
#正⾯评价潜在主题
0.043*"买" + 0.032*"不错" + 0.024*"好" + 0.022*"美的" + 0.012*"京东" + 0.012*"⼀个" + 0.012*"加热" + 0.011*"热⽔器" + 0.010*"热⽔" + 0.009*"保温" 0.099*"不错" + 0.093*"好" + 0.025*"东西" + 0.020*"挺" + 0.018*"速度" + 0.016*"热⽔器" + 0.016*"很快" + 0.016*"价格" + 0.015*"加热" + 0.015*"质量" 0.094*"安装" + 0.029*"师傅" + 0.023*"好" + 0.016*"送货" + 0.014*"热⽔器" + 0.013*"不错" + 0.012*"安装费" + 0.011*"美的" + 0.010*"售后" + 0.008*"很快" # 从上可以分析主题及其中⾼频词的特征
Ref: