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 [2532 просмотра]