以往对比两个文本数据差异,比较简单的技术实现方法是生成两文个词云图,但是词云图无法直观显示词语层面的权重。

Shifterator包提供了构建词移图的功能,垂直条形图可以量化哪些词会导致两个文本之间的成对差异以及它们如何起作用。通过允许您查看单词使用方式的变化,单词转换可帮助您对情绪、熵和分歧进行分析,这些分析从根本上来说更具可解释性。

Shifterator亮点:

  • 提供可解释的工具,用于将文本作为数据处理并映射出两个文本相似性或差异性

  • 实现常见的文本比较度量,包括相对频率、香农熵、Tsallis熵、Kullback-Leibler散度和 Jensen-Shannon 散度。

  • 基于字典的情绪分析方法计算的加权平均值。

  • 在研究初期可用于诊断数据、感知测量误差。

计算社会科学家、数字人文主义者和其他文本分析从业者都可以使用 Shifterator 从文本数据构建可靠、稳健和可解释的故事。

安装

!pip3 install shifterator==0.2.2

导入数据

准备的外卖csv数据,含label和review两个字段。

其中label是好评差评的标注,

  • 0为差评,

  • 1为好评

import pandas as pdreviews_df = pd.read_csv("data/WaiMai8k.csv", encoding='utf-8')
reviews_df.head()

有个疑问,外卖好差评中的用词有什么差异(区别/特点)?

准备两组文本数据

shifterator需要两组文本数据,格式为长度相同的词频统计字典。

按照label类别,将数据整理为两个文本数据。在准备的过程中,我们需要做一些清洗操作

  • 清除非中文字符,如网址、邮箱、标点符号

  • 清除信息量比较低的停用词

import collections
import jieba
import re texts_neg = reviews_df[reviews_df['label']==0]['review'].tolist()
texts_pos = reviews_df[reviews_df['label']==1]['review'].tolist()def clean_text(docs):"""清洗文本中的非中文字符、停用词,返回词频统计结果docs : 待处理的文档列表"""stop_words = open('data/stopwords.txt', encoding='utf-8').read().split('\n')text = "".join(docs)text = "".join(re.findall("[\u4e00-\u9fa5]+", text))words = jieba.lcut(text)words = [w for w in words if w not in stop_words]wordfreq_dict = collections.Counter(words)return wordfreq_dictclean_texts_neg = clean_text(texts_neg)
clean_texts_pos = clean_text(texts_pos)

无聊的传统绘图

使用条形图、词云图绘制,为了缩小代码量,这里只绘制差评数据。需要注意的是matplotlib不显示中文,这里需要先使用下面三行代码获取电脑中自带的中文字体列表mpl_fonts,

from matplotlib.font_manager import FontManagermpl_fonts = set(f.name for f in FontManager().ttflist)
print(mpl_fonts)

经过运行,我的电脑mpl_fonts里有Arial Unicode MS ,后面用matplotlib显示中文的地方,我都使用该字体。

#准备DataFrame数据
common_neg = pd.DataFrame(clean_texts_neg.most_common(15),columns=['words', 'count'])common_pos = pd.DataFrame(clean_texts_pos.most_common(15),columns=['words', 'count'])
from matplotlib import pyplot as plt
import seaborn as sns
import matplotlib
sns.set(font_scale=1.5)
sns.set_style("whitegrid")#为了显示中文
matplotlib.rc("font", family='Arial Unicode MS')fig, ax = plt.subplots(figsize=(16, 8))#绘制水平条形图
common_neg.sort_values(by='count').plot.barh(x='words',y='count',ax=ax,color="red")ax.set_title("外卖差评常见词")
plt.show()

绘制词云图,这里使用的pyecharts包。由于该包作者更新强度比较大,为了保证日后本教程仍可正常运行,这里提供当前我使用的pyecharts相关的版本,大家可以运行下面代码保证运行出正确结果

!pip3 install pyecharts==1.6.2
!pip3 install pyecharts-javascripthon==0.0.6
!pip3 install pyecharts-jupyter-installer==0.0.3
!pip3 install pyecharts-snapshot==0.2.0
import pyecharts.options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOKwordfreqs = [(w, str(f)) for w,f in dict(clean_texts_neg).items()]wc = WordCloud()
wc.add(series_name="", data_pair=wordfreqs, word_size_range=[20, 100])
wc.set_global_opts(title_opts=opts.TitleOpts(title="外卖差评词云图", title_textstyle_opts=opts.TextStyleOpts(font_size=23)),tooltip_opts=opts.TooltipOpts(is_show=True))
wc.load_javascript()
wc.render_notebook()

使用Shifterator绘制词移图

终于要用到 Shifterator 包的熵移图Entropy shift了!我们可以使用这个包根据频率和情绪(或其他值)比较负面和正面的外卖评论,这里我只计算了频率作为权重

具体信息请查看文档  https://github.com/ryanjgallagher/shifterator

from shifterator import EntropyShift
import matplotlib
matplotlib.rc("font", family='Arial Unicode MS')entropy_shift = EntropyShift(type2freq_1=clean_texts_neg,type2freq_2=clean_texts_pos,base=2)
entropy_shift.get_shift_graph(title='外卖差评 vs 外卖好评')

看起来最能决定外卖差评的用语是配送时间,其次才是口味。

最能决定外卖好评的似乎是口味,其次才是配送时间。

通过Shifterator我们能够看出不同词在不同文本中的作用程度。需要注意的是,我们只使用了最高的前15词频,所以显示的词有些少

总结

希望本文能对你的研究有帮助,代码下载地址https://github.com/hidadeng/DaDengAndHisPython

代码撰写调试不易,希望帮忙转载。

近期文章

视频专栏课 | Python网络爬虫与文本分析DataShare | 6000+个股票的每日财经新闻
SmartScraper | 简单、自动、快捷的Python网络爬虫
读完本文你就了解什么是文本分析文本分析在经管领域中的应用概述综述:文本分析在市场营销研究中的应用文本分析方法在《管理世界》(2021.5)中的应用
中文金融情感词典发布啦 | 附代码
wordexpansion包 | 新增词向量法构建领域词典语法最简单的微博通用爬虫weibo_crawler
hiResearch 定义自己的科研首页
SciencePlots | 科研样式绘图库
plydata库 | 数据操作管道操作符>>
plotnine: Python版的ggplot2作图库
Wow~70G上市公司定期报告数据集漂亮~pandas可以无缝衔接Bokeh
YelpDaset: 酒店管理类数据集10+G

Shifterator库 | 词移图分辨两文本用词风格差异相关推荐

  1. python的总结与心得词云设计理念_1 Python文本分析——词云分析篇

    1首先打开Pycharm,创建一个项目,命名English-Wordcloud,然后创建一个English-Wordcloud.py文件,见下图,继而开始敲代码,非常简短的代码. 2 导入词云包,导入 ...

  2. python热词关系图_Python 爬取 热词并进行分类数据分析-[拓扑数据]

    日期:2020.01.29 博客期:137 星期三 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] c.[拓扑数据](本期博客) d.[数 ...

  3. NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情)

    NLP之WordCloud:基于jieba+matplotlib库对一段文本生成词云图~~情人节最好的礼物(给你一张过去的词云图,看看那时我们的爱情) 目录 输出词云图结果 输出文本统计 设计思路 实 ...

  4. 《NLTK基础教程——用NLTK和Python库构建机器学习应用》——2.8 罕见词移除

    本节书摘来异步社区<NLTK基础教程--用NLTK和Python库构建机器学习应用>一书中的第2章,第2.8节,作者:Nitin Hardeniya,更多章节内容可以访问云栖社区" ...

  5. Python 三国演义文本可视化(词云,人物关系图,主要人物出场次数,章回字数)

    文章目录 效果展示 介绍 软件架构 使用说明 导入需要的库 执行main.py 这里以三国演义为例 三国演义.txt alice_mask.png 效果展示 介绍 Python读取小说文本,绘制词云图 ...

  6. python 词库 匹配_python从一段文本中找出存在于词库的词语

    python从一段文本中找出存在于词库的词语 有现成的库吗? 可能不是最佳答案,只是提供一个思路. 个人觉得这个问题并不需要什么库,先把词库载入,弄成列表什么的.然后再把你需要匹配的文本读入,反过来想 ...

  7. java鼠标进入高亮效果_鼠标选中文本划词高亮、再次选中划词取消高亮效果

    当我们需要鼠标选中文本后,文本高亮.当再次将选中的文本选中后,取消高亮效果时该如何实现呢? 一.介绍 window.getSelection 获取鼠标选中内容,主要是利用了window.getSele ...

  8. python文本聚类 词云图_数据思维实践 | TASK 12 文本分析

    原标题:数据思维实践 | TASK 12 文本分析 文本分析可以干什么 生活中文本无处不在,网页上的新闻.证券分析师的研究报告.政府工作报告等等,这些都是文本.如何从文本中挖掘价值是文本分析需要回答的 ...

  9. 词移距离 Word Mover‘s Distance

    词移距离 Word Mover's Distance 假如现在有一个任务,是判断两段文本之间的相似性,那我们应该怎么做呢?一个很自然的想法是用word2vec对两段文本的词向量化,然后再利用欧氏距离或 ...

  10. Python 任意中文文本生成词云 最终版本

    前叙 利用下面的代码你将可以将任意中文文本生成词云,其分词部分由jieba,NLPIR2016两个部分组成,生成词语由worldcloud负责,默认会自动发现文本中的20个新词并添加到词库中,当然你也 ...

最新文章

  1. 去掉xcode中警告的一些经验
  2. linux查看磁盘io带宽,[Linux] 磁盘IO性能查看和优化以及iostat命令
  3. magento 基本配置
  4. Debug解决问题方法论
  5. 从零开始学Pytorch(六)之梯度消失、梯度爆炸
  6. 使用 Dawn 构建 React 项目
  7. rt1052 usb速率_rt1052 spi flash 读数据好慢
  8. category与extension
  9. 使用git遇到的问题汇总
  10. CNN图像识别_算法篇
  11. C++学习足迹---(纯DOS版)五子棋
  12. 机器学习之数据预备、清洗与特征工程
  13. ClientToScreen ScreenToClient GetWindowRect GetClientRect
  14. 什么是侧翼区(flanking region)和侧翼区单核苷酸多态性(Flanking SNPs)
  15. 鳥哥的 Linux 私房菜 -- 例行性工作排程的建立 cron,郁闷一下午
  16. 【寻找最佳小程序】01期:影视评分小工具“豆瓣评分”——产品设计要点及专家评析
  17. 【要闻】如何基于K8s管理1600个微服务?某数字化银行秘诀公开
  18. 系列文章深度解读|SwiftUI 背后那些事儿
  19. springboot小程序商城毕业设计毕设作品开题报告开题答辩PPT
  20. 培训人要转型?先回答这6个问题

热门文章

  1. ae怎么输入竖排文字? ae文字竖排的方法
  2. Mac电脑没声音了怎么办?苹果电脑没声音的解决方法
  3. vscode终端清屏
  4. 如果小米开放购买会怎么样?
  5. [资源]--IOS捷径大全,众多实用小功能
  6. Day 05 模板层相关
  7. Hive split()、explode()和lateral view 应用单列,多列炸裂
  8. 支付宝 android 崩溃,支付宝App崩溃网友集体炸锅 官方紧急回应
  9. OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常
  10. 豆瓣250信息爬取及保存到excel中