NLTK中文語料庫sinica_treebank


http://www.hankcs.com/program/python/nltk-chinese-corpus-sinica_treebank.html

 

NLTK包含Sinica (中央研究院)提供的繁體中文語料庫,其在Python環境下的顯示有些講究。

NLTK sinica_treebank 顯示中文

在IDLE中如果直接查看的話會顯示十六進制碼:

  1. >>> from nltk.corpus import sinica_treebank
  2. >>> sinica_treebank.words()
  3. ['\xe4\xb8\x80', '\xe5\x8f\x8b\xe6\x83\x85', ...]

如果想在IDLE中查看這些進制碼對應的中文的話,可以:

  1. >>> print '\xe4\xb8\x80'

NLTK中文詞性標注

一個一個手動print太蠢了,一段代碼自動讓它好看起來:

  1. # -*- coding:utf-8 -*-
  2. # Filename: sinica_treebank.py
  3. # Author:hankcs
  4. # Date: 2014-04-08 上午11:44
  5. import nltk
  6. from nltk.corpus import sinica_treebank
  7.  
  8. sinica_text = nltk.Text(sinica_treebank.words())
  9. print sinica_text
  10. for (key, var) in sinica_treebank.tagged_words()[:8]:
  11.     print '%s/%s' % (key, var),

輸出:

  1. <Text: 一 友情 嘉珍 和 我 住在 同一條 巷子...>
  2. 一/Neu 友情/Nad 嘉珍/Nba 和/Caa 我/Nhaa 住在/VC1 同一條/DM 巷子/Nab

NLTK中文句法樹

  1. >>> sinica_treebank.parsed_sents()[15].draw()

真是神奇的Python!

搜索中文文本

在IDLE中不方便調編碼,還是寫進py文件吧:

  1. # -*- coding:utf-8 -*-
  2. # Filename: sinica_treebank.py
  3. # Author:hankcs
  4. # Date: 2014-04-08 上午11:44
  5. import nltk
  6. from nltk.corpus import sinica_treebank
  7.  
  8. sinica_text = nltk.Text(sinica_treebank.words())
  9. print sinica_text.concordance('我')

輸出:

  1. Building index...
  2. Displaying 25 of 724 matches:
  3.                                        住在 同一條 巷子 我們  
  4. �� 一起 回家 有一天 上學      等候   門鈴 
  5. ��鈴  沒有 任何 動靜 正當   離開    突然 傳來 
  6. ��   大聲       媽媽 暈倒  嘉珍 抓起  
  7.   媽媽 暈倒  嘉珍 抓起    急忙     進入
  8.     一樣 這種 情景   嚇壞  怎麼辦 嘉珍 不停 
  9. ��停  哭泣 聲音 有些 顫抖   腦海  頓時 一片 空白 
  10.  怎麼辦     一會兒      爸爸   出差
  11.   出差  嘉珍   眼淚  握住   雙手    
  12. �� 這時 有個 念頭 突然 閃過   眼前      一一
  13.  念頭 突然 閃過   眼前      一一九  救護�
  14.     安慰  不要 著急      不久 救護車  
  15. ��上 救護車 嘉珍 上車     謝謝   幫忙   
  16.     謝謝   幫忙        不用  
  17. ��       不用   因為 我們  好朋友  無�
  18. 員外    並且       悶悶不樂 是不是 進京
  19. ��       不用     只是  一份 心力 而�
  20. ��     不用     只是  一份 心力 而已 以�
  21.  銀子   眼淚  謝謝    知道  怎麼  報答  
  22.    巡撫   不必    不必 回報   快樂  
  23.   不必    不必 回報   快樂  閱讀課  國語�
  24. �� 這一組  讀書 心得 報告  第一個 站起來 發言 我們 
  25. �過   成為 知心  朋友  說完 之後 組長 站起來 補充
  26. 清理 火山灰 而且 欣賞 落日  喜歡 這種 自由自在  生活
  27.     喜歡 虛偽    覺得  王子  正直 最後 
  28. None

這里面的�大概是字體的原因吧,畢竟不是繁體中文系統。本文的原作者指出:

concordance 會出現 � 的原因是因為這個字的被切一半 , 因為 UTF-8 編碼中文要有三個byte ‘xe4xb8x80′ , 出現�� 表示被切成這樣 ‘xe4xb8′, 少一個 byte

茅塞頓開。

控制台亂碼的話可能需要decode成unicode然后在encode成gb編碼:

  1. = "中文"
  2.  
  3. if isinstance(s, unicode):
  4.     # s=u"中文"
  5.     print s.encode('gb2312')
  6. else:
  7.     # s="中文"
  8.     print s.decode('utf-8').encode('gb2312')

NLTK計算中文高頻詞

  1. >>> sinica_fd=nltk.FreqDist(sinica_treebank.words())
  2. >>> top100=sinica_fd.items()[0:100]
  3. >>> for (x,y) in top100:
  4. print x,y
  5.  
  6.  6776
  7.  1482
  8.  1331
  9.  1317
  10.  1190
  11.  759
  12.  724
  13.  688
  14.  627
  15.  612
  16.  580
  17.  542
  18.  526
  19.  467
  20.  417
  21.  404
  22.  389
  23. 我們 384

初步的NLTK中文玩法就這些了,還是挺不錯的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM