python函数FreqDist
频率分布
函数FreqDist
函数FreqDist⽅法获取在⽂本中每个出现的标识符的频率分布。通常情况下,函数得到的是每个标识符出现的次数与标识符的map映射标识符出现次数
are209
the660
people550
fdist = FreqDist(text1)
fdist
FreqDist的常⽤函数
keys() #获取map对象的键值,返回⼀个数组
获取⽂本中最常出现的前20的词
vocabulary = fdist.keys()
vocabulary[1:20]
freq() #获取标识符的频率
获取词whale的频率
fdist.freq('whale') * 100
tabulate() 制表函数,将⽂本的出现次数绘制成⼀张⼆维表格,横向表格。函数⾸先绘制的是频率分布样本中出现频率最⾼的。如果给函数提供⼀个Integer参数P,那么函数将绘制前P个标识符。
参数cumulative⽤来设置次数是否累加
fdist.tabulate(20, cumulative=True) # 绘制前20个标识符,并出现次数累加
plot()函数绘制图,⽤法和tabulate相同。
fdist.plot(20, cumulativce=True)
注意从图中可以看出⼀些介词和冠词占据了词总量的很⼤⼀部分,但是这些词却对我们了解⽂章没有什么帮助,所以要过滤掉这些词inc(sample)函数,增加样本
N()函数,获取样本总数
max()函数,数值最⼤的样本
表达式:for sample in fdist: 以频率递减遍历样本
细粒度的选择词
采⽤集合论的⼀些⽅法和符号进⾏过滤筛选,这是最基本的。当然还有更好的⽅法。 #获取⽂章中词长度⼤于15的单词
V = set(text1)
long_words = [w for w n V if len(w) > 15]
现在我们已经知道如何词的频率,并且也知道如何过滤掉长度过长的词。那么可以想象⼀下,⼀篇⽂章中较短的词,例如介词to,of等是⼀些⾼频词,但对了解⽂章⽆⽤。同样,⼀些长度过长的词,⼀般都是低频词,这些词也不能代表⽂章的特征。即这些词都不能作为⽂章的特征词汇。
fdist = FreqDist(text3)
sorted([w for w in set(text3) if len(w) > 7 and fdist[w] > 7])
获取⽂章中词长在7位以上且词频在7次以上的单词这些词往往能代表⽂章的特点。
fdist .inc (["In","the","beginning"])
1
isalpha 函数fdistN ()
1
fdist.max()
1
单个元素操作
函数含义s.startswith(t)测试s是否以t开头s.endswith(t)
测试s是否以t结尾t in s 测试s是否包含t
s.islower()测试s中所有字符是否都是⼩写字母s.isupper()测试s中所有字符是否都是⼤写字母s.isalpha()测试s中所有字符是否都是字母s.isalnum()测试s中所有字符是否都是字母或数字
s.isdigit()测试s中所有字符是否都是数字
s.istitle()测试s是否⾸字母⼤写
s.upper()将s转成⼤写s.lower()
将s转成⼩写
马尔科夫假设
马尔科夫假设,将其应⽤在词频的检测上就是:⽂章的单词往往存在依赖关系,即有很多的词是以词组的形式出现的。如red wine,⽽不是the wine,所以我们假设下⼀个词的出现之与其前⼀个词的出现有关,⽽与之前出现的词⽆关。(虽然这个假设存在问题,因为我们都知道,有很多的词组不是相邻依赖,⽽是⾮相邻依赖,⽽且词的出现还和上下⽂有关)
#以-ableness 结尾的词
sorted([w for w in set(text1) if (not ) w.endswith("ableness")])#包含gnt 的词
sorted([w for in set(text1) if (not ) 'gnt' in w])#⾸字符⼤写的词
sorted([w for w in set(text1) if (not ) w.istitle()])#完全由数字组成的词
sorted([w for w in set(text1) if (not ) w.isdigit()])#获取⽂本中的单词数量,过滤掉⼤⼩写,标识符,数字len(set([w.lower() for w in text1 if w.isalpha()]))
12345678910
bgrams = nltk .bigrams (text2) #返回⼀个generate bgfdist = FreqDist(list(bgrams)) #返回搭配的频率bgfdist .plot (10) #查看前10个出现频率最⾼的搭配
123
可以看出这⾥出现了我们处理单个词频率时出现的问题,介词和⼀些标识符
nltk给我们提供了获取这种⼆元组中最频繁搭配的函数——collocations
现在假设我们要统计⼀下在⽂章中单词长度为多少出现的次数对多。
1
fdist = FreqDist([len(w) for w in text1])fdist.items ()
12
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论