Написание букмарклета, который подсчитывает частоту слов

Я хочу создать букмарклет, который подсчитывает весь текст на веб-странице, а затем отображает результаты от большинства до наименьшего в абсолютно позиционированном div.

Каждый поиск в Google, который я делал, говорит о подсчете общего количества слов в форме или текстовой области или известного идентификатора div. Это не то, чего я хочу. Я хочу, чтобы каждый раз /w появлялся на всей веб-странице.

Я достаточно знаю javascript, чтобы знать, что я не знаю, как это сделать.


person robert    schedule 13.08.2010    source источник
comment
Вы также можете посмотреть на squarefree.com/bookmarklets/seo.html -- там есть букмарклет частоты слов, который работает довольно хорошо.   -  person    schedule 22.11.2011
comment
Ваше гугл-фу подводит вас. Найдите bookmarklet word frequency и, возможно, seo bookmarklet word frequency. Я вижу много хороших хитов.   -  person DG.    schedule 18.03.2013


Ответы (1)


Что-то вроде этого должно работать:

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 оставлена ​​читателю в качестве упражнения =). Есть также последствия того, как сохранить эту процедуру в виде букмарклета (особенно, как отобразить результаты для конечного пользователя), но опять же, я предполагаю, что у вас есть некоторое представление о том, как это сделать.

person maerics    schedule 13.08.2010
comment
привет, ваш код почти идеален, но есть ошибка, если в тексте есть, например, слово конструктор. См. объяснение Дугласа Крокфорда здесь: oreilly.com/javascript/ выдержки/javascript-хорошие-части/ - person Kai Carver; 11.08.2012