欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

怎样通过词频得到这个词频的排序? 博客分类: java综合web算法技术杂文 信息检索搜索词频大规模齐普夫法则 

程序员文章站 2024-03-22 10:45:58
...
     在大规模检索中,我们怎样通过已经的词频得到词频的排序? 通俗点讲,就是当我知道“java”这个词的频率是x,那么"java"到底在排在第几位呢?
      大规模数据中,有一个重要的法则叫“齐普夫法则”,它描述为第k个出现次数最多的词汇,它的词频与1/k成正比。这个法则的发现过程一点都不科学,齐普夫是这样干的:找到一本大部头的书籍,统计不同词汇出现的次数并排序,发觉词频的排序乘以出现的次数等于一个常数。然后这个常数乘以10,就得到了书籍的总词数。多么荒诞的事情啊,这比牛顿被苹果砸了更坑爹啊有木有。
       但是,这个法则竟然是正确的(没什么道理啊,我想起了黄金比例和自然数)。所以我们糊里糊涂的竟然可以得到这样一个公式:p(T)=C*(1/K),T表示排在K位置的词汇,P(T)表示T词的词频,C表示一个常数。
       好吧,更坑爹的还在后面。。。。。。
       我们知道,在大规模数据中,词频=词出现词数/总词数,那么所有词频之和等于1,所以有(1/1+1/2+1/3+...+1/k+...+1/n)*C=1,根据自然对数,就有ln(n)*C=1。
       那么ln(n)为什么约等于(1/1+1/2+1/3+...+1/k+...+1/n)呢,根据调和级数,1+1/2+1/3+1/4+...1/n = ln(n+1) + r ,r是常数,约等于0.5772156649,可忽略不计。
       所以,假如n等于100万,那么C=1/ln(1000000)=1/14,咱们转回到P(T)=C*(1/K)这个公式,对于数据规模在100万的情况下,排在K位的词汇词频=1/14K。当然,知道了词汇词频后,K值也很好算咯。

    By 阿飞哥 转载请说明
    腾讯微博:http://t.qq.com/duyunfeiRoom
   新浪微博:http://weibo.com/u/1766094735