词云集最大词

时间:2017-01-15 16:21:42

标签: javascript d3.js word-cloud

我正在使用流行的词云库来源: https://github.com/jasondavies/d3-cloud

我正在使用此块的克隆: http://bl.ocks.org/blockspring/847a40e23f68d6d7e8b5

对于我的数据,我想设置单词云所用的最大单词数。云有一些内置的旋转功能,字体大小,螺旋方法等。但是,似乎没有任何内置的方法来设置要显示的单词的最大值。

我认为简单地将其作为原始字数的一部分来提供计算效率会更高。我没有看到任何.sort调用,所以我不确定word_count对象是否按照频率排序,然后再转到cloud.js。

如果cloud.js按照频率或tf-idf或其使用的任何方式对word_count对象进行排序,那么我将不得不等待返回前k个单词,直到它生成列表,这意味着它仍然通过迭代我的整个文本文件。

我仍然认为如果我只能显示前k(最常见的顶部,不包括common_words中的语法单词),那就说20,我至少会加速视觉(不确定加速实际算法)。

如果不清楚,让我用视觉方法解释它。似乎单词出现的频率越高,字体越大,我认为这是掌握cloud.js的直观方式,因此前k将是最大字体大小的k。

那些有这种可视化经验的人能告诉我在哪里调整返回前k个单词的代码以及如何调整?

注意:我最初在git hub页面上发布了这个问题,但它被标记为偏离主题,所以我被建议在这里发帖。我最初担心的是,对于堆栈溢出来说,这会被标记为太模糊,所以我试图使问题不那么抽象,并提供尽可能多的信息。请记住这一点。

谢谢

1 个答案:

答案 0 :(得分:1)

也许

var words = text_string.split(/[ '\-\(\)\*":;\[\]|{},.!?]+/),
  limit = 5;
if (words.length == 1) {
  word_count[words[0]] = 1;
} else {
  words.forEach(function(word) {
    var word = word.toLowerCase();
    if (word != "" && common.indexOf(word) == -1 && word.length > 1) {
      if (word_count[word]) {
        word_count[word]++;
      } else {
        word_count[word] = 1;
      }
    }
  });
  for (var word in word_count) {
    if (word_count[word] < limit) delete word_count[word];
  }
}

您可能想要添加一个计数器,如果有太多单词,请将限制降低到Object.keys(word_count).length&lt; 20000