我使用的是流行的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中心页面上发布了这个问题,但它被标记为离题,所以我被建议在这里发布。我最初担心这会被标记为堆栈溢出太模糊,所以后来我试图让这个问题不那么抽象,并尽可能提供更多的信息。请记住这一点。
谢谢
发布于 2017-01-16 00:33:54
也许吧
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为止
https://stackoverflow.com/questions/41663341
复制相似问题