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

栏目: Python · 发布时间: 6年前

内容简介:都说今年的瓜特别多(葫芦娃的那种),但是过年期间最甜的我想非翟天临的“知网是什么?”莫属了吧。近期,翟天临因“论文抄袭、学术造假”被推上风口浪尖,甚至连自己参演并准备播出的六部电视剧,也被央视要求全部删减,至此人设彻底崩塌,舆论哗然。

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

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

近期,翟天临因“论文抄袭、学术造假”被推上风口浪尖,甚至连自己参演并准备播出的六部电视剧,也被央视要求全部删减,至此人设彻底崩塌,舆论哗然。

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

我平常不怎么关注娱乐圈,所以刚开始并没有把这件事放在心上,直到网上爆出翟的论文大篇幅抄袭陈坤论文的消息,我才对这位娱乐圈博士的文章起了兴趣。

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

目前北京电影学院已经撤销翟天临博士学位,取消陈浥博士研究生导师资格。

接下来就让我们以一个 Coder 的角度来硬核分析下翟的论文吧。

实验环境

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

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

数据获取

说实话,起初我以为就算翟不知“知网”为何物,“知网”也该收录翟的文章吧,可我在知网搜了好久也没能找到翟的论文,好在我在今日头条上找到了他的文章,保存在 data/zhai.txt 中。

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

说到这,还真要感谢翟天临啊,都是因为他,大家才变得这么有学术精神,开始研究起本科硕士博士论文了。

数据清理

上一节我们已经将他的论文保存到一个 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 

执行结果如下:

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

这里我提两点,为什么分词 工具 用的是 pkuseg 而不是 jieba?pkuseg 是北大推出的一个分词工具。官方地址是:

https://github.com/lancopku/pkuseg-python 

它的 README 中说它是目前中文分词工具中效果最好的。

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

为什么用哈工大的停用词表?停用词表的下载地址在:

https://github.com/YueYongDev/stopwords 

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

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

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

停用词表对比研究:

https://github.com/YueYongDev/stopwords 

数据统计

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

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

打印的结果如下:

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

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

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

生成词云

词云生成这个部分我采用的是 wordcloud 库,使用起来非常简单,网上教程也有很多。

这里需要提一点的就是:为了防止中文乱码情况的发生,需要配置 font_path 这个参数。

中文字体可以选用系统的,也可以网上找,这里我推荐一个免费的中文字体下载的网址:

http://www.lvdoutang.com/zh/0/0/1/1.html 

下面是生成词云的代码:

# 数据可视化(生成词云) 
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) 

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

真假李逵(文章对比)

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

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

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

TF-IDF

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

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

TF-IDF 实际上就是在词频 TF 的基础上再加入 IDF 的信息,IDF 称为逆文档频率。

不了解的可以看下阮一峰老师的讲解,里面对 TFIDF 的讲解也是十分透彻的。

https://www.ruanyifeng.com/blog/2013/03/tf-idf.html 

Sklearn

Scikit-Learn 也简称 Sklearn,是机器学习领域当中最知名的 Python 模块之一,官方地址为:

https://github.com/scikit-learn/scikit-learn 

其包含了很多种机器学习的方式,下面我们借助于 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%。

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

当然,作为弟弟,翟的这个事和吴秀波的事比起来,那都不是个事。

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Visual Thinking

Visual Thinking

Colin Ware / Morgan Kaufmann / 2008-4-18 / USD 49.95

Increasingly, designers need to present information in ways that aid their audiences thinking process. Fortunately, results from the relatively new science of human visual perception provide valuable ......一起来看看 《Visual Thinking》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具