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, подсчитывающий количество слов в поле ввода и составляющий из них список, исходник - почти такой же (см. в исходнике страницы), только нет нужды рекурсивно обходить узлы, поскольку текст для обработки берётся из многострочного текстового поля.
Скрипт также фильтрует из слов всё, кроме алфавитно-цифровых символов (учитывается только стандартная латиница и кириллица), дефиса и подчёркивания.
Если мы хотим разбивать текст на слова не по пробельному, а по любому не-буквенному разделителю, для русского и английского языков это можно сделать, например, так:
var wordsarr=words.split(/[^а-яА-ЯёЁa-zA-Z]/);
(показан только изменённый оператор метода doParsing
).
"Обратная задача" - слить все строки текста в одну - решается в этой заметке. См. также: строим частотную таблицу символов "на лету", составить частотную таблицу слов в документе.
Вот ещё небольшое приложение по теме - "Анализатор текста с составлением частотной таблицы слов" (открывается в текущей вкладке браузера, сортирует список слов по алфавиту, учитывает основные знаки препинания):
WordsFreqTable.html (5 Кб)
12.04.2017, 22:58 [4475 просмотров]