Использование Javascript для поиска наиболее распространенных слов в строке?

У меня есть большой блок текста, и я хотел бы узнать наиболее распространенные слова, которые используются (за исключением нескольких, таких как "the", "a", "and" и т.д.).

Как я буду искать этот блок текста для его наиболее часто используемых слов?

Спасибо за любые идеи.

Ответ 1

Вы должны разделить строку на слова, затем прокрутите слова и увеличьте счетчик для каждого из них:

var wordCounts = { };
var words = str.split(/\b/);

for(var i = 0; i < words.length; i++)
    wordCounts["_" + words[i]] = (wordCounts["_" + words[i]] || 0) + 1;

"_" + позволяет обрабатывать такие слова, как constructor, которые уже являются объектами объекта.

Вы можете написать words[i].toLowerCase() для подсчета без учета регистра.

Ответ 2

Исходя из будущего, когда этот вопрос задавали снова, но я начал слишком рано с решения, и он был отмечен как ответ. Во всяком случае, это дополнение к ответу SLaks.

function nthMostCommon(string, ammount) {
    var wordsArray = string.split(/\s/);
    var wordOccurrences = {}
    for (var i = 0; i < wordsArray.length; i++) {
        wordOccurrences['_'+wordsArray[i]] = ( wordOccurrences['_'+wordsArray[i]] || 0 ) + 1;
    }
    var result = Object.keys(wordOccurrences).reduce(function(acc, currentKey) {
        /* you may want to include a binary search here */
        for (var i = 0; i < ammount; i++) {
            if (!acc[i]) {
                acc[i] = { word: currentKey.slice(1, currentKey.length), occurences: wordOccurrences[currentKey] };
                break;
            } else if (acc[i].occurences < wordOccurrences[currentKey]) {
                acc.splice(i, 0, { word: currentKey.slice(1, currentKey.length), occurences: wordOccurrences[currentKey] });
                if (acc.length > ammount)
                    acc.pop();
                break;
            }
        }
        return acc;
    }, []);
    return result;
}