首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Word Cloud Set Max Words

Word Cloud Set Max Words
EN

Stack Overflow用户
提问于 2017-01-16 00:21:42
回答 1查看 1.4K关注 0票数 0

我使用的是流行的word云库,来源是:https://github.com/jasondavies/d3-cloud

我使用的是这个块的克隆:http://bl.ocks.org/blockspring/847a40e23f68d6d7e8b5

对于我的数据,我想设置单词云接受的最大字数。云有一些内置的旋转,字体大小,螺旋线方法等功能。然而,似乎没有任何用于设置要显示的最大字数的内置装置。

我认为简单地将原始字数的子集提供给它会更有计算效率。我没有看到任何.sort调用,所以我不确定word_count对象在转到cloud.js之前是否按频率排序。

如果cloud.js对它接受的word_count对象按频率、tf-idf或它使用的任何方式进行排序,那么我必须等待返回前k个单词,直到它出现在列表中,这意味着它仍然遍历我的整个文本文件。

我仍然认为,如果我可以只显示前k个(最频繁的顶部,排除在common_words中找到的语法单词),比如说20个,我至少会加速视觉(不确定是否加速实际的算法)。

如果这一点不清楚,让我用可视化的方法来解释。似乎一个词出现的频率越高,它的字号就越大,我认为这是一种直观地掌握cloud.js的方法,所以前k将是最大字号的k。

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

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-16 00:33:54

也许吧

代码语言:javascript
复制
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 < 20000为止

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41663341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档