作者 | 雇个城管打天下,理工男一枚。南京大学软件工程系硕士,一个还在做着拥有十万读者梦的互联网新人,或许一篇文章无法获得你的关注,但突然梦想觉醒的我还在努力着!

来源 | 01二进制(ID:gh_d1999add1857)

都说今年的瓜特别多(葫芦娃的那种),但是过年期间最甜的我想非翟天临的“知网是什么?”莫属了吧。

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

我平常不怎么关注娱乐圈,所以刚开始并没有把这件事放在心上,直到网上爆出翟的论文大篇幅抄袭的消息,我才对这位娱乐圈博士的文章起了兴趣。目前,翟天临已退出北大博士后科研流动站,博士学位也已经被撤销。接下来就让我们以一个coder的角度来硬核分析下翟的论文吧。

实验环境

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

  • MacOS 10.14.3

  • Python 3.6.8(Anaconda)

  • Visual Studio Code

  • 使用的包有:

  • pkuseg(分词)

  • matplotlib(绘图)

  • wordcloud(词云)

  • numpy(数学计算)

  • sklearn(机器学习)

数据获取

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

数据清理

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

1# 数据获取(从文件中读取)
2
3def readFile(file_path):
4
5    content = []
6
7    with open(file_path, encoding="utf-8") as f:
8
9        content = f.read()
10
11    return content

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

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

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

1# 数据清理(分词和去掉停用词)
2
3def cleanWord(content):
4
5    # 分词
6
7    seg = pkuseg.pkuseg()
8
9    text = seg.cut(content)
10
11
12
13    # 读取停用词
14
15    stopwords = []
16
17    with open("stopwords/哈工大停用词表.txt", encoding="utf-8") as f:
18
19        stopwords = f.read()
20
21
22
23    new_text = []
24
25    # 去掉停用词
26
27    for w in text:
28
29        if w not in stopwords:
30
31            new_text.append(w)
32
33
34
35    return new_text

执行结果:

这里我提两点:

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

pkuseg是北大推出的一个分词工具,官方地址是:https://github.com/lancopku/pkuseg-python,他的README中说他是目前中文分词工具中效果最好的。

2、为什么用哈工大的停用词表?

停用词表的下载地址:https://github.com/YueYongDev/stopwords。

以下是几个常用停用词表的对比:

  停用词表 效果较好的文本种类

哈工大停用词表

文献期刊类文本

百度停用词表

新闻报道类文本

四川大学停用词表

邮件文献类文本


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

数据统计

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

1# 数据整理(统计词频)
2
3def statisticalData(text):
4
5    # 统计每个词的词频
6
7    counter = Counter(text)
8
9    # 输出词频最高的15个单词
10
11    pprint.pprint(counter.most_common(15))

打印的结果:

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

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

生成词云

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

下面是生成词云的代码:

1# 数据可视化(生成词云)
2
3def drawWordCloud(text, file_name):
4
5    wl_space_split = " ".join(text)
6
7
8
9    # 设置词云背景图
10
11    b_mask = plt.imread('assets/img/bg.jpg')
12
13    # 设置词云字体(若不设置则无法显示中文)
14
15    font_path = 'assets/font/FZZhuoYTJ.ttf'
16
17    # 进行词云的基本设置(背景色,字体路径,背景图片,词间距)
18
19    wc = WordCloud(background_color="white",font_path=font_path, mask=b_mask, margin=5)
20
21    # 生成词云
22
23    wc.generate(wl_space_split)
24
25    # 显示词云
26
27    plt.imshow(wc)
28
29    plt.axis("off")
30
31    plt.show()
32
33    # 将词云图保存到本地
34
35    path = os.getcwd()+'/output/'
36
37    wc.to_file(path+file_name)

真假李逵(文章对比)

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

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

文章相似度比较

TF-IDF

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

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

Sklearn


scikit-learn 也简称 sklearn, 是机器学习领域当中最知名的 Python 模块之一,官方地址为:https://github.com/scikit-learn/scikit-learn,其包含了很多种机器学习的方式,下面我们借助于 Sklearn 中的模块TfidfVectorizer来计算两篇文章之间的相似度,代码如下:

 1# 计算文本相似度 2 3def calculateSimilarity(s1, s2): 4 5    def add_space(s): 6 7            return ' '.join(cleanWord(s)) 8 91011    # 将字中间加入空格1213    s1, s2 = add_space(s1), add_space(s2)1415    # 转化为TF矩阵1617    cv = TfidfVectorizer(tokenizer=lambda s: s.split())1819    corpus = [s1, s2]2021    vectors = cv.fit_transform(corpus).toarray()2223    # 计算TF系数2425    return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) *

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

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

  1. 两篇文章的相似度为:

  2. 0.7074857881770839

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

福利

公众号后台回复:2018Python,获取2018Python开源项目Top100整理资料!扫码添加小助手微信,回复:1,加入Python技术交流群。


推荐阅读:

  • Java帝国对Python的渗透能成功吗?

  • 用Python分析《工作细胞》的一万多条评论后,非漫迷也要入番了!

  • 7种常见的机器学习算法的Python实现(附完整代码)

  • 2018 Python开发者大调查:Python和JavaScript最配?

  • 优秀开发者必备技能包:Python调试器

  • 十大经典排序算法动画与解析,看我就够了!(附代码)

  • 一键免费自动AI抠图,效果连PS大哥也点赞!

  • 抠图新法:试试Python+scikit-image

  • 数据分析:《流浪地球》逆袭《新喜剧之王》

Python大本营“号内搜”功能全新升级

搜索功能更强大,请在公众号菜单栏体验

我用Python分析了翟天临的论文,学术还是要认真做啊相关推荐

  1. 我用Python分析了翟天临的论文,学术还是要认真做啊!

    完整源码可在本公众号或者公众号「01二进制」后台回复:「翟天临」获取 昨天是元宵节,在南京,元宵节一到也意味着这个年过完了,我们也该回到自己的工作岗位上了.都说今年的瓜特别多(葫芦娃的那种),但是过年 ...

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

    完整源码可在公众号:「01二进制」后台回复:「翟天临」获取 昨天是元宵节,在南京,元宵节一到也意味着这个年过完了,我们也该回到自己的工作岗位上了.都说今年的瓜特别多(葫芦娃的那种),但是过年期间最甜的 ...

  3. 用python分析了30万条微博评论,毕业生与翟天临的爱恨情仇

    我将带着北京电影学院表演系的精神伴随我一生的演艺事业! --翟天临硕士论文致谢辞 2019年5月27日凌晨,翟天临又上了热搜. 这次的热搜绝对不是买的,因为实时搜索微博"翟天临"广 ...

  4. python歌词分析_用Python分析周杰伦6.5W字的歌词,原来他是这样的人

    原标题:用Python分析周杰伦6.5W字的歌词,原来他是这样的人 雷锋网按:本文作者冬鑫,原文载于作者,雷锋网已获授权.文中所有链接详见文末"阅读原文". 前一段时间分析民谣歌词 ...

  5. 运用Python分析公募基金【量化投资】

    运用Python分析公募基金 1.背景 学校财富管理课程的期末论文是分析中国各种投资标的的收益,笔者分配到的研究的细分类别为:通过大集合转公募基金的方式,成立的公募基金的收益分析.Python在量化投 ...

  6. Python分析离散心率信号(下)

    Python分析离散心率信号(下) 如何使用动态阈值,信号过滤和离群值检测来改善峰值检测. 一些理论和背景 到目前为止,一直在研究如何分析心率信号并从中提取最广泛使用的时域和频域度量.但是,使用的信号 ...

  7. Python分析离散心率信号(中)

    Python分析离散心率信号(中) 一些理论和背景 心率信号不仅包含有关心脏的信息,还包含有关呼吸,短期血压调节,体温调节和荷尔蒙血压调节(长期)的信息.也(尽管不总是始终如一)与精神努力相关联,这并 ...

  8. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  9. 盛夏海边,用Python分析青岛哪些景点性价比高

    作者 | 志斌 来源 | 志斌的python笔记 头图 | 付费下载于 IC Photo 在经过几年的热潮之后,人工智能AI算法已经在各行各业广泛使用了.例如在工业制造中,利用人工智能监测仪器仪表.人 ...

最新文章

  1. 【复盘】如何培养小朋友的编程能力?
  2. win10+anaconda+cuda配置dlib,使用GPU对dlib的深度学习算法进行加速(以人脸检测为例)...
  3. 记一次PowerShell免杀实战
  4. 数据库连接池的选择及其开发配置
  5. 项目Beta冲刺(团队) --1/7
  6. 快速傅里叶变换(FFT)的C#实现及详细注释
  7. 余额 微信钱包图片_微信红包技巧:关闭这个功能,不上传身份证也能正常使用!...
  8. 重启手机出现机器人加一个叹号_印度科幻脑洞高能!《宝莱坞机器人2.0》内地定档...
  9. flask-mail异步发送邮件_Spring Boot与异步任务、定时任务、邮件任务
  10. mac 常用的开发工具
  11. Window 远程连接 Ubuntu 系统
  12. 类似c语言sizeof,sizeof()与strlen()在C语言中有什么不同
  13. 计算机统考模拟系统3.0,统考计算机模拟系统操作流程
  14. C2. Skyscrapers (hard version)
  15. 年轻人先实现社会价值,再去实现人生价值
  16. vue腾讯地图h5 定位
  17. mysql经纬度查范围内_sql语句查询经纬度范围
  18. 获取sender名称
  19. html选择弹出列表实例,CSS3制作炫酷的下拉菜单及弹起式选单的实例分享
  20. 人工智能相关论文 2022 accepted papers list

热门文章

  1. 算法 - 求两个自然数的最大公约数(C++)
  2. ODOO实现环境检测机构检测业务管理系统
  3. jmeter前后置处理器
  4. 回溯法 backtrack
  5. Spring 框架更新了一条可能造成 RCE(远程命令执行漏洞)
  6. python图像主色调(主颜色)提取,在hsv空间k均值迭代实现
  7. 国内一些期刊的搞笑审稿
  8. 产品上ref和lot是什么意思_产品上的LOT是什么意思?
  9. 三网话费接口API 文档
  10. linux安装git并配置GitHub账号,本地与GitHub之间进行文件的上传(push)、下载(克隆)、更新