李鬼見李逵——我用翟天臨的論文做了分析

僱個城管打天下發表於2019-02-21

完整原始碼可在公眾號:「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%。當然,作為弟弟,翟的這個事和吳秀波的事比起來,那都不是個事。?

李鬼見李逵——我用翟天臨的論文做了分析

完整原始碼可在公眾號:「01二進位制」後臺回覆:「翟天臨」獲取

李鬼見李逵——我用翟天臨的論文做了分析

相關文章