NLTK学习(一)

转载自: NLTK学习之一:简单文本分析

学习记录所用,如有侵权,一定删除。

(1)、nltk.text.Text()类用于对文本进行初级的统计与分析,它接受一个词的列表作为参数。

方法作用
Text(words)对象构造
concordance(word, width=79, lines=25)显示word出现的上下文
common_contexts(words)显示words出现的相同模式
similar(word)显示word的相似词
collocations(num=20, window_size=2)显示最常见的二词搭配
count(word)word出现的词数
dispersion_plot(words)绘制words中文档中出现的位置图
vocab()返回文章去重的词典

nltk.text.TextCollection类是Text的集合,提供下列方法

方法作用
nltk.text.TextCollection([text1,text2,])对象构造
idf(term)计算词term在语料库中的逆文档频率,即log总文章数文中出现term的文章数log总文章数文中出现term的文章数
tf(term,text)统计term在text中的词频
tf_idf(term,text)计算term在句子中的tf_idf,即tf*idf

下面对《亮剑》进行简单文本分析:

示例代码1:

import nltk
import jieba

raw = open('liangjian.TXT', 'rb').read()
# jieba.lcut()与jieba.cut()的区别在于:
# jieba.cut()返回一个可迭代的generator,可以使用for循环获得粉刺后得到的每一个词语
# jieba.lcut()直接返回list
text = nltk.text.Text(jieba.lcut(raw))

# 显示出现的上下文
print(text.concordance(u'驻岛'))

# 对同义词的使用习惯,显示words出现的相同模式
print(text.common_contexts(['小日本', '鬼子']))

# 显示最常用的二次搭配
print(text.collocations())

# 查看关心的词在文中出现的位置
text.dispersion_plot(['李云龙', '秀芹'])

运行结果:

对文档用词进行分布统计:

FreqDist类介绍

这个类主要记录了每个词出现的次数,根据统计数据生成表格,或绘图。其结构很简单,用一个有序词典进行实现。所以dict类型的方法在此类也是适用的。如keys()等。

方法作用
B()返回词典的长度
plot(title,cumulative=False)绘制频率分布图,若cumu为True,则是累积频率分布图
tabulate()生成频率分布的表格形式
most_common()返回出现次数最频繁的词与频度
hapaxes()返回只出现过一次的词

对《Nothing gonna change my love for you》歌词进行分析。

示例代码:

import nltk
text = open('nothing_gonna_change_my_love_for_you.txt').read()
fdist = nltk.FreqDist(nltk.word_tokenize(text))
# 显示累积频率分布图
fdist.plot(30, cumulative=True)

结果:

 

在nltk.corpus包下,提供了几类标注好的语料库。见下表:

语料库说明
gutenberg一个有若干万部的小说语料库,多是古典作品
webtext收集的网络广告等内容
nps_chat有上万条聊天消息语料库,即时聊天消息为主
brown一个百万词级的英语语料库,按文体进行分类
reuters路透社语料库,上万篇新闻方档,约有1百万字,分90个主题,并分为训练集和测试集两组
inaugural演讲语料库,几十个文本,都是总统演说

更多语料库,可以用nltk.download()在下载管理器中查看corpus。

语料库处理

方法明说明
fileids()返回语料库中文件名列表
fileids[categories]返回指定类别的文件名列表
raw(fid=[c1,c2])返回指定文件名的文本字符串
raw(catergories=[])返回指定分类的原始文本
sents(fid=[c1,c2])返回指定文件名的语句列表
sents(catergories=[c1,c2])按分类返回语句列表
words(filename)返回指定文件名的单词列表
words(catogories=[])返回指定分类的单词列表

文本预处理

NLP在获取语料之后,通常要进行文本预处理。英文的预处理包括:分词,去停词,提取词干等步骤。中文的分词相对于英文更复杂一些,也需要去停词。但没有提取词干的需要。 
对于英文去停词的支持,在corpus下包含了一个stopword的停词库。 
对于提取词词干,提供了Porter和Lancaster两个stemer。另个还提供了一个WordNetLemmatizer做词形归并。Stem通常基于语法规则使用正则表达式来实现,处理的范围广,但过于死板。而Lemmatizer实现采用基于词典的方式来解决,因而更慢一些,处理的范围和词典的大小有关。

porter = nltk.PorterStemmer()
porter.stem('lying') #'lie'

lema=nltk.WordNetLemmatizer()
lema.lemmatize('women')   #'woman'

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值