编写一个计算单词频率的书签

时间:2010-08-13 18:42:04

标签: javascript bookmarklet word-frequency

我想创建一个书签,它会对网页上的所有文字进行计数,然后在绝对定位的div中显示从大多数到最少的结果。

每次google搜索我都会谈到计算表单或文本区域或已知div id中的单词总数。那不是我想要的。我想要每个/ w出现在整个网页上的次数。

我知道足够的javascript知道我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

function countWordFrequency() {
  var freq={};
  // Traverse the DOM looking for text nodes.
  recurseTextNodes(function(textNode) {
    // Split the text into words, removing punctuation.
    var words = textNode.data.replace(/[^\w\s]/g, '').split(/\s+/)
      , len = words.length;
    // Count the word frequency.
    for (var i=0; i<len; i++) {
      // if (freq[words[i]]) { bug if one of the words is "constructor"!
      if (typeof freq[words[i]] === 'number') {
        freq[words[i]] += 1;
      } else  {
        freq[words[i]] = 1;
      }
    }
  });
  return freq;
}

这种解决方案可能过于简单,因为它删除标点符号并解析单词,但应该展示这个想法。此外,recurseTextNodes函数留给读者=)。还有如何将此例程存储为书签(特别是如何向最终用户显示结果)的含义,但我再次假设你已经知道如何做到这一点。