2014-11-14 2 views
0

Как можно реализовать функцию яваскрипта для расчета частоты слов в текстеКак рассчитать частоту слова в тексте

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

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

Я не думаю, что «поворот» это термин, который вы ищете. «подсчет», может быть. В любом случае у вас нет массива для начала, у вас есть строка. Всегда ли это пространство? – Brad

+0

@Brad вторым параметром является массив –

+0

@ bto.rdz Я вижу это, но вся точка функции заключается в анализе строки. Это то, что я получаю. Количество слов с фильтром. – Brad

ответ

4

Нечто подобное должно сделать

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; 
} 

FIDDLE

+0

Удивительный! Спасибо – abu

+0

до того, как раскол хорош для очистки str str.replace (/ [^ a-z0-9]/gi, '') .replace (/ s +/g, '') – kwarunek

+0

@kAlmAcetA - не нужно, он проверяет массив для совпадений в любом случае – adeneo

0

Если вы можете использовать underscore/lodash так же просто, как:

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

Как об этом:

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'])); 

http://jsfiddle.net/uqgtqy01/1/

+0

Это хорошо работает – abu

Смежные вопросы