БлогNot. Javascript: строим частотную таблицу символов "на лету"

Javascript: строим частотную таблицу символов "на лету"

Мы просто хотим узнать, сколько раз встречается в тексте каждый из его символов. Конечно, сегодня для этой задачи не стоит компилировать программу, а проще написать Javascript-сервис из нескольких строк кода.

Вот скрипт в работе, а ниже показан полный исходник:

Введите или вставьте текст:

Результаты:

"Лишние" запятые в начале строк результата - потому что мы выводим в <textarea> непосредственно map, загрузке результата в Excel или ещё куда они особо не помешают.

Табуляция и перевод строки заменяются своими "текстовыми" обозначениями TAB и NEWLINE, так что можно заодно узнать, сколько в тексте "реальных" строк и табуляций.

Для "очень больших" текстов может начать "тормозить", конечно, но скрипт-то выполняется на вашей стороне, а не моей, так что мне всё равно :)

<form name="letterForm">
<p>Введите или вставьте текст:<br>
<textarea id="letterFormText" rows="12" cols="80"
 onselect="letterStat(this.id,'letterFormResult')" 
 onclick="letterStat(this.id,'letterFormResult')" 
 onkeyup="letterStat(this.id,'letterFormResult')"></textarea></p>
<p>Результаты:<br>
<textarea id="letterFormResult" rows="12" cols="40" readonly></textarea></p>
</form>
<script type="text/javascript">
function letterStat (idText, idRes) {
 var text = document.getElementById(idText).value;
 var textArray =  text.split('');
 var i = textArray.length;
 var textFrequency = [];
 var char1 = '';
 var keys = [];
 while (i--) {
  char1 = textArray[i];
  textFrequency[char1] = (textFrequency[char1] || 0) + 1;
 }
 keys = Object.keys(textFrequency);
 keys.sort();
 document.getElementById(idRes).value =
  keys.map (function (char1) { 
   return '\''+(char1=='\t'?'TAB':(char1=='\n'?'NEWLINE':char1))+'\' '+textFrequency[char1]+'\n'; 
  });
}
</script>
<noscript>Извините, Javascript отключён или недоступен в вашем браузере</noscript>

04.10.2017, 10:00 [2431 просмотр]


теги: textprocessing javascript статистика сервис

К этой статье пока нет комментариев, Ваш будет первым