博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NLTK中文语料库sinica_treebank
阅读量:4678 次
发布时间:2019-06-09

本文共 2743 字,大约阅读时间需要 9 分钟。

(博主亲自录制视频教程)

 

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中文玩法就这些了,还是挺不错的。

转载于:https://www.cnblogs.com/webRobot/p/6047684.html

你可能感兴趣的文章
关于手机端IOS系统微信中虚拟键盘遮挡input输入框问题的解决方案 草稿
查看>>
Python--小功能应用
查看>>
[linux-内核][转]内核日志及printk结构浅析
查看>>
程序猿的爱情-2012-01-22
查看>>
CentOS7.2 安装iptables
查看>>
网络是怎样连接的—1.浏览器生成消息
查看>>
codevs1430 素数判定
查看>>
2017年6月2号课堂笔记
查看>>
poj1015【DP.......无奈了】
查看>>
C#性能优化的一些技巧
查看>>
ios坐标位置转换
查看>>
C#中常用到的时间函数(天数差、星期几等)
查看>>
如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名
查看>>
改进delphi中的RoundTo函数
查看>>
Microsoft Visual SourceSafe使用经验
查看>>
威尔逊定理及证明
查看>>
[LeetCode] Peeking Iterator
查看>>
Understanding Unix/Linux Programming-用户程序play_again4.c
查看>>
算法总结
查看>>
WPF中使用USERCONTROL
查看>>