代码之家  ›  专栏  ›  技术社区  ›  jmccartie

按比例显示字数/标记云

  •  1
  • jmccartie  · 技术社区  · 14 年前

    这很奇怪,所以请耐心等待我解释。

    我的第一个想法是计算每一个单词的出现次数,并将所有这些都与每个单词的计数一起放入一个数组中,然后进行排序。

    array(517) (
        "We" => integer 4
        "Five" => integer 1
        "Ten's" => integer 1
        "best" => integer 2
        "climbing" => integer 3
         (etc...)
    

    从这里开始,我创建了一个新的字符串,并将每个单词乘以它的计数。一旦字符串的总长度达到1000字,我就停止。这就产生了一个问题。

    假设“苹果”这个词出现了900次,“猫”这个词出现了100次。由此产生的单词cloud将只包含两个单词。

    我的想法是以某种比例把单词吐出来。到目前为止,我在不同的数据集上的尝试都失败了,这些数据集的比率并不高——特别是当“1”处有很多单词时,这使得GCD非常低。

    我想这是一个简单的数学问题,我无法理解,所以我转向了oracle,那就是stackoverflow。

    1 回复  |  直到 14 年前
        1
  •  2
  •   ITroubs    14 年前

    计算所有单词,然后对数组中的每个单词执行此操作:

    floor(count_of_the_word * (1000/numbber_of_total_words))
    

    这将导致最多1000个单词,所有单词以x倍的比例减少。

    所以50倍的猫100倍的哥斯拉4000倍的松鼠和4000倍的布什1000倍的乔治将首先导致

    array(
        cat[50]
        gozilla[100]
        looser[4000]
        bush[4000]
        george[1000]
    )
    

    循环和转换数字后,您将得到:

    array(
        cat[5]
        gozilla[10]
        looser[437]
        bush[437]
        george[109]
    )
    

    总计998字