当前位置: 首页 > 科技观察

github最流行的语言是什么,并用wordcloud分析制作过程(上)

时间:2023-03-17 10:01:14 科技观察

【.com快译】本文意在将不同编程语言中的高频词可视化github仓库。数据来自2016年年中至年底的约300万套开源GitHub存储库。结果以文本词云的形式展示如下:相关轶事这里是每组代码库中不同编程语言对应的常用词。GitHub的语言识别功能将这组库中的大部分视为C++。这个结果不无道理,毕竟相当多语言的诞生都是受C/C++的启发:许可证文本一般都位于各个编程语言的注释中。在所有语言中,Java代码以显着优势获胜,占许可证文本总966个单词中的127个:Java的统治力太强,因此对许可证文本进行了过滤。Lua是唯一在前1000个常用词中包含脏话的编程语言——有兴趣的朋友可以来了解一下。在Go语言中,err的使用频率与return一样高。下面,这些数据是如何生成的。如何概括?使用BigQuery从github_repos数据集中提取单个单词。当每个词被提取出来时,它会伴随着它出现的前十行代码。在保存每个单词之前,请使用以下限制:出现该单词的行不应超过120个字符。这有助于我们过滤掉非人类编写的代码,例如缩小的JavaScript代码。标点符号(,;:.)、运算符(+-*...)和数字将被忽略。因此,如果这一代的内容是a+b+42,那么过滤后的内容就只有:a和b。包含“许可标志”的行-出现在许可文本中的词(例如许可、非侵权等)将被忽略。许可文本在代码中很常见,虽然乍一看确实很有趣,但一般来说太多了,所以我们决定将其过滤掉。区分每个单词的大小写状态:This和this被视为两个独立的单词。数据是如何收集的?在这一部分中,我们将更深入地了解如何提取词汇。不感兴趣的也可以直接跳到词云算法部分。来自GitHub公共数据集的数据通过BigQuery进行索引:github_reposBigQuery将每个索引文件的具体内容以纯文本的形式存储在一组表中,相当于key-value的形式:构建这样一组词汇云,你需要使用权重来做词汇扩展。相反,为了获得权重值,可以将每个文本拆分为单独的单词(标记化)。不幸的是,这种简单的方法并没有给出好的结果——因为人们无法理解每个单词出现的具体上下文。目标是希望避免这个问题,并确保人们可以查看单个单词及其出现的实际上下文:为此,创建了一个临时表,而不是直接计算每行中单词的出现次数:这不仅让我能够将每个单词与其“上下文”相关联,同时还将整体数据大小从几TB减少到大约12GB。为了从这个表中获取出现频率最高的词,我们可以使用上面提到的方法,即将内容拆分成具体的词,然后用表对每个词进行分组。如果我们保留中间表中的原始行,我们还可以获得每个单词对应的上下文:通过这个中间表示,我们可以使用SQL窗口函数对每个单词进行分组,并获得每个单词的前十行(更多详见:为每个类别选取前十名记录,英文原文)。您现在可以在此处查看提取的代码:extract_words.sql。备注1:作者SQL水平不高,如有错误或更理想的数据获取方式,请在评论中指出。此外,虽然当前脚本有效,但某些结果可能略有偏差。备注2:BigQuery性能非常好。它功能强大、灵活且速度极快。在此,向能玩好它的朋友们致以12分的敬意。如何进行词汇云渲染?词云的核心部分其实用了一个很简单的算法:foreachword`w`:repeat:placeword`w`atrandompoint(x,y)until`w`doesnotintersectanotherword为了避免出现内部***循环,你可以尝试限制次数和/或删除那些字体大小不符合要求的单词。抽象地,这个问题可以用矩形来表示:对于每个矩形,尝试将它放在画布上,直到它的像素都不与其他形状相交。显然,当画布被大量占用时,要找到放置新矩形的地方变得非常困难甚至不可能。我们可以通过多种方式对占用空间进行索引来加速该算法:使用面积求和表通过O(1)计算快速确定新矩形是否与其下矩形相交。这种方式的缺点是每更新一次画布,整个表集也需要更新一次,会造成O(N2)的性能;使用R-Tree维护排序可以快速判断一个新的候选矩形是否与后面的任何矩形相交。使用这种方法,像素交集查找比区域总和表的效果慢,但索引维护得更快。作者认为这两种方法都有一个重要的缺点,即很可能在找到适合新矩形的空间之前浪费大量的尝试,这对性能保证非常不利。作者想尝试一些不同的实现。创建一组索引并使用它来快速选择一个足够大的矩形来匹配我新添加的矩形。这意味着索引可用空间,而不是占用空间。这里,选择四叉树作为索引方案。每个非分支节点都包含可用于其子分支的自由像素信息。在基本层面上,这使我们能够快速回答我们的问题:“是否还有足够的空间容纳M个像素?”分支。至此,具体算法的选择已经完成。在本系列文章的下一部分,我们将看看它的实际效果以及不同编程语言中高频词的最终分析结论。原标题:常用词原作者:anvaka文章审稿人:老曹译者:Nuka-Cola老曹专栏文章链接:http://zhuanlan.51cto.com/columnlist/laocao/原译者及出处为.com]