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

李鬼看到李逵,用Python“死磕”翟天临的博士论文

时间:2023-03-21 13:43:14 科技观察

说今年瓜很多(葫芦娃的那种),不过我觉得过年期间最甜不是翟天临的《知网是什么?》一定是。近日,翟天临因“论文抄袭、学术造假”被推上风口浪尖。就连他参演并准备播出的六部电视剧,都被央视删掉了。至此,人设彻底崩塌,舆论一片哗然。平时不太关注娱乐圈,所以一开始并没有把这件事放在心上。直到网上爆出翟的论文大量抄袭陈坤论文的消息,我才对这位娱乐圈博士的文章产生了兴趣。目前,北京电影学院已经撤销了翟天临的博士学位,并取消了陈曦博士的研究生导师资格。接下来,让我们从Coder的角度来分析一下翟的论文。要想做好实验环境,必先利其器。在开始分析之前先说明一下本次分析所处的实验环境,以免出现异常:MacOS10.14.3Python3.6.8(Anaconda)VisualStudioCode使用的包包括:pkuseg(分词)matplotlib(绘图)wordcloud(词云)numpy(数学计算)Sklearn(机器学习)数据获取老实说,一开始我以为即使翟不知道什么是知网,也该收录翟的文章了,但我没有在知网上找了好久才找到翟的论文。幸运的是,我在今日头条上找到了他的文章,并保存在data/zhai.txt中。说到这里,真的要感谢翟天临。正是因为他,大家才变得如此有学业上的积极性,开始攻读本科、硕士、博士论文。数据清洗上一节,我们把他的论文保存在一个txt中,所以需要先将文章加载到内存中:#数据获取(从文件中读取)defreadFile(file_path):content=[]withopen(file_path,encoding="utf-8")asf:content=f.read()returncontent我统计了一下,除去开头的标题和结尾的致谢,一共是25005个字符。接下来,让我们清理数据。这里我使用pkuseg对内容进行分词,去掉停用词输出分词结果。所谓停用词就是在上下文中没有特定意义的词,比如这个,那个,你,我,他,土地,标点符号等等。为了更好地分词,我必须过滤掉这些停用词。#数据清洗(切分和去除停用词)defcleanWord(content):#Segmentationseg=pkuseg.pkuseg()text=seg.cut(content)#读取停用词stopwords=[]withopen("stopwords/哈尔滨工业大学stopUsevocabulary.txt",encoding="utf-8")asf:stopwords=f.read()new_text=[]#Removestopwordsforwintext:ifwnotinstopwords:new_text.append(w)returnnew_text执行结果如下:here我提两点,为什么分词工具用的是pkuseg而不是jieba?pkuseg是北京大学推出的分词工具。官方地址是:https://github.com/lancopku/pkuseg-python它的README说它是中文分词工具中最有效的。为什么要用哈尔滨工业大学的停用词表?停用词列表下载地址为:https://github.com/YueYongDev/stopwords以下是几个常用停用词的对比:参考资料:关勤、邓三红、王浩。中文文本聚类常用停用词比较研究[J].数据分析与知识发现,2006,1(3).停用词对比研究:https://github.com/YueYongDev/stopwordsDataStatistics说是数据统计,其实没什么好统计的。这里简化一下,就是统计每个词的词频,然后输出词频最高的15个词:#数据排序(统计词频)defstatisticalData(text):#统计每个词的词频counter=counter(text)#输出词频最高的15个词pprint.pprint(counter.most_common(15))打印结果如下:他真是一个最好的“好演员”,能把角色活灵活现,甚至肚子里没有存货,他还用自己的演技给自己树立了一个“学霸”的角色,人物形象如此丰满,这或许就是创作的艺术吧!文章中谈得最多的就是生活、角色、性格、个性这些词。这些都是好演员的精神。如果我们把这些词做成词云,效果可能会更好。生成词云生成词云我使用的是wordcloud库,使用非常简单,网上教程也很多。这里需要说明的是:为了防止出现中文乱码,需要配置参数font_path。中文字体可以从系统中选择,也可以在网上找。这里推荐一个免费的中文字体下载网站:http://www.lvdoutang.com/zh/0/0/1/1.html下面是生成词云代码:#数据可视化(生成词云)defdrawWordCloud(text,file_name):wl_space_split="".join(text)#设置词云背景图b_mask=plt.imread('assets/img/bg.jpg')#设置词云字体(不设置则不能中文displayed)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称为逆文档频率。不明白的可以看看阮一峰老师的解释。TFIDF的解释也很透彻。https://www.ruanyifeng.com/blog/2013/03/tf-idf.htmlSklearnScikit-Learn,也简称为Sklearn,是机器学习领域最著名的Python模块之一。官方地址为:https://github。com/scikit-learn/scikit-learn包含多种机器学习方法。下面我们使用Sklearn中的TfidfVectorizer模块来计算两篇文章的相似度。代码如下:#计算文本相似度defcalculateSimilarity(s1,s2):defadd_space(s):return''.join(cleanWord(s))#在单词之间添加空格s1,s2=add_space(s1),add_space(s2))#转换为TF矩阵cv=TfidfVectorizer(tokenizer=lambdas:s.split())corpus=[s1,s2]vectors=cv.fit_transform(corpus).toarray()#计算TF系数returnnp.dot(vectors[0],vectors[1])/(norm(vectors[0])*norm(vectors[1]))除了Sklearn,我们还可以使用gensim调用一些模型进行计算。考虑到文章的篇幅,还是要靠读者自己收集信息来实现。我们把翟的论文和陈的论文传入这个函数后,输出的结果是:两篇论文的相似度是:0.7074857881770839其实我对这个结果还是挺意外的。只知道“李鬼”长得很像,没想到相似度高达70.7%。当然,作为弟弟,翟家的事跟吴秀波的事比起来根本算不上什么。