热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

李鬼见李逵——我用翟天临的论文做了分析

完整源码可在公众号:「01二进制」后台回复:「翟天临」获取昨天是元宵节,在南京,元宵节一到也意味着这

完整源码可在公众号:「01二进制」后台回复:「翟天临」获取

昨天是元宵节,在南京,元宵节一到也意味着这个年过完了,我们也该回到自己的工作岗位上了。都说今年的瓜特别多(葫芦娃的那种),但是过年期间最甜的我想非翟天临的“ 知网是什么? ”莫属了吧。

前段时间,微博上开始不断爆出翟天临学术不端,论文抄袭的消息,以至于牵扯到其导师、院长甚至整个北京电影学院。

李鬼见李逵——我用翟天临的论文做了分析

我平常不怎么关注娱乐圈,所以刚开始并没有把这件事放在心上,直到网上爆出翟的论文大篇幅抄袭陈坤论文的消息,我才对这位娱乐圈博士的文章起了兴趣。接下来就让我们以一个coder的角度来硬核分析下翟的论文吧。

实验环境

工欲善其事,必先利其器,在开始分析之前,我先说明此次分析所处的实验环境,以免出现异常:

  • MacOS 10.14.3
  • Python 3.6.8(Anaconda)
  • Visual Studio Code
  • 使用的包有:
    • pkuseg(分词)
    • matplotlib(绘图)
    • wordcloud(词云)
    • numpy(数学计算)
    • sklearn(机器学习)

数据获取

说实话,起初我以为就算翟不知“知网”为何物,“知网”也该收录翟的文章吧,可我在知网搜了好久也没能找到翟的论文,好在我在今日头条上找到了他的文章,保存在 data/zhai.txt 中。说到这,还真要感谢翟天临啊,都是因为他,大家才变得这么有学术精神,开始研究起本科硕士博士论文了。

李鬼见李逵——我用翟天临的论文做了分析

数据清理

上一节我们已经将他的论文保存到一个txt中了,所以我们需要先将文章加载到内存中:

# 数据获取(从文件中读取)
def readFile(file_path):
    cOntent= []
    with open(file_path, encoding="utf-8") as f:
        cOntent= f.read()
    return content

我统计了下,除去开头的标题和末尾的致谢,总共25005个字。

接下来我们来进行数据清理,在这里我用了 pkuseg 对内容进行分词处理,同时去掉停用词后输出分词的结果。

所谓停用词就是在语境中没有具体含义的文字,例如这个、那个,你我他,的得地,以及标点符合等等。因为没人在搜索的时候去用这些没意义的停用词搜索,为了使得分词效果更好,我就要把这些停用词过滤掉。

# 数据清理(分词和去掉停用词)
def cleanWord(content):
    # 分词
    seg = pkuseg.pkuseg()
    text = seg.cut(content)

    # 读取停用词
    stopwords = []
    with open("stopwords/哈工大停用词表.txt", encoding="utf-8") as f:
        stopwords = f.read()

    new_text = []
    # 去掉停用词
    for w in text:
        if w not in stopwords:
            new_text.append(w)

    return new_text

执行结果:

李鬼见李逵——我用翟天临的论文做了分析

这里我提两点:

  1. 为什么分词 工具 用的是 pkuseg 而不是 jieba

pkuseg是北大推出的一个分词工具,官方地址是: github.com/lancopku/pk…

李鬼见李逵——我用翟天临的论文做了分析
  1. 为什么用哈工大的停用词表?

停用词表的下载地址在: github.com/YueYongDev/…

停用词表 效果较好的文本种类
哈工大停用词表 文献期刊类文本
百度停用词表 新闻报道类文本
四川大学停用词表 邮件文献类文本

参考文献:官琴, 邓三鸿, 王昊. 中文文本聚类常用停用词表对比研究[J]. 数据分析与知识发现, 2006, 1(3).

有兴趣阅读此篇论文的可在公众号:「01二进制」后台回复:「停用词表对比研究」获取

数据统计

说是数据统计,其实也没什么好统计的,这里简单化一下,就是统计下各个词出现的频率,然后输出词频最高的15个词

# 数据整理(统计词频)
def statisticalData(text):
    # 统计每个词的词频
    counter = Counter(text)
    # 输出词频最高的15个单词
    pprint.pprint(counter.most_common(15))

打印的结果:

李鬼见李逵——我用翟天临的论文做了分析

真的是个不可多得的“好演员”啊,能将角色带入生活,即使肚中无货却仍用自己的表演能力为自己设立一个“学霸”人设,人物形象如此饱满,兴许这就是创作的艺术吧!

文章中说的最多的就是生活、角色、人物、性格这些词,这些正是一个好演员的精神所在,如果我们将这些词做成 词云 的话,可能效果会更好。

生成词云

词云生成这个部分我采用的是 wordcloud 库,使用起来非常简单,网上教程也有很多,这里需要提一点的就是:为了防止中文乱码情况的发生,需要配置 font_path 这个参数。中文字体可以选用系统的,也可以网上找,这里我推荐一个免费的中文字体下载的网址: www.lvdoutang.com/zh/0/0/1/1.…

下面是生成词云的代码:

# 数据可视化(生成词云)
def drawWordCloud(text, file_name):
    wl_space_split = " ".join(text)

    # 设置词云背景图
    b_mask = plt.imread('assets/img/bg.jpg')
    # 设置词云字体(若不设置则无法显示中文)
    font_path = 'assets/font/FZZhuoYTJ.ttf'
    # 进行词云的基本设置(背景色,字体路径,背景图片,词间距)
    wc = WordCloud(background_color="white",font_path=font_path, mask=b_mask, margin=5)
    # 生成词云
    wc.generate(wl_space_split)
    # 显示词云
    plt.imshow(wc)
    plt.axis("off")
    plt.show()
    # 将词云图保存到本地
    path = os.getcwd()+'/output/'
    wc.to_file(path+file_name)
李鬼见李逵——我用翟天临的论文做了分析

真假李逵(文章对比)

分析完了“李鬼”,我们有必要请出他的真身“李逵”兄弟了,同样还是和之前一样的套路,先找到数据,然后分词统计词频,这里就不重复操作了,直接放出词云图。

李鬼见李逵——我用翟天临的论文做了分析

看到这图是不是觉得和翟的词云图异常相似,那么,这“真假李逵”之间到底有多像呢?接下来我们来计算下两篇文章的相似度吧。

文章相似度比较

TF-IDF

文章相似度的比较有很多种方法,使用的模型也有很多类别,包括 TF-IDF,LDA,LSI 等,这里方便起见,就只使用TF-IDF来进行比较了。

李鬼见李逵——我用翟天临的论文做了分析

TF-IDF 实际上就是在词频 TF 的基础上再加入 IDF 的信息,IDF 称为逆文档频率,不了解的可以看下阮一峰老师的讲解: www.ruanyifeng.com/blog/2013/0… ,里面对 TFIDF 的讲解也是十分透彻的。

Sklearn

scikit-learn 也简称 sklearn, 是机器学习领域当中最知名的 Python 模块之一,官方地址为: github.com/scikit-lear… Sklearn 中的模块 TfidfVectorizer 来计算两篇文章之间的相似度,代码如下:

# 计算文本相似度
def calculateSimilarity(s1, s2):
    def add_space(s):
            return ' '.join(cleanWord(s))
    
    # 将字中间加入空格
    s1, s2 = add_space(s1), add_space(s2)
    # 转化为TF矩阵
    cv = TfidfVectorizer(tokenizer=lambda s: s.split())
    corpus = [s1, s2]
    vectors = cv.fit_transform(corpus).toarray()
    # 计算TF系数
    return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))

除了Sklearn,我们还可以使用 gensim 调用一些模型进行计算,考虑到文章篇幅,就由读者自己去搜集资料实现吧。

我们将翟的论文和陈的论文分别传入该函数后,输出结果为:

两篇文章的相似度为:
0.7074857881770839

其实这个结果我还是挺意外的,只知道这“李鬼”长得像,却没想到相似度竟然高达70.7%。当然,作为弟弟,翟的这个事和吴秀波的事比起来,那都不是个事。:see_no_evil:

李鬼见李逵——我用翟天临的论文做了分析

完整源码可在公众号:「01二进制」后台回复:「翟天临」获取

李鬼见李逵——我用翟天临的论文做了分析

以上所述就是小编给大家介绍的《李鬼见李逵——我用翟天临的论文做了分析》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • 本文整理了Java中org.apache.solr.common.SolrDocument.setField()方法的一些代码示例,展示了SolrDocum ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
author-avatar
景科儒_189
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有