Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按比例显示字数/标记云_Php_Math - Fatal编程技术网

Php 按比例显示字数/标记云

Php 按比例显示字数/标记云,php,math,Php,Math,这很奇怪,所以请耐心听我解释 基本问题:我有一个巨大的字符串——它可以根据用户的不同而有不同的长度。我的工作是根据用户获取这个巨大的字符串,然后将其发送到另一个软件块以制作标记云。如果生活对我来说很简单,我可以把所有的东西都寄出去。但是,tag cloud软件只接受1000个单词长的字符串,因此我需要对字符串进行一些处理,以发送最重要的单词 我的第一个想法是计算每一个单词的出现次数,并将所有这些单词放入一个数组中,然后进行排序 array(517) ( "We" => intege

这很奇怪,所以请耐心听我解释

基本问题:我有一个巨大的字符串——它可以根据用户的不同而有不同的长度。我的工作是根据用户获取这个巨大的字符串,然后将其发送到另一个软件块以制作标记云。如果生活对我来说很简单,我可以把所有的东西都寄出去。但是,tag cloud软件只接受1000个单词长的字符串,因此我需要对字符串进行一些处理,以发送最重要的单词

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

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非常低

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


提前感谢。

数一数所有单词,然后对数组中的每个单词执行以下操作:

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个单词

你说得对,真奇怪。您能否更具体地定义问题,包括所有边界(即原始字符串中有多少个单词)以及为什么必须将字符串发送到软件的其他部分?在我看来,如果原始字符串中最多有1000个单词,则可以发送该字符串,如果原始字符串中的单词超过1000个,则最终可能会有1001个以上的唯一单词。我猜我不明白这个问题…编辑。让我知道它是否有用。如果我理解得很好,您的1000字符字符串必须包含重复项?是的--这是另一个软件如何确定标记云的权重(它根据我发送的字符串进行自己的字数计算)这是您的“云软件”的一个限制,如果您的字数超过1000个,如果你想完全避免单词丢失,那么只需计算转换后0的频率,并将最大计数减少这个数字,然后将每个0作为计数的单词加上1即可