第二部分是评论基于属性词典的分类,分类原则是只要评论中属性词典中的分词,那么评论就分到该属性类中去。

'''基于词典的评论文本按属性分类'''import pandas as pd
import re,time
import jieba
from sklearn.feature_extraction.text import  CountVectorizer, TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
import numpy as np
import pyltp,osclass TextClass():def __init__(self):self.stopWord=[]'''分词和词性标注'''def seg_pos(self,sent):stopWord_Path = 'D:/论文文件/学习文件/情感分析/dict词典/哈工大stopword .txt'with open(stopWord_Path, 'r', encoding='utf-8') as fr:  # 加载停用词for word in fr.readlines():self.stopWord.append(word.strip())line = re.sub(r'[a-zA-Z0-9]*', '', sent)abs_path = 'D:\\LTP\\ltp_data_v3.4.0\\'  # 根目录绝对路径cws_path = os.path.join(abs_path, 'cws.model')  # 分词库文件路径seg = pyltp.Segmentor()  # 分词器对象seg.load(cws_path)  # 加载分词语料库cword = seg.segment(line)wordList = list(cword)# print(wordList)word_filter = [word for word in wordList if word not in self.stopWord]pos_model_path = os.path.join(abs_path, 'pos.model')  # 词性标注模型路径pos = pyltp.Postagger()pos.load(pos_model_path)pos_word = pos.postag(word_filter)pos.release()  # 释放实例seg.release()# return list(pos_word),return list(zip(word_filter, list(pos_word)))'''特征提取'''def feature_extraction(self,pos):features = []for i in pos:if i[1] in ['n', 'nz', 'j']:features.append(i[0])  # 直接获得评论中的特征词return features'''加载词典'''def openFile(self,path):with open(path,'r',encoding='utf-8') as f:for word in f.readlines():yield word.strip()'''文本特征化'''def text2feature(self,text_list):feature_list=[]for line in text_list:pos=self.seg_pos(line)if len(self.feature_extraction(pos))==0:#如果评论没有特征词的话,那么标记一下为'none',以便于后面对这类无特征文本的处理feature_list.append(['none'])else:feature_list.append(self.feature_extraction(pos))return feature_list'''文本分类'''def classify(self,feature_list):abs_path = 'D:\\论文文件\\阅读论文\\写论文准备\\字典构建\\手机属性词典\\dictionary_0_3\\'save_name = ['相机.txt', '处理器.txt', '价格.txt', '性能.txt', '续航.txt','外观.txt', '售后.txt']c1 = list(self.openFile(abs_path+save_name[0]))c2 = list(self.openFile(abs_path+save_name[1]))c3 = list(self.openFile(abs_path+save_name[2]))c4 = list(self.openFile(abs_path + save_name[3]))c5 = list(self.openFile(abs_path + save_name[4]))c6 = list(self.openFile(abs_path + save_name[5]))c7 = list(self.openFile(abs_path + save_name[6]))dict={'camera':set([]),'processor':set([]),'price':set([]),'performance':set([]),'endurance':set([]),'appearance':set([]),'serve':set([]),'none':set([])}for i in range(len(feature_list)):for j in feature_list[i]:if j in c1:dict['camera'].add(i)if j in c2:dict['processor'].add(i)if j in c3:dict['price'].add(i)if j in c4:dict['performance'].add(i)if j in c5:dict['endurance'].add(i)if j in c6:dict['appearance'].add(i)if j in c7:dict['serve'].add(i)if j=='none' :dict['none'].add(i)return dict##########!!!!!!这里缺少一个对于没有特正在7个属性词典的评论的处理,,明天解决!!!(初步想法是建立一个包含所有特征的词典,如果不在则评论放到无属性集合里'''根据上面分类的结果(索引字典)将原文件里的评论分开,并存储'''def classify_save(self,index_dict,abs_path,ori_file):# 其中index_dict是分类的结果,为字典索引# abs_path是存储分类文本的绝对地址# ori_file是要分类的评论文本文件,且是DataFrame格式文件#无返回文件,以csv格式存储分类结果keys=index_dict.keys()print(keys)for i in keys:#注意encoding='gbk',index=False编码格式和去掉列的默认索引DataFrame.ix[]的用法# print('关键词',i )# print(list(index_dict[i]))# print(ori_file.ix[list(index_dict[i])].comment)ori_file.ix[list(index_dict[i])].to_csv(abs_path+i+'.csv',encoding='gbk',index=False)'''集成所有功能的一个函数,直接输入预测数据地址,和保存分类好结果的地址'''def all(self,pre_data_path,save_abs_path):file=list(pd.read_csv(pre_data_path,sep=',',encoding='GBK').comment)text_feature = self.text2feature(file)result = self.classify(text_feature)comment_file = pd.read_csv(pre_data_path, sep=',', encoding='GBK')self.classify_save(result, save_abs_path, comment_file)for i in result.keys():#输出各个属性评论占总评论的比例print(i+'的评论比例:', len(result[i]) / len(file))if __name__=='__main__'  :s=time.time()'''对Excel中的预测数据按属性分类返回各类别评论索引''''''华为预测数据'''path_xiaomi  = 'D:/machinelearning data/crawlerData/xiaomi6X_pre_JD100.csv''''华为预测数据'''path_huawei= 'D:/machinelearning data/crawlerData/huaweiP20_pre_JD100.csv'abs_path_xiaomi='D:\\machinelearning data\\crawlerData\\cluster_data\\feature_phone_xiaomi\\'abs_path_huawei='D:\\machinelearning data\\crawlerData\\cluster_data\\feature_phone_huawei\\'demo=TextClass()#demo.all(path_xiaomi,abs_path_xiaomi)demo.all(path_huawei, abs_path_huawei)e=time.time()print('耗时:',e-s)

  

转载于:https://www.cnblogs.com/zz22--/p/9773971.html

中文手机评论情感分析系列(二)相关推荐

  1. 中文手机评论情感分类系列(一)

    因为写论文需要,准备做手机评论的情感分析,依据现有的工具可以很容易中文评论进行去重复评论,分词,去停用词,向量化,然后用sklearn中的一款分类器来对数据进行情感分类.但是,由于本人打算依据手机不同 ...

  2. 利用LSTM+CNN+glove词向量预训练模型进行微博评论情感分析(二分类)

    先上代码和数据集 https://pan.baidu.com/s/1tpEKb0nCun2oxlBXGlPvxA 提取码:cryy 里面所需要的,都在文件里, 数据是微博评论(共12万,没记错的话,0 ...

  3. 情感分析系列(二)——使用BiLSTM进行情感分析

    目录 一.数据预处理 二.搭建BiLSTM 三.训练&测试 一.数据预处理 先前我们已经进行了数据预处理:情感分析系列(一)--IMDb数据集及其预处理,这里不再过多介绍,本文将聚焦于模型的搭 ...

  4. 【自然语言处理(NLP)】基于FNN网络的电影评论情感分析

    [自然语言处理(NLP)]基于FNN网络的电影评论情感分析 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建 ...

  5. 基于用户评论情感分析详细设计与技术实现

    基于用户评论情感分析详细设计与技术实现 文章目录 基于用户评论情感分析详细设计与技术实现 前言 一.技术架构 二.分析服务器构建 1.1 创建flask项目 1.2 编写数据库连接脚本,获取用户评论数 ...

  6. 评论情感分析----多种机器学习模型测试总结

    文章目录 前言 Step1: 读取评论文件 Step2: 去除重复评论信息 Step3: 使用jieba库进行分词操作 Step4: 去除停用词 Step5: 生成词典 Step6: 生成one-ho ...

  7. 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...

  8. 朴素贝叶斯算法----评论情感分析系统

    文章目录 前言 Step1: 爬取京东评论,作为模型数据集 测试爬虫 爬取6000条好评信息作为数据集,并存储为CSV文件 爬取4000条差评信息作为数据集,并存储为CSV文件 Step2: 读取数据 ...

  9. python爬取京东商品数据要先登录_京东商品评论情感分析|文本数据预处理

    本文爬取了十款热销手机的文本评论数据后,首先对文本评论数据做文本预处理,文本评论数据中存在大量的无价值信息,引入无用的文本数据,对其作情感分析,显然没有价值,得出的文本挖掘结果也不尽人意.所以对于文本 ...

  10. 如何做中文文本的情感分析?

    如何做中文文本的情感分析? 这是本学期在大数据哲学与社会科学实验室做的第三次分享了. 第一次分享的是:如何利用"wordcloud+jieba"制作中文词云? 第二次分享的是:如何 ...

最新文章

  1. UART, SPI, IIC的详解及三者的区别和联系
  2. java推送技术_java网络编程 - java服务器推送技术系列方案实战
  3. 2020,AI算法岗,劝退还是继续?
  4. 抓包工具,知道手机app上面使用的接口是哪个
  5. JSTL获取session中的值
  6. 将数据库中的表结构导出到excel中(写数据库设计说明书)
  7. keil5——安装教程附资源包
  8. c语言200以内能被3和5整除的数,程式设计程式 求500以内能被3和5同时整除的所有数的和,c语言程式码写全一点,谢谢啦...
  9. 翻译:swift 5 iOS Accessibility从入门到精通
  10. 中国剩余定理(c语言)
  11. Qt Creator 注释乱码
  12. git 进阶系列教程--tag
  13. PureMVC(AS3)剖析:实例
  14. CAD中插入外部参照字体会变繁体_知道这些技巧-轻松攻克CAD所有困难
  15. 值得学习的C/C++开源项目
  16. Linux字符串截取
  17. DMC-Net: Generating Discriminative Motion Cues for Fast Compressed Video Action Recognition 论文赏析
  18. 谁在影响黄光裕的决策?
  19. Oracle小型机死机,十三起惨痛宕机案例
  20. 前端基础(三十二):图片转base64

热门文章

  1. VS Code | setting.json配置
  2. ​电子投票系统与区块链
  3. 成功解决http error 503.the service is unavailable错误
  4. echarts 乡镇级地图制作办法
  5. bzoj 4518: [Sdoi2016]征途
  6. viewModel生命周期
  7. python判断为空行_Python pandas.DataFrame 找出有空值的行
  8. OkHttp日常使用实战篇
  9. Android向系统日历添加日程提醒事件
  10. PHP服务端 苹果支付(IAP)处理