使用NLTK对中文文本进行简单分析

本文会介绍nltk自带中文语料库的使用,用nltk分析自己中文语料的方法,以及在应用过程中python3.x与python2代码不同的问题。



一  nltk自带中文语料库的使用


NLTK包含Sinica(中央研究研究)提供的繁体中文语料库,用python导入,本文中使用python3.5版本


>>> from nltk.corpus import sinica_treebank
>>> import nltk

先导入nltk和sinica_treebank,输入sinica_treebank.words()即可以查看里面的词汇
>>> sinica_treebank.words()



['一', '友情', '嘉珍', '和', '我', '住在', '同一條', '巷子', '我們', ...]

concordacne的作用是找某个字的上下文,下面的代码就是找 '我' 的上下文

>>> sinica_text=nltk.Text(sinica_treebank.words())
>>> sinica_text.concordance('我')

还有一些其他用法,得到博客中有很好的归纳,就不一一举例

这里多介绍一下frequency distribution,这个方法用来计算字词在语料库中出现的频率

>>> sinica_fd=nltk.FreqDist(sinica_treebank.words())
>>> top100=sinica_fd.items()[0:100]
>>> for (x,y) in top100:
	print x,y

这是前辈的代码,但是在python3.5的版本运行不了,为了适应3.5版本改为



>>> sinica_fd=nltk.FreqDist(sinica_treebank.words())
>>> v = sorted(sinica_fd.items(), key=lambda e:e[1], reverse=True)
>>> top100=list(v)[0:100]
>>> print(top100)
[('的', 6776), ('、', 1482), ('在', 1331), ('是', 1317), ('了', 1190), ('有', 759), ('我', 724), ('他', 688), ('就', 627), ('上', 612), ('和', 580), ('也', 542), ('不', 526), ('人', 467), ('都', 417), ('與', 404), ('著', 389), ('我們', 384), ('你', 356), ('中', 350), ('大', 348), ('來', 346), ('一', 320), ('要', 319), ('說', 319), ('裡', 318), ('及', 310), ('對', 309), ('而', 306), ('到', 292), ('去', 288), ('很', 271), ('一個', 271), ('把', 266), ('之', 265), ('等', 257), ('以', 255), ('將', 253), ('小', 252), ('為', 243), ('會', 239), ('又', 239), ('最', 239), ('得', 210), ('好', 207), ('還', 198), ('能', 188), ('這', 183), ('才', 171), ('被', 170), ('看', 167), ('從', 163), ('所', 163), ('她', 162), ('台灣', 161), ('他們', 152), ('自己', 150), ('做', 150), ('可以', 146), ('過', 141), ('於', 141), ('時', 139), ('已', 136), ('更', 135), ('中國', 133), ('地', 131), ('沒有', 129), ('像', 129), ('下', 128), ('媽媽', 127), ('由', 126), ('前', 124), ('但', 124), ('向', 120), ('或', 118), ('國家', 118), ('後', 117), ('再', 116), ('許多', 116), ('並', 114), ('使', 113), ('讓', 112), ('美國', 112), ('內', 111), ('想', 110), ('家', 110), ('各', 109), ('知道', 108), ('新', 108), ('用', 107), ('呢', 106), ('可', 105), ('卻', 103), ('給', 99), ('其', 99), ('只', 99), ('全', 99), ('多', 95), ('爸爸', 95), ('公司', 94)]其中

其中v = sorted(sinica_fd.items(), key=lambda e:e[1], reverse=True)将字典中的词汇按照出现次数从多到少排列,运行的结果便是出现频率最高的100个词汇



二  使用nltk分析自己的语料



1先准备一份自己想分析的语料,本文中使用了金庸先生的射雕英雄传的前两章。(任意txt文件都可以,如果懒的弄,可以下载本文中示例 语料下载)。
首先读取目标位置得到txt的文件


>>> raw=open(r'C:\Users\lenovo\Desktop\result.txt').read()



路径前面加入r是为了防止转义而报错



2接下来我们要对中文文本进行分词处理,本文推荐使用结巴分词,而且结巴分词的使用十分简单,具体使用方法到 结巴分词的Github都会找到,先import jieba



text=nltk.text.Text(jieba.lcut(raw))

之后我们就可以对text进行一系列的处理,下面代码是一段简单的完整的示例



import jieba
import nltk
raw=open(r'C:\Users\lenovo\Desktop\result.txt').read()
text=nltk.text.Text(jieba.lcut(raw))
print (text.concordance(u'吗'))





本文简单的介绍了一些简单的分析方法,会在后面介绍更多更有针对性的方法。这方面的资料网上很少,我也是出于爱好学习探索,希望如有写的不对的地方可以指出来,有好的资料可以分享给我~