БлогNot. Javascript: определяем количество слов в документе и составляем из них массив

Javascript: определяем количество слов в документе и составляем из них массив

Тоже парсинг текста, только не такой примитивный, как в начале блога.

Цель - получить список слов из всего документа или нужного раздела, избавиться от тегов и пустых строк, затем определить количество слов и, если нужно, положить их в массив.

В простейшем случае, конечно, возможно и однострочное решение:

alert (document.body.innerText.split(/\s+/).length);

где-нибудь в теге скрипта.

Но грамотнее, конечно, будет написать рекурсивный метод для получения списка слов и немного пофильтровать контент страницы.

<html>
<body>
 <div id="content">
  Lorem ipsum dolor sit <b>a<i>me</i>t</b>
 </div>
<script type="text/javascript">
function getNodeText (item) {
 value = "";
 var length = item.childNodes.length;
 for (var i = 0; i < length; i++) {
  var node = item.childNodes[i];
  if (node.nodeType != 8) {
   value += node.nodeType != 1 ? node.nodeValue : getNodeText(node);
  }
 }
 return value;
}

var words = getNodeText(document.getElementById('content'));
      //или getNodeText(document.getElementsByTagName('body')[0]); для всего тега body
words = words.replace (/<\/?[^>]+(>|$)/g, ""); //Удалить теги
var wordsarr=words.split(/\s+/); //Разбить по пробельному разделителю
wordsarr = wordsarr.filter(function(n) { return n != undefined && n != ''}); //Отфильтровать пустые элементы

var count = wordsarr.length; //Найти количество слов

//Разобрать массив по нужному формату и показать в окне диалога
var result = '';
wordsarr.forEach (
 function (item, i, arr) { result += i + ': "' + item + '"' + "\n"; }
);
result += 'Count=' + count;
alert (result);

</script></body></html>

Пример можно запустить, сохранив листинг как файл типа .html. Требуется Javascript 1.6 и выше, в частности, для того, чтобы работал метод filter.

Ниже прикреплён онлайн-скрипт в кодировке Юникода utf-8, подсчитывающий количество слов в поле ввода и составляющий из них список, исходник - почти такой же (см. в исходнике страницы), только нет нужды рекурсивно обходить узлы, поскольку текст для обработки берётся из многострочного текстового поля.

Скрипт также фильтрует из слов всё, кроме алфавитно-цифровых символов (учитывается только стандартная латиница и кириллица), дефиса и подчёркивания.

 Онлайн-подсчёт количества слов, разделённых пробелами или переводами строки, кодировка Юникод (UTF-8)

Если мы хотим разбивать текст на слова не по пробельному, а по любому не-буквенному разделителю, для русского и английского языков это можно сделать, например, так:

var wordsarr=words.split(/[^а-яА-ЯёЁa-zA-Z]/);

(показан только изменённый оператор метода doParsing).

"Обратная задача" - слить все строки текста в одну - решается в этой заметке. См. также: строим частотную таблицу символов "на лету", составить частотную таблицу слов в документе.

Вот ещё небольшое приложение по теме - "Анализатор текста с составлением частотной таблицы слов" (открывается в текущей вкладке браузера, сортирует список слов по алфавиту, учитывает основные знаки препинания):

 WordsFreqTable.html (5 Кб)

12.04.2017, 22:58 [4347 просмотров]


теги: textprocessing javascript список сервис

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