词云集最大词
Word Cloud Set Max Words
我使用的是流行的词云库,源码:
https://github.com/jasondavies/d3-cloud
我正在使用这个块的克隆:
http://bl.ocks.org/blockspring/847a40e23f68d6d7e8b5
对于我的数据,我想设置词云的最大词数。云有一些内置功能,用于旋转、字体大小、螺旋方法等。但是,似乎没有任何内置方法来设置要显示的最大单词数。
我认为简单地向它提供原始字数的一个子集在计算上会更有效率。我没有看到任何 .sort
调用,所以我不确定 word_count 对象是否在进入 cloud.js 之前按频率排序。
如果 cloud.js 按频率或 tf-idf 或它使用的任何东西对它接受的 word_count 对象进行排序,那么我将不得不等待 return 前 k 个词,直到在它进入列表之后,意味着它仍然遍历我的整个文本文件。
我还是觉得如果我能只显示前k个(top是最常见的,不包括common_words中的语法词),比如说20个,我至少会加快视觉速度(不是确保加速实际算法)。
如果不清楚,让我用视觉方法解释一下。好像一个词出现的次数越多,它的字号就越大,我觉得这是一个直观的把握cloud.js,所以top k就是最大的font-size的k。
那么在这种可视化方面有经验的人可以告诉我在哪里调整 return 前 k 个词的代码以及如何调整吗?
注意:我最初在 git 中心页面上 post 编辑了这个问题,但它被标记为偏离主题,所以我被建议在这里 post。我最初担心这会被标记为堆栈溢出太模糊,所以我试图让这个问题不那么抽象,并提供尽可能多的信息。请记住这一点。
谢谢
也许
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://github.com/jasondavies/d3-cloud
我正在使用这个块的克隆: http://bl.ocks.org/blockspring/847a40e23f68d6d7e8b5
对于我的数据,我想设置词云的最大词数。云有一些内置功能,用于旋转、字体大小、螺旋方法等。但是,似乎没有任何内置方法来设置要显示的最大单词数。
我认为简单地向它提供原始字数的一个子集在计算上会更有效率。我没有看到任何 .sort
调用,所以我不确定 word_count 对象是否在进入 cloud.js 之前按频率排序。
如果 cloud.js 按频率或 tf-idf 或它使用的任何东西对它接受的 word_count 对象进行排序,那么我将不得不等待 return 前 k 个词,直到在它进入列表之后,意味着它仍然遍历我的整个文本文件。
我还是觉得如果我能只显示前k个(top是最常见的,不包括common_words中的语法词),比如说20个,我至少会加快视觉速度(不是确保加速实际算法)。
如果不清楚,让我用视觉方法解释一下。好像一个词出现的次数越多,它的字号就越大,我觉得这是一个直观的把握cloud.js,所以top k就是最大的font-size的k。
那么在这种可视化方面有经验的人可以告诉我在哪里调整 return 前 k 个词的代码以及如何调整吗?
注意:我最初在 git 中心页面上 post 编辑了这个问题,但它被标记为偏离主题,所以我被建议在这里 post。我最初担心这会被标记为堆栈溢出太模糊,所以我试图让这个问题不那么抽象,并提供尽可能多的信息。请记住这一点。
谢谢
也许
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