用Python做舆情分析系统,python舆情分析系统设计与实现
1 #-*-编码:utf-8 -*-
2
3创建于20184年10月1日星期一12:13:11
5 @作者:Luove6
七
8进口9进口熊猫作为pd10进口捷豹11来自gensim进口公司,型号12
1 OS . chdir( d:\ analyze \ python MATLAB \ python \ book codes \ python data analysis and mining practice \ book supporting data,code \ chapter 15 \ demo \ code )14文件路径=./data/huizong.csv
1 data=PD . read _ CSV(file path)16 data . head()17 data _ target=data[[ comment ]][data[ brand ]= beauty ]]18 # set(data[[ brand ])
19 count _ 1=len(data _ target)# 55774
20数据目标=pd。data frame(data _ target[ comment ]。unique ()) #重复数据删除后返回数组,需要dataframe。
21 count _ 2=len(data _ target)# 53049
22 same _ comment _ count=计数_ 1-计数_ 2 # 2725.5%
23
24inputfile1=./data/迪美_ JD _ process _ end _负面情绪结果. txt #莱莱的ROSTCM6软件,情绪倾向分析,负面,中性,正面,这里只研究负面和正面。
2输入文件2=./txt /迪美_ JD _ process _ end _正面情绪结果. txt
26
27with open (input file1, r ,encoding= utf-8) asdata1: #对于有中文名字的文件的读取方法,重新编码为utf-828data1=pd.read _ csv (data1,header=none) #读入数据。
29 with open (input file2, r ,encoding= utf-8 )as data 2:30 data 2=PD . Read _ CSV(data 2,header=none) #读入数据
31数据1=pd。DataFrame(data1[0].str.replace(。*?\d?\ \ t , ))#用正则表达式修改数据,非贪婪模式:*?0个或更多非\n字符?1个或多个数字。
32 data2=pd。DataFrame(data2[0].str.replace(。*?\d?\ \ t , ))33 #解霸分词
3MyCut=lambda s:“”。join (jieba.cut (s)) #用户自定义的简单分词功能,分词结果用空格链接。
3data1=data1 [0]。应用(我的切)#以“播”的形式分词加速。
3data2=data2 [0]。应用(我的剪切)37 #转到停止字
38 stopfilepath=./data/stoplist.txt
3stop=pd.read _ csv (stop file path,encoding= UTF-8 ,header=none,sep= TIPDM) #这里sep分隔符可以是任意停用词字符,这里选择的是比赛站的名称。
40 #sep设置分词,因为csv默认半角逗号作为分词,而这个词恰好在非索引字表中,会导致阅读错误。
41 #所以解决方法是手动设置一个不存在的拆分字,比如tipdm。
4stop=[ , ] list (stop [0]) # pandas自动过滤空格字符,所以在这里手动添加。
4 neg=PD . data frame(data 1 . copy())44 pos=PD . data frame(data 2 . copy())45 neg[1]=neg[0]。apply(lambda s:s . spl list())#定义一个分区函数,然后用apply广播。
4NEG [2]=NEG [1]。APPLY(lambda x:[I for I in x if I not in stop])#逐字判断stop words是否为,思路同上。
47位置[1]=位置[0]。apply(lambda s:s . split())48 pos[2]=pos[1]。apply(lambda x:[I for I in x if I not instop])49
50
51 #=============================================================================
52 # LDA model=gensim . models . LDA model . LDA model(corpus=corpus,num_topics=3,id2word=dictionary,passes=20)
53 #语料库:有必要。文集
54 #num_topics:必须。LDA模型要求用户决定应该生成多少个主题。因为我们的文档集很小,所以我们只生成三个主题;
55 #id2word:这是必需的。LdaModel类需要我们之前的字典将所有id映射成字符串;
56 #通道:可选。模型遍历语料库的次数。迭代次数越多,模型越精确。但是对于一个非常大的语料库,遍历次数太多会花费很长时间。
57 #为了得到一个好的结果,调整模型的主题数和遍历次数是非常重要的。
58 #=============================================================================
59 #负面主题分析
6 neg _ dictionary=corporate . dictionary(neg[2])#建立字典
6 neg _ corpus=[neg _ dict . doc 2 bow(I)for I in neg[2]]#建立一个语料库
2 neg _ LDA=models . LDA model(neg _ corpus,num _ topics=3,id2word=neg _ dict) # LDA模型训练,一个主题模型,基于一组文档中的词频生成主题。
63对于范围(3)中的I:# num _ topics=3
64 print(neg _ LDA。print _ topic(I))#输出每个主题
65
66 #正面主题分析
67 pos_dict=语料库字典(pos[2])68 pos _ corpus=[pos _ dict。doc 2 bow(I)for I in pos[2]]69 pos _ LDA=models .范围(3)中I的LdaModel(pos_corpus,num_topics=3,id2 word=pos _ dict)70:71 print(pos _ LDA)。print _ topic(I))#输出每个主题
72打印(pos _ LDA。print _ topic(主题数=3,字数=3)
历史中提交的图片或压缩文件
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。