我有一大块文字,我想找出最常用的词语(除了少数,如“the”,“a”,“and”等)。使用Javascript来查找字符串中最常见的单词?
我该如何去寻找这个文本块的最常用的单词?
感谢您的任何想法。
我有一大块文字,我想找出最常用的词语(除了少数,如“the”,“a”,“and”等)。使用Javascript来查找字符串中最常见的单词?
我该如何去寻找这个文本块的最常用的单词?
感谢您的任何想法。
您应该通过的话字符串分割成词,然后循环并且将每一个计数器:
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()
以便不区分大小写。
从未来开始,再次询问这个问题,但是我对解决方案提前开始并将其标记为已回答。无论如何,这是SLak答案的补充。
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;
}
只是出于好奇 - 你有这个片段铺设在某处,或者你想出解决方案只是为了这个答案?无论哪种方式,这真棒。 :) –
@ajax:我当场创建它。谢谢! – SLaks
嘿,非常感谢,我只是想知道,你能解释一下/ \ b /参数吗?这是一个正则表达式是吗? –