2016-06-19 22 views
1

私はどの単語が最もコメントに出現するかを見るアルゴリズムを構築しようとしています。文字列中の単語の出現数をカウントするアルゴリズム

は、したがって、私は(JavaScriptで)この思い付いた:

var analyze = function(comments){ 
    var detectedWords = []; 
    var result = {}; 
    comments.forEach(function(comment){ 
     var words = comment.message.split(" "); 
     words.forEach(function(word){ 
      word = word.toLowerCase(); 
      if(word !== ""){ 
       if(detectedWords.indexOf(word) === -1){ 
        detectedWords.push(word); 
        result[detectedWords.indexOf(word)] = {"name":word,"count":1}; 
       }else{ 
        result[detectedWords.indexOf(word)].count++; 
       } 
      } 
     }); 
    }); 

    return _.orderBy(result, ['count'], ['desc']); 
} 

アルゴリズムをさらに最適化することができますか? (toLowerCaseメソッド()内部ループの外?

次のステップで、私は「です...、である、I、午前」

+0

あなただけ維持しようとすることができます'word'をキーとし、' value'としての出現、thats結果ごとに少ないメモリスペースを使用します。 –

+0

コアレビューの質問は、StackOverflowには適していません。そのためにhttp://codereview.stackexchange.com/があります。また、「Bよりも速いですか?あなた自身を測定することによって簡単に答えられます。 – Tomalak

+1

@Tomalak *コードレビュー – Ave

答えて

1

あなたは「ブラックリスト」など興味深いない単語を定義しますカウントオブジェクトへのアクセスを高速化するために、配列項目を参照のハッシュテーブルを使用することができます。resultは今今ソート可能である配列、である。

var analyze = function (comments) { 
 
    var result = [], 
 
     hash = {}; 
 
    comments.forEach(function (comment) { 
 
     var words = comment.message.split(" "); 
 
     words.forEach(function (word) { 
 
      word = word.toLowerCase(); 
 
      if (word !== "") { 
 
       if (!hash[word]) { 
 
        hash[word] = { name: word, count: 0 }; 
 
        result.push(hash[word]); 
 
       } 
 
       hash[word].count++; 
 
      } 
 
     }); 
 
    }); 
 

 
    return result.sort(function (a, b) { return b.count - a.count;}); 
 
    //return _.orderBy(result, ['count'], ['desc']); 
 
} 
 

 
console.log(analyze([{ message: 'a b c d a v d e f g q' }]));

関連する問題