我想在Objective-C中制作一个标签云,我正在努力找到一个好的算法。我试过几个,一开始似乎效果不错,但它们都有一个缺陷:如果出现次数最少的单词和出现频率最高的单词出现的频率一样高,那么整个过程就有缺陷。
示例(Google中的第一个算法):
var multiplier = (maxPercent-minPercent)/(max-min);
var size = minPercent + ((max-(max-(count-min)))*multiplier);
这里,如果min = 5, max = 5, maxPercent = 300, minPercent = 75, count = 5,那么你有:
var multiplier = (300-75)/(5-5) ----- division by 0, impossible
var size = 75 + ((5-(5-(5-5)))*multiplier);
所以我的问题是,有没有任何标签云算法考虑到这一点,并且能够计算每个单词的字体大小,即使最大频率等于最小频率?
尝试如下:
var multiplier = (maxPercent-minPercent)/(max-min+1);
var size = minPercent + ((max-(max-(count-min)))*multiplier);
在我看来,它很好地解决了你的问题;同时,只要频率是可区分的,+1
不会改变太多。