Javascript 如何计算文本中单词的频率

Javascript 如何计算文本中单词的频率,javascript,arrays,Javascript,Arrays,如何实现javascript函数来计算文本中单词的频率 frequencies('foo foo bar foo bar buz', ['foo', 'bar']); should return {"bar": 2, "foo": 3} 像这样的东西应该可以 function frequencies(str, opts) { var o = {}; opts.forEach(function(opt) { o[opt] = 0; }); str.split(/\s

如何实现javascript函数来计算文本中单词的频率

frequencies('foo foo bar foo   bar buz', ['foo', 'bar']);

should return {"bar": 2, "foo": 3}

像这样的东西应该可以

function frequencies(str, opts) {
    var o = {};
    opts.forEach(function(opt) { o[opt] = 0; });
    str.split(/\s+/).forEach(function(x) { if (x in o) o[x]++; });

    return o;
}

像这样的东西应该可以做到这一点

function frequencies(str, opts) {
    var o = {};
    opts.forEach(function(opt) { o[opt] = 0; });
    str.split(/\s+/).forEach(function(x) { if (x in o) o[x]++; });

    return o;
}

如果可以使用下划线/lodash,其简单如下:

function frequencies(str) {
  return _.countBy(str.split(' '));
}

如果可以使用下划线/lodash,其简单程度如下:

function frequencies(str) {
  return _.countBy(str.split(' '));
}
这个怎么样:

function frequencies(str, words){
    var ret = {}, split = str.split(' ');

    for(var i = 0; i < split.length; i++){
        var currentWord = split[i];
        if(!currentWord || !~words.indexOf(currentWord)) continue;
        ret[currentWord] = !ret[currentWord] ? 1 : ret[currentWord]+1;
    }

    return ret;
}

console.log(frequencies('foo foo bar foo   bar buz', ['foo', 'bar']));
功能频率(str、words){
var ret={},split=str.split(“”);
对于(变量i=0;i
这个怎么样:

function frequencies(str, words){
    var ret = {}, split = str.split(' ');

    for(var i = 0; i < split.length; i++){
        var currentWord = split[i];
        if(!currentWord || !~words.indexOf(currentWord)) continue;
        ret[currentWord] = !ret[currentWord] ? 1 : ret[currentWord]+1;
    }

    return ret;
}

console.log(frequencies('foo foo bar foo   bar buz', ['foo', 'bar']));
功能频率(str、words){
var ret={},split=str.split(“”);
对于(变量i=0;i

我不认为“旋转”是你想要的术语。也许是“伯爵”。在任何情况下,您都没有一个数组作为开始,而是一个字符串。它总是以空格分隔吗?@Brad第二个参数是array@bto.rdz我明白了,但函数的全部要点是解析字符串。这就是我的意思。带过滤器的字数统计。我不认为“旋转”是你要找的术语。也许是“伯爵”。在任何情况下,您都没有一个数组作为开始,而是一个字符串。它总是以空格分隔吗?@Brad第二个参数是array@bto.rdz我明白了,但函数的全部要点是解析字符串。这就是我的意思。使用筛选器进行字数计算。在拆分之前,可以清除str str str.replace(/[^a-z0-9]/gi')。replace(/s+/g')@kAlmAcetA-无需,它会检查数组是否匹配anyway@adeneo这个数组-更具体地说-试试这个字符串“foo,foo-bar,foo-bar-buz”@kAlmAcetA-然后你就要担心逗号了,OP的代码没有这样的东西,这就像说试试这个字符串
foobar bar,,foo footerot,barkeeper
,它只是不同的东西anymore@adeneo不想争论,但OP的问题并没有提到分隔符,只需计算tf。您的答案是确定的-仅针对给定的示例(带空格分隔符)。EOT在拆分之前可以清理str str.replace(/[^a-z0-9]/gi')。replace(/s+/g'))@kAlmAcetA-无需,它会检查数组是否匹配anyway@adeneo这个数组-更具体地说-试试这个字符串“foo,foo-bar,foo-bar-buz”@kAlmAcetA-然后你就要担心逗号了,OP的代码没有这样的东西,这就像说试试这个字符串
foobar bar,,foo footerot,barkeeper
,它只是不同的东西anymore@adeneo不想争论,但OP的问题并没有提到分隔符,只需计算tf。您的答案是确定的-仅针对给定的示例(带空格分隔符)。EOT