は、私は、テキストの大きなブロックを持っている、と私は(「」、「A」、「および」などのように、少数を除いて)使用されている最も一般的な単語を見つけるしたいと思います。Javascriptを使用して、文字列内の最も一般的な単語を検索しますか?
は、どのように私はその最も一般的に使用される単語をこのテキストブロックを探しに行きますか?
ありがとうございます。
は、私は、テキストの大きなブロックを持っている、と私は(「」、「A」、「および」などのように、少数を除いて)使用されている最も一般的な単語を見つけるしたいと思います。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()
を書きたいことがあります。
この質問は再び尋ねた未来から来て、私はあまりにも早く溶液で開始し、答えとして、それをマークしました。とにかく、それは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;
}
ちょうど好奇心から - あなたはこのスニペットをどこかに置いていましたか、この答えのためだけに解決策を考え出しましたか?いずれにせよ、それは素晴らしいです。 :) –
@ajax:私はその場でそれを作りました。ありがとう! – SLaks
ねえおかげでたくさん、私はちょうどあなたが/ \ B /引数を説明することができ、不思議でしたか?それは正規表現のはいですか? –