如何用VOSviewer分析CNKI关键词共现?

用VOSviewer尝试CNKI中文文献关键词共现(keyword co-occurence)分析时,你可能会踩到一个大坑。本文帮助你绕开这个坑,或是从坑里爬出来。

(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)

疑惑

在《如何用VOSviewer分析CNKI数据?》一文中,我们提到了如何用VOSviewer可视化分析CNKI文献。

依照文中的步骤,我们从CNKI下载并导出《图书情报知识》期刊2016年全年文献数据,通过Endnote作为中转,最终导出了VOSviewer可以读取的RIS文件。

我把这个几经辗转得来的RIS文件存放到了这里,你可以直接下载使用。

利用该数据文件,我们用VOSviewer分析合作者(Co-authorship),做出了这张图。

有的读者很兴奋,立即打算用同样的方法,做CNKI中文文献的关键词共现分析(keyword co-occurence)。

很快,他们就遇到了问题。因为用样例数据,虽然可以做出分析结果图,却是这个样子的:

图里面只有关键词,没有任何关键词之间的连接。这叫什么共现分析?!

有读者很沮丧地把这幅图发给了我。问我这是否意味着,VOSviewer不能胜任中文文献的关键词共现分析?

当然不是。

VOSviewer做的是统计和可视化。对于它来说,中文和英文关键词没有本质区别。只要来源数据处理得当,分析的结果都应该是正确的。

那么问题究竟出在哪里呢?

原因

我们用样例数据,重新走一遍流程。复现读者遇到的困境。

VOSviewer主界面里,我们选择File -> map -> create,新建一个分析图。

第一个对话框问我们映射方式。

我们从中选择第二项。

然后新弹出的对话框会询问分析源文件的格式。

我们选择RIS。

下面的对话框,询问分析类型。默认是合作者分析(Co-authorship)。

我们选择关键词共现分析(Co-occurence)。

然后VOSviewer询问我们阈值的选择。

注意默认的阈值为3,可是这样只有3个关键词满足阈值。最终的图上如果只有3个节点,就太稀疏了。于是我们降低阈值到1。

VOSviewer提示我们,通过阈值过滤的关键词有83个。

我们选择下一步。这时可以看到全部关键词列表。

我们可以从中选择或者反选关键词做分析。

但是此处别着急进行下一步。我们看到了非常奇异的现象。

注意图中列表的最后一列,是连接强度,也就是这一行的关键词与其他关键词共同出现的总次数。默认从大到小排列,可是所有的关键词共现次数居然都是0次

难怪我们点击下一步的时候,会出现关键词节点间,全无链接。

为什么关键词同时出现次数分析值都是0呢?难道每篇论文只有1个关键词?关键词之间从来没有同时出现过?

这不符合常识。

我们发表期刊论文或者写毕业论文时,一般情况关键词至少也要列出3个吧。

带着这样的疑惑,我们就要检查一下RIS源文件了。

以其中的第一篇《信息素养的历史与实践之旅》为例,我们看到关键词一共有3个,分别为“信息素养”、“行动素养”和“行动素养联盟”。

如何识别它们是关键词呢?

因为前面有个KW -前缀作为标志。

然而问题来了,我们看到作者信息部分,每个作者名字前,都有AU -前缀。

AU - G.Zurkowski, Paul AU - V.Kelly, Jeffrey AU - 刘千卉 AU - 程璐

可是关键词这里,除了第一个有KW -前缀,其他都没有。

KW - 信息素养 行动素养 行动素养联盟

会不会是因为这个缘故,导致合作者分析链接正常,而关键词共现分析链接消失呢?

我们做个实验,验证一下咱们的猜测。

实验的方法很简单。我们把第一篇文献的另外两个关键词之前,都加上KW -前缀。其他文献的关键词不做任何处理。

修改后的RIS文件,就成了这样子:

我们回到VOSviewer,重新分析。前面的步骤和上一节完全一致。直至最后一步。

我们非常明显地对比出,关键词总链接强度(Total Link Strength)一项发生了变化,有几个关键词,不再是0了。

发生改变的这几个关键词,恰恰是刚才添加过前缀的那几个。

这个简单的实验,验证了我们的猜测。

并不是VOSviewr的处理能力有缺失,而是中文文献元数据,经由Endnote导出为RIS格式的时候有纰漏,导致多关键词的前缀没有全部正确添加。

效率

问题找到了。

下面我们该怎么办?

很简单,把所有关键词的前缀都添上就好了啊。

你可能立即觉得天旋地转。

把前缀都添上?说得轻巧!

样例数据里,文献有数十篇。一篇篇找关键词,添加前缀,虽然会做个头晕脑涨,但毕竟还有个盼头儿。

问题是,要分析的文献有好几千篇。都添完的时候,是不是下学期都该开学了?

也没那么夸张了。

想想愚公移山,精卫填海……先贤的精神力量还不够给你以感召吗?

精神固然要有,但效率也是要追求的。

我们当然不能一条条手动查找关键词并添加前缀,那样效率太低。我们要用工具来自动化解决这个问题。

好消息是,工具我已经帮你编写好了。

下面我详细告诉你,该怎么使用。

工具

我帮你编写的工具,是个Python脚本。

我们需要安装Python运行环境Anaconda,来使用这个脚本。

请到这个网址 下载最新版的Anaconda。下拉页面,找到下载位置。根据你目前使用的系统,网站会自动推荐给你适合的版本下载。我使用的是macOS,下载文件格式为pkg。

下载页面区左侧是Python 3.6版,右侧是2.7版。请选择2.7版本。

双击下载后的pkg文件,根据中文提示一步步安装即可。

安装好Anaconda后,我们来下载脚本。

我把脚本存储在了Github项目里。请从这个位置下载压缩包。

下载后解压到本地,这个目录就是咱们的演示目录。

请进入终端(macOS或者Linux),用cd命令进入到这个目录。如果你用的是Windows,请运行Anaconda Prompt程序,并进入该目录。

下面,请执行以下命令。

python ris-add-kw-prefix.py tsqbzs.ris

如果你要尝试处理自己的RIS文件,请把它拷贝到这个演示目录里面,然后把上面命令语句中最后部分(文件名)改成你自己的RIS文件。

执行后,你会发现目录下多了一个文件,叫做output.ris。

我们打开这个新生成的RIS文件。

可以看到,所有的未加前缀的关键词,都已经自动添加了前缀。

我们尝试将这个output.ris输入到VOSviewer,这次的分析结果列表如下:

这时候再看关键词链接数量,就合理多了。

利用这个分析结果来可视化,你会看到以下生成的图形:

在这个样例中,我们只有几十篇文献。利用脚本处理前缀,显得有些大炮轰蚊子。

但如果你需要处理几千、几万篇文献的记录信息,用这个脚本也一样可以瞬间完成操作。效率的差别就体现得淋漓尽致了。

好了,到这里为止,你已经了解如何利用咱们编写的工具,对Endnote导出的中文文献做关键词处理,在VOSviewer中正确分析关键词共现了。

目标达成。

如果你对原理和技术细节不感兴趣,下面就可以跳到小结部分了。

如果你还没走,我来猜猜你在想什么。

这么高效的处理方法,是不是令你感觉不可思议?

老师你的工具至少有300行语句吧?

没有。

其实程序从头到尾,只有20多行。

而其中的核心部分,只有3行。

老师动用了什么黑魔法?!

魔法

我当然不会魔法。

我们使用的,是计算机最简单的能力——根据指令,重复执行枯燥劳动。

从第一行开始,依次检查每一行的文字。如果该行不是空行,而且其中不包含前缀连接符号“-”,那么我们就将其当成未加前缀的关键词。

我们让计算机在这行文字的最前面,加上KW -前缀。

就是这么简单,一点也不炫酷。

但是计算机怎么理解“不是空行”、“不包含符号‘-’”呢?

请看我们Python文件中的核心函数代码。

def add_kw_prefix(data):
    regex = r"^([^\-\s]+?)\s+$"
    subst = "KW  - \\1"
    newdata = re.sub(regex, subst, data, 0, re.MULTILINE)
    return newdata

我们用到的工具,叫做正则表达式(regular expression),简称re。

它是计算机处理文本模式的一种经典工具。

我们之前谈到机器学习的时候,曾经说过。机器学习模型,是人不知道怎么描述规则的时候,让计算机自己学。

而正则表达式,则恰恰相反,是人类可以很准确地描述规则时,为机器定义的模式。

正确定义模式后,计算机就会检查文本中是否包含这种模式,并且做出对应的处理。

正则表达式的功能非常强大,不过学起来需要花一番功夫。

如果你对正则表达式感兴趣,希望自己也能操纵计算机程序,对文本精确地做出模式识别与处理,可以参考DataCamp上的这篇教程来学习。

小结

通过本文,希望你已经了解了以下内容:

  1. VOSviewer可以正确处理中文文献的关键词共现分析;
  2. CNKI文献元数据经由Endnote导出成RIS时,关键词处理有瑕疵,需要添加对应前缀;
  3. 你可以利用我提供的Python脚本,来快速完成前缀添加工作;
  4. 正则表达式的使用,可以有效提升大规模文本模式匹配与处理操作的效率。

讨论

用本文的方法,你做出了正确的CNKI文献关键词共现分析了吗?在此之前,你是如何处理关键词共现分析的?有没有什么更加简便高效的方法?欢迎留言,把你的经验和思考分享给大家,我们一起交流讨论。

原文发布于微信公众号 - 玉树芝兰(nkwangshuyi)

原文发表时间:2018-01-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏存储

你真的很熟分布式和事务吗?

微吐槽 hello,world. 不想了,我等码农,还是看看怎么来处理分布式系统中的事务这个老大难吧! 本文略长,读者需要有一定耐心,如果你是高级码农或者架构师...

24190
来自专栏CreateAMind

ROS深入探索(五)——创建简单的机器人模型smartcar

前面我们使用的是已有的机器人模型进行仿真,这一节我们将建立一个简单的智能车机器人smartcar,为后面建立复杂机器人打下基础。

10930
来自专栏CSDN技术头条

介绍两款大数据清洗工具——DataWrangler、Google Refine

在进行数据分析和可视化之前,经常需要先“清洗”数据。这意味着什么?可能有些词条列表里是“New York City”,而其他人写成“New York,NY”。然...

77690
来自专栏机器之心

教程 | 如何使用Docker、TensorFlow目标检测API和OpenCV实现实时目标检测和视频处理

选自TowardsDataScience 作者:Léo Beaucourt 机器之心编译 参与:李诗萌、路雪 本文展示了如何使用 Docker 容器中的 Ten...

48660
来自专栏Python小屋

Python使用三种方法批量修改记事本文件编码格式

应用背景:近期计划写一个贝叶斯算法邮件分类的教学案例,苦于没有足够的训练集,就让同学们帮忙每人从自己的邮箱中找几封垃圾邮件把内容复制下来放到记事本文件中发给我,...

11720
来自专栏小文博客

在线图片识别系统Ver2.0

该工具是小文博客基于Django框架开发的图片识别系统,调用腾讯云API,目前可识别身份证、驾驶证、行驶证、营业执照、印刷体、手写体等十几种图片。在Ver1.0...

3.3K20
来自专栏数据小魔方

数据地图系列8|R语言版数据地图(下)

今天要跟大家分享的是数据地图系列的第八篇——R语言版数据地图(下),分省(市级)热力地图。 步骤与昨天分享的中国热力地图步骤基本一致,只是需要调用的数据文件和需...

45080
来自专栏黄希彤的专栏

内部体验腾讯负载均衡的新功能

腾讯云近期将推出的新的负载均衡轮询算法,新算法被称为“最小连接数”算法,也就是LB会随时判断哪台主机上的HTTP连接数最少,然后尽量把新的请求分发给它。

87600
来自专栏点滴积累

geotrellis使用(四十)优雅的处理请求超过最大层级数据

前言 要说清楚这个题目对我来说可能都不是一件简单的事情,我简单尝试。 研究 GIS 的人应该都清楚在 GIS 中最常用的技术是瓦片技术,无论是传统的栅格瓦片还是...

35490
来自专栏机器之心

教程 | 如何使用Kubernetes GPU集群自动训练和加速深度学习?

选自GitHub 机器之心编译 参与:蒋思源、Smith、吴攀 像 Docker 这样的容器格式和 Kubernetes 之类的容器管理平台正越来越受到人们的欢...

67330

扫码关注云+社区

领取腾讯云代金券