书目参考文献中的群体分析

refcliq的Python项目详细描述


refcliq

这个包是对neal caren的 refcliq。目标是一样的 利用图聚类分析共引文献的聚类。注意 这个软件包也可以在联合引文网络上运行,而不是在引文网络上运行 网络

主要区别是:

重要信息:输入的书目文件必须来自科学网/知识网,包括引用参考文献字段。否则,"参考"部分可能丢失或格式不同,这将不起作用。

非常重要:大多数.bib文件包含由不同的人使用不同的想法/符号/约定手动填写的信息。这个程序包适用于大多数情况,但不是所有情况。可能需要手动编辑.bib文件。

如果遇到您认为应该在代码中修复的错误,或者如果您有新功能的建议,请在此处打开新问题。请务必先检查存在的问题,尽可能具有描述性,并包括错误示例和有关如何复制错误的详细说明。

安装:

只有python 3才受支持,毕竟python 2被设置为很快退出

pip install refcliq

所有依赖项都将自动安装。

在运行大型数据集之前,最好运行一个小的.bib文件,以确保脚本的每个步骤都能正常工作(请参阅最后的常见问题解答)。

用法:

此软件包包含两个脚本:

  • rc_cluster.py:计算集群并将结果保存到json文件中。
  • rc_vis.py:启动预计算文件的可视化界面。

生成结果

运行带有'-h'参数的rc_cluster.py将显示帮助:

$ rc_cluster.py -h
usage: rc_cluster.py [-h] [-o OUTPUT_FILE] [--cites CITES] [-k GOOGLE_KEY]
                  [--graphs]
                  files [files ...]

positional arguments:
  files           List of .bib files to process

optional arguments:
  -h, --help      show this help message and exit
  -o OUTPUT_FILE  Output file to save, defaults to 'clusters.json'.
  --cites CITES   Minimum number of citations for an article to be included,
                  defaults to 2.
  -k GOOGLE_KEY   Google maps API key. Necessary for precise geocoding.
  --graphs        Saves graph drawing information for the cluster.
  • 文件:要使用的.bib文件。它可以是一个文件(a.bib)、文件列表(a.bib b.bib)或通配符(*.bib)。
  • -o(输出文件):要用于结果文件的名称。将自动添加"json"扩展名。如果未提供,则默认为clusters.json
  • --cites:包含文章的最小引用数。虽然这可以在交互界面中更改,但增加此数字会加快处理时间并减少内存需求。如果处理崩溃/内存不足,请增加此参数。此外,如果参数为1,则只有一篇文章引用的所有作品都将呈现为密集连接的簇,这可能会稍微妨碍解释,因此它默认为2
  • --graphs:启用引用图的可视化在界面上。*大大增加结果文件的大小。只有少于50篇文章的群集才会显示在界面中。
  • -k:google api密钥。此键对于地理编码是必需的,并且可能需要付款。请使用google.com/calculator查看谷歌的计费计算器。虽然这个包试图智能化并减少地理编码调用,但可以合理地安全地假设每个出版物的每个作者都有一个调用,作为调用数量上限的近似值。小心监控您的使用情况,此软件包按原样提供,作者无法帮助您对谷歌的任何计费问题负责。

如果没有地理编码键,则国家/地区仍会被识别并显示在导出的.tsv文件中,但地图不会显示在界面中。

可视化结果

假设结果文件名为clusters.json

$ rc_vis.py clusters.json

将在默认浏览器上打开一个新选项卡,其外观如下(启用地理编码):

与右上角地图和左侧集群列表的基本接口

界面分为两个面板,左边是集群可视化,右边是引文详细信息。

群集:左侧的每个框表示Louvain方法找到的一个群集。在它的"折叠"可视化中,它显示了这个集群中文章的数量,直接从这个集群中文章的可用摘要计算的内容关键字,以及引用论文的关键字,它们表示从把文件放在这一组里。关键字使用sklearn计算,仅启用tf。

左上角的两个滑块控制显示的内容,hidden的引用数少于第一个滑块的值,clusters的引用数少于第二个滑块的值。这是在不重新处理群集的情况下完成的。

单击"群集"框右上角的V形符号将"展开"该群集,如下所示(在单击第一个引文后):

左侧一个集群展开,显示一个节点链接图

扩展版本列出了该集群中的所有文章,并带有可单击的链接 激活界面右侧的面板,显示引用 引用的详细信息,以及网络中心度度量 (学位中心性 使用实现 网络x), 引用计数、文章关键字(当摘要可用时)和 引用作品的关键词。

中心性:此图像还显示网络图,突出显示列表中的第一个工作。默认情况下不包含此图(仅适用于作品少于50幅的簇),但了解中心度度量很有帮助。由于我们采用了度中心性,这个数是这个工作的现有连接数与p的数量之比。可能的连接,它表示引用此工作时引用的簇的分数。1的中心性意味着每当引用这个集群中的任何文章时,也会引用该工作。在这种情况下,作品"Durandasserve,A.2002。只有三篇引文,但中心度为0.81这意味着它与本组作品的81%相关(同时被引用)。网络图中的连接以红色突出显示。

引文详细信息:此面板分为两部分:顶部的地图(如果通过提供谷歌地理编码键启用地理编码)和引文作品列表。通过单击"导出TSV文件"按钮,可以将此列表导出为以制表符分隔的值文件。如果有相关信息,还提供了每项工作的doi链接。

地理编码信息可以显示为标记或热图。为了减少有多个作者的论文对热图的影响,使用了作者数的日志。可以筛选地图上的信息,使其仅包含一年或选定年份之前的所有年份(使用累计复选框)。取消选中"适应标记"(Fit to Markers)框可防止地图更改视口(用于进行比较)。

FAQ

  • 我不需要地理编码,我应该使用原始版本吗?或者我在原始版本中运行了我的.bibs,得到了不同的结果!

    这个项目是以原始版本的分叉开始的,目的仅仅是添加作者的地址信息,我不确定是否有来自原始版本的行现在存在于这个项目中。撇开python 2和编码方法论不谈(以及整个尝试/除了误用之外),由于原始版本只考虑第一作者、年份和标题/期刊,因此它合并了不应合并的内容(同一作者在同一期刊和年份中的两篇论文)。此外,对文本处理的漫不经心的方法会无声地丢失工作,甚至丢失整个文件(.bib)。

  • 为什么是两个剧本?

    我选择将处理后的信息存储为json,而不是生成一堆静态页面,因为这样我就可以充分使用react并生成交互式可视化界面。此外,如果/当我决定更改接口时,不需要再次处理结果(取决于功能),如果您运行几百个文件,并且其中有大约一百万个作品,这将非常方便。如果有人想将处理后的结果用于其他用途,json很容易加载和解析。

  • 我不想拿到谷歌的钥匙,有没有办法画地图?

    导出的.tsv文件包含作为字段的国家信息。应该可以打破这个字段,并使用excel或google docs地图绘制功能来完成choropleth地图。将提供的国家名称与实际国家匹配有点棘手,这就是为什么我还没有实现这一点。对此,拉取请求非常受欢迎。

  • 滑块太挑剔了!很难精确地选择一个数字。

    选择滑块后,可以使用键盘中的左/右箭头进行单位增量。在手机上,那就更麻烦了。

  • 我的文件夹中出现的cache.json文件是什么?

    为了最小化对google地理编码api的调用,脚本缓存结果,因此即使在不同的运行中也不会进行重复的调用。如果不想从零开始,在此处下载我当前的cache.json

  • 我第一次跑步如果找不到"en_core_web_sm"型号,则会崩溃。

    只要再运行一次这个命令就可以了。它需要下载spacy的英语语言模型,但脚本不会自动刷新已安装的包。欢迎提出请求。

  • 为什么不在地理编码中使用提名呢?

    我们实际上在项目开始时使用它是因为它是免费的,但它漏掉了几个地址(如leics,england),它地理编码多伦多,安大略省,加拿大作为一个点,位于不列颠哥伦比亚省维多利亚以北约50公里的森林中间。google地理编码可能会很贵,但它确实有效。

  • 为什么对导出的引文使用制表符分隔值(.tsv)而不是逗号分隔值(.csv)?

    虽然csv格式的规范相当健壮,但在野外也有一些糟糕的实现。通过使用值中不存在的字符,解析更容易,而且不易出错。

  • 为什么程度中心性而不是中间性作为原始参考?

    考虑下图:

    一个有9个节点的图的节点链接图,每边有两个由中心节点连接的四个组

    中间性中心度度量图通过给定节点的最短路径数。在这种情况下,从红色节点左侧连接到右侧节点的所有路径都将通过红色节点,因此红色节点的中间性中心度将相当高(~0.57),这并不是我们想要测量的。此节点的度中心度为2/8,因为它连接到网络中可能的八个节点中的两个。这是一个相当极端的例子,可能会被louvain分成两个类(取决于共引次数)。

    此外,度中心度的计算速度要快得多。

  • 引文网络-引文参考文献处理部分的时间估计错误/持续增加。

    这是代码中最棘手的部分,如果给定一个非常不完整的引用(第一作者的部分名字,年份,以及与标题/期刊相关的内容,可能是doi),代码必须决定该作品是否已经在引用图上。由于图形不断增长,此搜索将逐渐变慢。健壮的字符串比较很慢,但这是一种适当匹配工作的可靠方法,即使存在doi,因为同一个工作可以与多个doi关联,或者可能有人在doi字段中写入了公司的名称。手动填充字段。还有打字错误。

  • 如何保存显示在界面上的地图,以便在博客/纸张等中使用?

    打印屏幕。是的,这是一种相当古老的方法,但它是有效的,我不需要任何复杂的实现。如果你在浏览器上"放大"或增加分辨率(在chrome上按ctrl和+键),可以使地图变大。欢迎对该功能提出请求。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java HttpServletResponse在保存时提示输入文件名   基于Java中的XML值重新创建XML   Java中递归调用的一个堆栈占用多少内存?   java数字到二进制到零计数器   java Primefaces选项卡视图:在计数后设置活动索引   xml在Java中可以将XSD转换为XPath吗?   在递归循环中检测JDBC连接的java插件/工具   spring mvc中的java处理错误   java向spring安全认证添加子域   在安卓中设置时,java日期不正确   java setColorFilter适用于所有按钮   java Android:Bitmap-to-Byte数组和back:SkImageDecoder::Factory返回null   java如何使用lambda实现ComponentScan的自定义过滤器?   java iOS推送通知不工作   java在异步servlet中用新请求替换旧请求