1、python中dict的排序
使用sorted函数,可以这样使用:
>>> items
[(1, 2), (3, 1)]
>>> sorted(di.items(), key=lambda di:di[1])
[(3, 1), (1, 2)]
还有更多的方法
按照key排序方法比较多,但如果按照value来的话,,似乎只有上面这种
2、Zipf定律
1932年,哈佛大学的语言学专家Zipf在研究英文单词出现的频率时,发现如果把单词出现的频率按由大到小的顺序排列,则每个单词出现的频率与它的名次的常数次幂存在简单的反比关系,这种分布就称为Zipf定律,它表明在英语单词中,只有极少数的词被经常使用,而绝大多数词很少被使用.实际上,包括汉语在内的许多国家的语言都有这种特点。
齐普夫定律(Zipf's Law):一个词在一个有相当长度的语篇中的等级序号(该词在按出现次数排列的词表中的位置,他称之为rank,简称r)与该词的出现次数(他称为 frequency,简称f)的乘积几乎是一个常数(constant,简称C)。用公式表示,就是 r × f = C 。
Zipf定律是文献计量学的重要定律之一,它和罗特卡定律、布拉德福定律一起被并称为文献计量学的三大定律。
wikipedia上的资料
Brown Corpus近似满足zipf分布,但还是存在zipf的争议,因为这个只考虑了词频信息,而没有考虑到词与词间的上下文关系...
现要生成符合zipf分布的随机数列,主要公式P(r)=C/(r**a),这个经过对数变换,就变成lgP(r)=lgC-algr,是一条斜率为-a的直线,r为一个词频的排名,P(r)表示第r个词出现频率,
找到zipf的c#实现,但似乎不对.
之后直接找python,bingo!原来numpy中的random已经有生成zipf分布的随机函数,那么直接可以用,
from numpy.random import zipf
import collections
test = collections.defaultdict(lambda: 0)
for i in zipf(1.25, 1000): # 直接zipf函数就能产生随机数,两个参数分别是设定的a值(大于1)和随机数个数
test[i] += 1 # 统计频率,检验下来是符合上述规律
print sorted(test.items(), key=lambda test:test[1])
不过有个问题是,有时会产生负数,,,
找到相关文章
- website popularity和Zip分布
- Diversity is Power for Specialized Sites
- 中文介绍
- 另外,还有个python实现包,叫rv,这个似乎不是免费的
又一次碰到布隆过滤器(ps:忘了上次是看什么才扯上BF的了),其核心是d个hash函数,可以快速判断一个元素是否属于一个集合的数据结构,,,
"给定一个集合X,一个Bloom Filter算法循环X中的每个元素,判断这个元素是否属于集合Y。Bloom Filter算法是随机算法,需要O(|X|)的操作,和O(|Y|)的空间。一个Bloom Filter算法是有一定概率保证的单边出错的算法,能够以百分之百确定X中的一个元素不属于Y,但不能保证中的一个元素一定属于Y。"
更多的信息
4、Getting Started on Natural Language Processing with Python cool!
0 comments:
发表评论