一 基于字典的情感分析

1 Jieba中文分词

算法设计[邓旭东]

  • 第一步:读取评论数据,对评论进行分句。
  • 第二步:查找对分句的情感词,记录积极还是消极,以及位置。
  • 第三步:往情感词前查找程度词,找到就停止搜寻。为程度词设权值,乘以情感值
  • 第四步:往情感词前查找否定词,找完全部否定词,若数量为奇数,乘以-1,若为偶数,乘以1。
  • 第五步:判断分句结尾是否有感叹号,有叹号则往前寻找情感词,有则相应的情感值+2。
  • 第六步:计算完一条评论所有分句的情感值,用数组(list)记录起来。
  • 第七步:计算并记录所有评论的情感值。
  • 第八步:通过分句计算每条评论的积极情感均值,消极情感均值,积极情感方差,消极情感方差。

TextBlob

  • TextBlob是一个用Python编写的开源的文本处理库。它可以用来执行很多自然语言处理的任务,比如,词性标注,名词性成分提取,情感分析,文本翻译,等等。
  • Github地址:
  • 安装
    pip install textblob
    测试:

    #TextBlob简介
    from textblob import TextBlob
    testimonial = TextBlob("Textblob is amazingly simple to use. What great fun!")
    print(testimonial.sentiment)

    安装语料库
    import nltk
    nltk.download()
    测试:[源码:textblob官方]

    #测试Brown Corpus
    from nltk.corpus import brown
    brown.words()
    # 测试词性标注
    from textblob import TextBlob
    wiki = TextBlob("Python is a high-level, general-purpose programming language.")
    wiki.tags

    案例:基于词典的情绪分析[源码:邓旭东]

    # 哈工大邓旭东老师的代码
    # 哈尔滨工业大学 管理科学与工程博士在读
    #知乎   https://zhuanlan.zhihu.com/p/23225934
    import jieba
    import numpy as np#打开词典文件,返回列表
    #注意:那是函数中关键词参数,随便起的。后边调用这个函数时会有真正有用的名字传进来
    def open_dict(Dict = 'hahah', path=r'/Users/apple888/PycharmProjects/Textming/Sent_Dict/Hownet/'):path = path + '%s.txt' % Dictdictionary = open(path, 'r', encoding='utf-8')dict = []for word in dictionary:word = word.strip('\n')dict.append(word)return dictdef judgeodd(num):if (num % 2) == 0:return 'even'else:return 'odd'#设置path路径。
    deny_word = open_dict(Dict = '否定词', path= r'')
    posdict = open_dict(Dict = 'positive', path= r'')
    negdict = open_dict(Dict = 'negative', path= r'')degree_word = open_dict(Dict = '程度级别词语', path= r'')
    mostdict = degree_word[degree_word.index('extreme')+1 : degree_word.index('very')]#权重4,即在情感词前乘以3
    verydict = degree_word[degree_word.index('very')+1 : degree_word.index('more')]#权重3
    moredict = degree_word[degree_word.index('more')+1 : degree_word.index('ish')]#权重2
    ishdict = degree_word[degree_word.index('ish')+1 : degree_word.index('last')]#权重0.5def sentiment_score_list(dataset):seg_sentence = dataset.split('。')count1 = []count2 = []for sen in seg_sentence: #循环遍历每一个评论segtmp = jieba.lcut(sen, cut_all=False)  #把句子进行分词,以列表的形式返回i = 0 #记录扫描到的词的位置a = 0 #记录情感词的位置poscount = 0 #积极词的第一次分值poscount2 = 0 #积极词反转后的分值poscount3 = 0 #积极词的最后分值(包括叹号的分值)negcount = 0negcount2 = 0negcount3 = 0for word in segtmp:if word in posdict:  # 判断词语是否是情感词poscount += 1c = 0for w in segtmp[a:i]:  # 扫描情感词前的程度词if w in mostdict:poscount *= 4.0elif w in verydict:poscount *= 3.0elif w in moredict:poscount *= 2.0elif w in ishdict:poscount *= 0.5elif w in deny_word:c += 1if judgeodd(c) == 'odd':  # 扫描情感词前的否定词数poscount *= -1.0poscount2 += poscountposcount = 0poscount3 = poscount + poscount2 + poscount3poscount2 = 0else:poscount3 = poscount + poscount2 + poscount3poscount = 0a = i + 1  # 情感词的位置变化elif word in negdict:  # 消极情感的分析,与上面一致negcount += 1d = 0for w in segtmp[a:i]:if w in mostdict:negcount *= 4.0elif w in verydict:negcount *= 3.0elif w in moredict:negcount *= 2.0elif w in ishdict:negcount *= 0.5elif w in degree_word:d += 1if judgeodd(d) == 'odd':negcount *= -1.0negcount2 += negcountnegcount = 0negcount3 = negcount + negcount2 + negcount3negcount2 = 0else:negcount3 = negcount + negcount2 + negcount3negcount = 0a = i + 1elif word == '!' or word == '!':  ##判断句子是否有感叹号for w2 in segtmp[::-1]:  # 扫描感叹号前的情感词,发现后权值+2,然后退出循环if w2 in posdict or negdict:poscount3 += 2negcount3 += 2breaki += 1 # 扫描词位置前移# 以下是防止出现负数的情况pos_count = 0neg_count = 0if poscount3 < 0 and negcount3 > 0:neg_count += negcount3 - poscount3pos_count = 0elif negcount3 < 0 and poscount3 > 0:pos_count = poscount3 - negcount3neg_count = 0elif poscount3 < 0 and negcount3 < 0:neg_count = -poscount3pos_count = -negcount3else:pos_count = poscount3neg_count = negcount3count1.append([pos_count, neg_count])count2.append(count1)count1 = []return count2def sentiment_score(senti_score_list):score = []for review in senti_score_list:score_array = np.array(review)Pos = np.sum(score_array[:, 0])Neg = np.sum(score_array[:, 1])AvgPos = np.mean(score_array[:, 0])AvgPos = float('%.1f'%AvgPos)AvgNeg = np.mean(score_array[:, 1])AvgNeg = float('%.1f'%AvgNeg)StdPos = np.std(score_array[:, 0])StdPos = float('%.1f'%StdPos)StdNeg = np.std(score_array[:, 1])StdNeg = float('%.1f'%StdNeg)score.append([Pos, Neg, AvgPos, AvgNeg, StdPos, StdNeg])return scoredata = '你就是个王八蛋,混账玩意!你们的手机真不好用!非常生气,我非常郁闷!!!!'
    data2= '我好开心啊,非常非常非常高兴!今天我得了一百分,我很兴奋开心,愉快,开心'print(sentiment_score(sentiment_score_list(data)))
    print(sentiment_score(sentiment_score_list(data2)))

2 SnowNLP

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。

3 PaddleHub

基于PaddlePaddle生态下的预训练模型管理和迁移学习工具,可以结合预训练模型更便捷地开展迁移学习工作。通过PaddleHub,可以便捷地获取PaddlePaddle生态下的所有预训练模型,涵盖了图像分类、目标检测、词法分析、语义模型、情感分析、语言模型、视频分类、图像生成八类主流模型。通过PaddleHub Fine-tune API,结合少量代码即可完成大规模预训练模型的迁移学习。PaddleHub引入『模型即软件』的设计理念,支持通过Python API或者命令行工具,一键完成预训练模型地预测,更方便的应用PaddlePaddle模型库。


二 推荐系统简介

推荐系统的类型

社会化推荐(Social Recommendation)、基于内容的推荐 (Content-based filtering)、基于协同过滤的推荐(collaborative filtering)

协同过滤算法

基于邻域的方法(neighborhood-based method)(包括user-based filtering、item-based filtering)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graphs)

UserCF和ItemCF的比较

  • UserCF较为古老, 1992年应用于电子邮件个性化推荐系统Tapestry, 1994年应用于Grouplens新闻个性化推荐, 后来被Digg采用
  • ItemCF相对较新,应用于电子商务网站Amazon和DVD租赁网站Netflix
  • 新闻更新快,物品数量庞大,相似度变化很快,不利于维护一张物品相似度的表格,电影、音乐、图书则可以。

推荐系统评测

用户满意度、预测准确度

案例:推荐系统简介[源码:Toby Segaran]

# A dictionary of movie critics and their ratings of a small
# set of movies
critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,'The Night Listener': 3.0},'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,'You, Me and Dupree': 3.5},'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,'Superman Returns': 3.5, 'The Night Listener': 4.0},'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,'The Night Listener': 4.5, 'Superman Returns': 4.0,'You, Me and Dupree': 2.5},'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,'You, Me and Dupree': 2.0},'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,'The Night Listener': 3.0, 'Superman Returns': 5.0, 'You, Me and Dupree': 3.5},'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}critics['Toby']

计算新闻传播学临摹作业_数据抓取与数据清洗(西安交大国家艺术基金数据可视化培训第34天)相关推荐

  1. D3临摹作业_数据采集(西安交大国家艺术基金数据可视化培训第27天)

    第十一章  数据可视化之数据采集 第一节 python爬虫基础 一 .爬虫概述 URL由三部分构成:协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志 二. ...

  2. D3临摹作业_分词与词云可视化(西安交大国家艺术基金数据可视化培训第28天)

    第十二章  分词与词云可视化 第一节 词云图 概念:一种富文本信息可视化技术,通过布局算法用文字大小表示词频,辅以多种颜色,直观的反映词组重要性差异,展示文本关键摘要信息.完整的词云分析包括:分词.词 ...

  3. D3临摹_力引导算法(西安交大国家艺术基金数据可视化培训第23天)

    力导向算法 也称为弹簧算法,基于物理系统的引力斥力模型为图上的node和edge布局,用于解决重叠问题. 应用: 网络.层级.气泡.蜂房.布匹 绘制过程: 数据(node/edge表示图或网络)--& ...

  4. 智图临摹作业(西安交大国家艺术基金数据可视化培训第22天)

    案例1:01esri用户大会 素材:数据.图片(banner) 在media加载地图,使用流向图,然后添加数据 作品:链接 案例2:天津塘沽爆炸数据 素材:数据.图片(移动端封面) 在media加载地 ...

  5. iArtist临摹作业(西安交大国家艺术基金数据可视化培训第11天)

    今天,来自北京艾迪普公司的吴春一老师和许立老师给我们分享了面向新闻专业的三维软件--iArtist,来自动画与艺术教育专委会会员群的中国传媒大学张歌东老师给我分享了艾迪普的公众号.老师们主要介绍了艾迪 ...

  6. 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

    目录 项目介绍 研究背景 国内外研究现状分析 研究目的 研究意义 研究总体设计 数据获取 网络爬虫介绍 豆瓣电影数据的采集 数据预处理 数据导入及环境配置 Flume介绍 Hive介绍 MySQL介绍 ...

  7. 20221119day12作业:顶点小说全栈抓取、京东3页数据抓取、震坤行3页数据抓取

    文章目录 一.顶点小说全站抓取(代码运行下去理论上能抓就行) 二.京东商城三页数据抓取 三.震坤行三页数据抓取 一.顶点小说全站抓取(代码运行下去理论上能抓就行) 先获取所有分类链接import re ...

  8. B站2020年每周必看热门视频数据盘点(数据分析)1.数据抓取2.数据清洗3.数据分析及可视化

    1.数据抓取 数据集的获取是我们进行数据分析的第一步.现在获取数据的主要途径一般为:现成数据:自己写爬虫去爬取数据:使用现有的爬虫工具爬取所需内容,保存到数据库,或以文件的形式保存到本地. 博主用的是 ...

  9. 李沐【实用机器学习】1.3网页数据抓取

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.数据抓取工具 二.实例解析 总结 前言 网页数据抓取目标:在一个网站里面感兴趣的数据抓取出来 数据特点:噪点较多, ...

最新文章

  1. 分解例题及解析_【高考物理】考前梳理,高中物理经典常考例题(带解析),收藏起来考试不低于90+!...
  2. python field详解_Django中models Field详解
  3. Scala代码案例:统计三个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分
  4. [攻防世界 pwn]——实时数据监测
  5. C#实现Web文件的上传
  6. http协议与php关系,PHP中的HTTP协议
  7. mysql keepalived双主双活_mysql高可用架构方案之中的一个(keepalived+主主双活)
  8. 这40个Python可视化图表案例,强烈建议收藏!
  9. 迅捷fw325r虚拟服务器设置,迅捷FAST FW325R路由器无线桥接设置方法
  10. KEIL5 各个版本编译器的下载
  11. 像素密度(衡量屏幕显示能力)
  12. 人造肉在中国还有未来吗?
  13. java web 润乾报表教程_润乾报表 dashboard 分析
  14. Cadence Vitruoso Layout绘制版图
  15. PHP-CGI远程代码执行
  16. HotSpot 是啥?
  17. SRA Toolkit - prefetch
  18. 三星gtn8010安卓7_三星N8000/N8010通用刷机教程
  19. 通达信逐笔接口抓取的方法?
  20. 金蝶EAS初始化操作手册之管理单元初始化

热门文章

  1. 打印100以内的质数
  2. css实现三角形对话框,三角形图案
  3. C#图片截取压缩(百分比压缩/大小压缩)实现代码
  4. visionpro的无脚本和高级脚本(你要偷偷的卷,然后惊艳所有人)
  5. 好男儿当生三国 好女子当养唐朝
  6. MUI中vue的@click事件没反应
  7. 10.自媒体文章管理
  8. Windows下错误码全解析
  9. 1688图片搜索淘宝商品接口
  10. 分享Qt多工程多目录的编译案例,subdirs