使用工具
编程语言工具:Python 2.7 R 2 .2.1 excel
浏览器:Google Chrome
数据库: Mongodb
相关算法:情感分析
情感分析(Sentiment Analysis),又被称为倾向性分析、意见挖掘,是通过对带有一定的情感色彩的主观性文本进行处理分析,归纳推理的过程,例如通过用户对产品的性能、价格、便携性等方面的评价分析用户对该产品的情感倾向。通常来说,文本情感分析的目的是找出说话者在某些话题上或者针对同一事物的两极的观点的态度。或许是说话者当时的情感状态,抑或是作者有意向的情感交流。
情感分析的基本步骤是分类,即将文本传达的情感划分为不同的类别。在句子级、功能级判断文字所阐述的观点是正面的,负面的,抑或是中性的。
实现过程:确定目标网站
通过在大众点评网站查找并确定目标商家,进入其评论页面(https://www.dianping.com/shop/5144193/review_more?pageno=)。
对目标网站结构进行解析:利用浏览器自带的解析工具查看评论在网页的前端代码中的位置。
通过结构的解析我们发现每一条评论都是在
,所以我们只需要遍历这个层叠样式表里面的每一个Python中有许多用于网络爬虫的包 在这里我们使用了“request” 和”Beautiful soup”两个用于爬取和解析网页的软件包,以及“pymongo”连接上mongodb数据库方便存取数据。
(1)使用反-反爬机制
大众点评网站因为经常被网络爬虫访问已经确立了一些反爬机制。测试之后其主要反爬机制的原理是:在某一时段内某一IP地址访问该网站的频率超过某一个阈值就会对这个IP地址进行封禁使其无法访问从而限制网络爬虫,因此我们使用两个反-反爬方法:一、使用代理IP地址伪装从多个地址对网站进行访问。二、使用浏览器头和Cookies 使Python爬虫的访问更像是浏览器的访问爬取数据:在之前的网页分析之中我们已经对单页的网页进行解析了,我们现在只需要进一步的使用语言把它的内容下载并且解析出我们需要的内容。
存入数据库
我们使用的是mongodb 数据库,Python自带了pymongo 包我们可以通过这个包在mongodb中创立一个数据库“dianping”:
client = pymongo.MongoClient('localhost', 27017)
dianping = client['new']
infors = dianping['info']
而后把数据插入到数据库中就完成了整个过程。而后对数据内的数据进行数据清洗
文本挖掘过程:
词频统计
为了方便查看每个词出现的次数,找出消费者使用最多的词语,我们先使用软件包进行分词,而后再将分词结果写入excel表格当中,方便可视化。思想十分简单,就是先分词,而后统计频次再写入excel表格中,再制作成饼图方便查看。
关键词抽取:商品关键词抽取
商品的关键词抽取我们使用了Python的“结巴中文分词”包(GitHub地址:https://github.com/fxsjy/jieba)
结巴中文分词包的基于TF-IDF算法的关键词抽取,TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
我们将抽选出来的关键词写入TXT文本中方便查阅,在这个过程当然中也要考虑到中文编码的问题。
抽取出来的关键词主要有:不错,东西,新鲜,好吃,三文鱼,味道,菜品,环境,排队,很多,自助,海鲜,火锅,就是,感觉,比较,还是,喜欢,性价比,服务员。
对评论的情感分析(基于SnowNLP)
SnowNLP是一个用python语言写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在所能找到的大部分的自然语言处理库基本都是针对英文的,少有针对中文处理的,于是我们实现了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用到NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。
在对评论进行情感分析的时候,因为每个商品评论都是单独成句地使用,所以我们就把评论都放到一个Dataframe中,新增一列用来记录每一行也就是每一句评价的评分。这个评分在0~1之间。并且将这个dataframe写入到excel表格内方便后续的数据分析操作。
关键词对比
大众点评网站给出的关键词是如下一张图:
我们实际由商品评论得出来的关键词是:不错,东西,新鲜,好吃,三文鱼,味道,菜品,环境,排队,很多,自助,海鲜,火锅,就是,感觉,比较,还是,喜欢,性价比,服务员。我们可以人工剔除一些没什么实际含义的关键词,最后得到的关键词应该是:不错,新鲜,好吃,三文鱼,味道,菜品,环境,排队,自助,海鲜,火锅,喜欢,性价比,服务员。由此可以看出消费者对这家店铺的影响整体还是比较积极的,从关键词的角度,来看这家店的服务员和三文鱼以及菜品相对是比较得到一些关注,但是排队的问题也是存在的。
情感分数比对
大众点评的打分机制是五分制,所以说我们可以这样认为,单句情感分数在0.8分以上的就是五分。0.6~0.8为4分以此类推。我们对得到的情感分数值进行计算处于每个分段的评论数量有多少。我们使用pandas计算出满分的评论有5868条而在实际的网站,满分的评论有8451条中间相差了大概2500条。