Использование 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;
}