热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

中文手机评论情感分析系列(二)

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

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

'''基于词典的评论文本按属性分类'''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


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
author-avatar
steveukuk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有