我正在使用流行的词云库和源代码:
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个(最常见的前k个,不包括common_words中找到的语法词),可以说20个,那么我至少会加快视觉效果(不确定是否会加快实际算法的速度)。

如果不清楚,让我用视觉方法进行解释。看来单词出现的频率越高,其字体大小就越大,我认为这是一种理解cloud.js的直观方法,因此前k个将是最大字体大小的k个。

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

注意:我最初是在git中心页面上发布此问题的,但是它被标记为脱题,因此建议我在此处发布。我最初的担心是,对于堆栈溢出,这将被标记为过于模糊,因此我一直试图使问题变得不太抽象,并提供尽可能多的信息。请记住这一点。

谢谢

最佳答案

也许

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

关于javascript - 词云集最大单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41663341/

10-09 23:59
查看更多