2017,那些出現在日記中的人:簡單的文本挖掘

一、前言

終於做出這張圖時,我突然有點感慨,這就是2017年我的日記中提到過或記錄過的一個個人名,當然為避免引起不必要的麻煩,隱去了許多親人朋友的名字。想到一輩子說長也長,說短的話,幾十張詞雲圖也就概括了那些人與事。曾經朝夕相處、相識相知的人,或許早已漸行漸遠了,二三老友談起故人往事才發現死活想不起某某同學姓甚名誰,遺忘總是發生在不知不覺間,有時候連自己都不知道究竟忘記了什麼。

童年、少年、青年時期的人與事,忘卻了總是難免,然而眼下的一載春秋里又何嘗不是「事如春夢了無痕」呢?2018年已經過去了一周,很多人該總結、該回顧2017年的想來也都總結回顧了,沒有總結習慣的就繼續過自己新的一年。往常也沒有寫年末小結的我,或許是聽許飛《父親寫的散文詩》聽得「熱淚盈眶」,「這是我父親 / 日記里的文字 / 這是他的生命 留下 / 留下來的散文詩」,這幾句歌詞讓我想到多年之後要是我的孩子去了解我的過去,雖然沒有什麼散文詩可言,但也希望借著回顧之際能總結和留下點什麼......

胡言亂語了許多,其實打算研究日記里出現的人名,也是因為想學習和應用一些文本分析和挖掘的方法,根據看過的文章來實踐操作下,而日記是現成的語料庫,也是最熟悉不過的文本,因此有了這樣一篇文章。

二、提取人名

首先為了獲取文本中出現的人名,根據這篇文章《從天龍八部小說衍生出的google語義分析與gephi社交網路》里提供的思路,用jieba中文分詞Python庫嘗試從日記文本中提取出TF/IDF權重最大的、TOP5000名詞。

由輸出結果可知,在莊子、賈寶玉、王小波等人名準確提取出來的同時,夾雜著許多其他事物的名詞,需要剔除。由於還不知道有什麼便捷高效的方法可以實現提取人名,本次先根據文本中人名出現的次數,劃定一個下限,再手動篩選出符合要求的姓名,接著將TF/IDF權重同時增大100或1000倍,以便用HTML5 Word Cloud實現漂亮的詞雲圖。

上圖便是我的日記里最具代表性的人物畫像了。有大師大家魯迅、葉嘉瑩等,有知乎用戶張佳瑋、路人甲,有喜歡的歌手山口百惠、安溥,有AI大佬吳恩達、李飛飛,也有一些熱門綜藝、熱點事件里的人物等等。每個人因其不同的緣故而被記錄,並得以拼湊出這一年度印記。

三、提取人物關係

除了從文本中提取人名,本次還基於共現提取出日記中人物的網路關係,並運用gephi進行可視化。

引用一段對共現網路基本原理的介紹:「實體間的共現是一種基於統計的信息提取。關係緊密的人物往往會在文本中多段內同時出現,可以通過識別文本中已確定的實體(人名),計算不同實體共同出現的次數和比率。當比率大於某一閾值,我們認為兩個實體間存在某種聯繫。」

實現的代碼可參考提取《釜山行》人物關係的代碼,可根據自己的需求進行更改。

運用到自己的文本上,並生成後續用於gephi可視化的「節點」和「邊」文件,同樣需要剔除非人名的數據。節點格式如下:

邊格式如下:

將數據導入gephi軟體中:

調整節點的大小和顏色,並運行布局演算法:

加上標籤,比詞雲圖能看到更多人物的姓名:

一頓瞎操作,聚焦到文本中人物關係比較接近與頻繁的部分,主要的節點有魯迅、葉嘉瑩、黛玉等等:

整個網路中最重要的一條脈絡如下圖所示:

在大部分較常規的聯繫之中,存在著「賀龍」與「賀知章」這一蠻奇特的關聯,思索了幾秒後,才想起曾有人詢問取名、賜名的一樁舊事,倒也有趣,不過說來至今不知道賀姓名人還有哪些,大看到的小夥伴可以說說,並試著為賀姓小男孩取個你覺得不錯的名字唄?

人物關係網路的背後是2017年一點一滴的記憶,有許多不足為外人道爾卻自得其樂的地方,有許多自己都記不得卻藉此想起的人和事。

我是個記性很差的人,平日里就記不得幾天前乃至昨天的許多事,日記也寫了兩三年,每每回頭看當初的人與事,就倍感慶幸曾經的勤奮下筆,而遇上空白的時期,或一筆帶過的歲月,也會很惘然,彷彿人生被抽離了一部分,只剩下白茫茫的一片。借用沈復在《浮生六記》開篇的話:「東坡云:『事如春夢了無痕』,苟不記之筆墨,未免有辜彼蒼之厚。」我雖沒有得天獨厚的一些大事可記述,但那種「事如春夢了無痕」的遺憾和惘然卻感同身受,這也是我曾安利他人寫寫日記的理由,當然因人而異,不可強求。

本文雖然只是簡單的文本挖掘,沒有深入的研究,但對自己來說,還是蠻新穎的探索過程,也藉此粗淺的回顧下自己2017的一些人與事,最後再留個謎語,按下圖打一個綜藝節目吧,歡迎評論猜謎。

四、相關閱讀

1、jieba中文分詞庫-github網址

2、《從天龍八部小說衍生出的google語義分析與gephi社交網路》

3、Text Cooccurrence Example(文本共現網路提取示例)

4、《Python基於共現提取《釜山行》人物關係》


推薦閱讀:

Kaggle HousePrice : LB 0.11666(前15%), 用搭積木的方式(2.實踐-特徵工程部分)
關於如何學習編程,這裡有兩個故事
學 Python 發現學一門編程語言很難,有哪些學好編程的方法或技巧?

TAG:Python | 文本挖掘 | 2017年度盘点 |