python紅樓夢詞頻統計_用 Python 分析《紅樓夢》(2)-阿里云開發者社區

6 詞頻統計

完成分詞以后,詞頻統計就非常簡單了。我們只需要根據分詞結果把片段切分開,去掉長度為一的片段(也就是單字),然后數一下每一種片段的個數就可以了。

這是出現次數排名前 20 的單詞:

(括號內為頻數)

可以跟之前只統計出現次數,不考慮切分問題的排名做個對比:

(括號內為頻數)

通過分詞后的詞頻,我們發現《紅樓夢》中的人物戲份由多到少依次是寶玉、鳳姐、賈母、襲人、黛玉、王夫人和寶釵。然而,這個排名是有問題的,因為”林黛玉”這個詞的出現次數還有 267 次,需要加到黛玉的戲份里,所以其實黛玉的戲份比襲人多。同理,“老太太”一般是指賈母,所以賈母的戲份加起來應該比鳳姐多。正確的排名應該是寶玉、賈母、鳳姐、黛玉、襲人、王夫人和寶釵。

此外,我們還發現《紅樓夢》中的人物很愛笑,因為除了人名以外出現次數最多的單詞就是“笑道” : )

我把完整的詞頻表做成了一個網頁,感興趣的話可以去看一下:紅樓詞表 第二版

最后,我隨機選擇了詞頻表中的 200 項條目,用來估計其中有多少是真正的單詞。其中有 82 條是單詞:

而 118 條不是單詞:

也就是說,單詞的正確率只有 41 %。這比字典的準確率還低,并沒有因為采用了分詞算法而提高了正確率。不過這也可以理解,因為生成字典的時候我只考慮了出現次數大于 5 的片段,而分詞的時候有些單詞只出現了一次,所以難度確實應該更大一些。

詞頻表中總計有 3.99 萬個條目。根據估算的詞頻表中正確單詞的比例,我估計《紅樓夢》的詞匯量大約是 1.6 萬。有人用其他程序估計《紅樓夢》的詞匯量是 0.45 萬(http://bbs.creaders.net/politics/bbsviewer.php?trd_id=344894),不過作者沒有描述詳細的統計方法,所以我對其結果非常懷疑,因為《紅樓夢》中的單字就有 0.35 萬種了。

7 篩選特征詞

終于做完了分詞,又離目標靠近了一大步。現在,我可以用之前看到的那篇文章里提到的 PCA 算法來分析章回之間的差異了。不過在此之前,我想先反思一下,到底應該用哪些詞的詞頻來進行分析?

在很多用 PCA 分析《紅樓夢》的博文里,大家都是用出現頻率最高的詞來分析的。然而問題是,萬一頻率最高的詞是和情節變化相關的呢?為了剔除情節變化的影響,我決定選出詞頻隨情節變化最小的單詞來作為每一章的特征。而我衡量詞頻變化的方法就是統計單詞在每一回的詞頻,然后計算標準方差。為了消除單詞的常用程度對標準方差的影響,我把標準方差除以該單詞在每一回的平均頻數,得到修正后的方差,然后利用這個標準來篩選特征詞。

按照這個標準,與情節最無關的 20 個詞是:

(括號內為修正后的方差)

有趣的是,處在排名末尾的詞,也就是詞頻變化最大的詞,大部分都是人名:

可見這個篩選方法確實能去掉我們不想要的特征詞。

最終,我選擇了詞頻變化最小的 50 個詞作為特征,每個詞的修正后標準方差都小于 0.85。這 50 個詞如下:

8 主成份分析(PCA)

理論上,有了特征之后,我們就可以比較各個章節的相似性了。然而問題是,現在我們有 50 個特征,也就是說現在的數據空間是 50 維的,這對于想象四維空間都難的人類來說是很難可視化的。對于高維數據的可視化問題來說,PCA 是一個很好用的數學工具。

9.1 何謂是主成份分析

因為高維的數據空間很難想象,所以我們可以先想象一下低維的情況。比如說,假設下圖中的每個點都是一個數據,橫坐標和縱坐標分別代表兩個特征的值:

現在,如果我們讓 PCA 程序把這兩個特征壓縮成一個特征的話,算法就會尋找一條直線,使得數據點都投影到這條直線上后損失的信息最少(如果投影不好理解的話,可以想象用兩塊平行于直線的板子把數據點都擠壓到一條線上)。在這個例子中,這條線損失信息最少的線就是圖中較長的那個箭頭。這樣,如果我們知道了一個數據點在直線上投影的位置,我們就能大致知道數據點在壓縮之前的二維空間的位置了(比如是在左上角還是右下角)。

以上是把二維數據空間壓縮到一維的情況。三維壓縮到二維的情況也是類似的:尋找一個二維平面,使得數據點投影到平面后損失的信息最少,然后把所有數據點投影到這個平面上去。三維壓縮到一維就是把尋找平面改成尋找直線。更高維度的情況以此類推,雖然難以想象,但是在數學上是一樣的。

至于算法如何找到損失信息最少的二維平面(或者直線、三維平面等等),這會涉及到一些數學知識,感興趣的同學可以去查找一下相關的數學公式和證明。這里只要把這個算法當成一個黑箱就可以了。

9.2 重大發現?

現在我們可以利用 PCA,把五十個詞的詞頻所構成的五十個維度壓縮到二維平面上了。我把壓縮后的數據點畫出來,發現是這個樣子的:

(圖中每個圓圈代表一個回目。圓圈內是回目編號,從 1 開始計數。紅色圓圈是 1-40 回,綠色圓圈是 41-80回,藍色圓圈是 81-120 回。)

80 回以后的內容(藍色)大部分都集中在左下角的一條狹長的區域內,很明顯地和其他章回區分開來了!莫非《紅樓夢》的最后 40 回真的不是同一個作者寫的?!

別著急,分析還沒結束。PCA 的一個很重要的優點就是,它的分析結果具有很強的可解釋性,因為我們可以知道每一個原始特征在壓縮后的特征(或者說成分)中的權重。從上圖中可以看到,后 40 回的主要區別在于成分二(component 2)的數值。因此我們可以看一看每一個詞的詞頻在成分 2 中的權重排名:

(括號內為權重)

我發現,“笑道”這個詞不僅是除了人名以外出現次數最多的單詞,而且在 PCA 結果中的權重也異常地高(0.88),甚至超過了“寶玉”的權重的絕對值(0.31)!為了搞明白這個詞為什么有這么大的權重,我把“笑道”的詞頻變化畫了出來:

(圖中橫坐標是章回編號,縱坐標是“笑道”的詞頻)

可以發現,“笑道”的詞頻是先增加再減少的,這不禁讓我聯想到了賈府興衰的過程。莫非“笑道”的詞頻和賈府的發展狀況有關?有趣的是,“笑道”的詞頻頂峰出現在第 50 回左右,而有些人從劇情的角度分析認為賈府的鼎盛時期開始于第 48、49 回,恰好重合:

《紅樓夢》之“釵黛合一”帶來大觀園鼎盛風之子9881198198新浪博客

[轉載]白坤峰講紅樓夢(172)賈府鼎盛:該來的都來了史鼎說紅樓新浪博客

也許“笑道”這一看似平常的詞匯確實側面反應了賈府的興衰史呢。雖然因果關系有待考證,不過想想也有一點道理,畢竟只有日子過的好的時候人們才會愛笑。

原文發布時間為:2017-09-22

本文作者:樓宇

本文來自云棲社區合作伙伴“Python中文社區”,了解相關信息可以關注“Python中文社區”微信公眾號

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

清華大學《操作系統》(二十):死鎖和進程通信

一、死鎖 死鎖:一組阻塞的進程(兩個或多個),持有一種資源,等待獲取另一個進程所占有的資源,而導致誰都無法執行。 可重復使用的資源: 在一個時間只能一個進程使用,且不能被刪除。…

python操作redis實例_Java,php,Python連接并操作redis實例

1、Java連接并操作redis在Eclipse里新建一個java project,導入jedis-*.jar包。示例代碼,其他對應的操作類型見:http://my.oschina.net/u/2391658/blog/705069import redis.clients.jedis.Jedis;//示例代碼public class RedisTest {public sta…

java: cannot execute binary file 如果遇到這個錯,一般是操作系統位數出問題了。

[roottestserver usr]# java/jdk1.6.0_12/bin/java-bash: java/jdk1.6.0_12/bin/java: cannot execute binary file后來檢驗,檢查了一段時間,沒有問題,最后有高人提示經驗證,是64位版本移到32位上。本文轉自 jxwpx 51CTO博客&…

div 自適應高度

自適應高度 ,設置最小高度;通常情況下,沒有設置高度,div默認自適應高度且無最低高度 1 div{ 2 _height:200px; /* css 注解: 僅IE6設別此屬性,假定最低高度是200px ,設置高度200px&#xff0c…

GCC使用詳情

1.前言 GCC編譯器的手冊(GCC MANUAL)的英文版已經非常全面,并且結構也非常完善了,只是一直都沒有中文的版本,我這次閱讀了GCC編譯器的主要內容,對手冊的內容進行了結構性的了解,認為有必要對這次閱讀的內容進行整理&am…

清華大學《操作系統》(二十二):文件系統

文件系統和文件: 文件系統是操作系統中管理持久性數據的子系統,提供數據存儲和訪問功能,組織、檢索、讀寫訪問數據。文件是具有符號名,由字節序列構成的數據項集合,是文件系統的基本數據單位,文件名是文件…

卡巴綠殺6 By Moshow魔手

卡巴綠殺6 By Moshow魔手 Kaspersky Anti-Virus Move-edition 6 (-_-b汗Move Edition...)【這是卡巴斯基綠色移動版本推薦用于u盤】By Moshow魔手 [url]Http://Hi.baidu.com/MoshowGame[/url]祝o(∩_∩)o...天下無毒)擁有全球最全的病毒庫)擁有最快的全球剿毒反應速度) 基于穩定…

python將字符串寫入csv_用Python將字符串值寫入CSV文件

我有一個很大的數據集,在第二列有句子和他們的情緒狀態。我開發了代碼來將它們讀作numpy數組。我需要的是,如果一個句子的情感是中性的,那么返回為真,否則返回假。if-else條件返回的每個結果都應寫入CSV文件。但是這里它只在CSV文…

加載靜態文件,父模板的繼承和擴展

用url_for加載靜態文件<script src"{{ url_for(static,filenamejs/login.js) }}"></script>flask 從static文件夾開始尋找可用于加載css, js, image文件繼承和擴展把一些公共的代碼放在父模板中&#xff0c;避免每個模板寫同樣的內容。base.html子模板繼…

清華大學《操作系統》(二十三):I/O子系統

常見設備接口類型&#xff1a; 1、字符設備&#xff1a;鍵盤鼠標、串口 a.以字節為單位順序訪問 b.I/O命令通常使用文件訪問接口和語義 2、塊設備&#xff1a;磁盤、磁帶、光驅 a.均勻的數據塊訪問 b.I/O命令通常使用文件系統接口&#xff0c;也可以使用內存映射訪問 3、網絡…

百度地圖 Android SDK - 個性化地圖

什么是百度個性化地圖Android SDK&#xff1f; 百度個性化地圖Android SDK是一套基于Android 2.2及以上版本號設備的應用程序接口&#xff0c;您能夠通過該套接口實現主要的地圖功能&#xff0c;而且能夠定制地圖樣式&#xff0c;實現個性化地圖。 該接口提供下面功能&#xff…

mysql讀寫分離_MySQL基于amoeba讀寫分離實驗

主從復制只是一個同步數據的方式讀寫分離&#xff1a;只在主的上面寫&#xff0c;只在從的上面讀讀寫分離方案&#xff1a;【1】基于程序代碼內部 (生產環境中應用最廣泛&#xff0c;性能最好&#xff0c;需要開發人員來實現)【2】基于中間代理層的實現amoeda 是阿里巴巴使用的…

Django models模型

Django models模型 一. 所謂Django models模型&#xff0c;是指的對數據庫的抽象模型&#xff0c;models在英文中的意思是模型&#xff0c;模板的意思&#xff0c;在這里的意思是通過models&#xff0c;將數據庫的借口抽象成python自己的一個類。然后在python Django框架其他代…

Page.FindControl方法找不到指定控件的原因

在ASP.NET 2.0中&#xff0c;引入了MasterPage的機制&#xff0c;在當前頁使用MasterPage的情況下&#xff0c;放在 ContentPlaceholder1這樣的內容頁的控件無法用Page.FindControl來查找&#xff0c;原因何在&#xff1f;MSDN對FindControl的解釋&#xff1a;在當前的命名容器…

ATT匯編語言與GCC內嵌匯編簡介

AT&T匯編語言與GCC內嵌匯編簡介 1 AT&T 與INTEL的匯編語言語法的區別 1.1大小寫 1.2操作數賦值方向 1.3前綴 1.4間接尋址語法 1.5后綴 1.6指令 2 GCC內嵌匯編 2.1簡介 2.2內嵌匯編舉例 2.3語法 2.3.1匯編語句模板 2.3.2輸出部分 2.3.3輸入部分 2.3.4限制字符 2.3.5破…

Python內存管理以及垃圾回收機制

垃圾回收&#xff1a;用通俗點的語言解釋就是內存管理和垃圾回收的過程. 大管家refchain 在Python的C源碼中有一個名為refchain的環狀雙向鏈表&#xff0c;這個鏈表就比較厲害了&#xff0c;因為Python程序中一旦創建對象都會把這個對象添加到refchain這個鏈表中。也就是說他…

pythonfillcolor_openpyxl 填充顏色(單元格)

如果需要填充某個單元格的顏色需要3步&#xff1a;# 1-加載庫文件from openpyxl import Workbookfrom openpyxl.styles import PatternFill#2-新建一個工作簿wb Workbook()ws wb.active#隨便賦個值d4 ws[D4]d4 43d4.value#3-設置樣式&#xff0c;并且加載到對應單元格fill …

Mint-ui中loadmore(上拉加載下拉刷新)組件在ios中滑動會觸發點擊事件的解決方法...

bug說明&#xff1a; Mint-ui中loadmore(上拉加載下拉刷新)組件 在 使用fastclick的情況下 &#xff0c;在ios設備中滑動會觸發點擊事件&#xff1b; 解決方法&#xff1a; 我是按需引入&#xff0c;去項目中找到loadmore下的index.js&#xff0c;全部引入的要找mint下面mint-u…

【Ext.Net學習筆記】01:在ASP.NET WebForm中使用Ext.Net

Ext.NET是基于跨瀏覽器的ExtJS庫和.NET Framework的一套支持ASP.NET AJAX的開源Web控件&#xff0c;包含有豐富的Ajax運用&#xff0c;其前身是Coolite。 下載地址&#xff1a;http://www.ext.net/download/ 示例地址&#xff1a;http://examples.ext.net/ 1.首先下載Ext.Net,地…

面試之操作系統

基本特征 1. 并發 并發是指宏觀上在一段時間內能同時運行多個程序&#xff0c;而并行則指同一時刻能運行多個指令。并行需要硬件支持&#xff0c;如多流水線、多核處理器或者分布式計算系統。操作系統通過引入進程和線程&#xff0c;使得程序能夠并發運行。 2. 共享 共享是指…