Подсчет количества уникальных слов в строках текста.
Программная обработка слов / строк текста в программе Excel.
Любой пользователь компьютера, периодически сталкивается с проблемой обработки текста большой базы данных / или, многострочного офисного Excel документа ... В частности, интересуют вопросы, ответы на которые - нельзя получить стандартными средствами обработки текстовых данных : ...
# Как получить список уникальных / не повторяющихся значений ? ...
# Как подсчитать количество повторяющихся значений в столбце ? ...
# Как подсчитать количество повторений ? ...
# Как посчитать количество одинаковых ячеек ? ...
Ну, и - в том же духе ... Ладно, бы - это я, такой привередливый ... В крайнем случае, до 10 тысяч - могу и ручками посчитать ... Так - нет, же ... Это проблема известная, пусть и не часто встречаемая, но когда приспичит - хоть по компьютеру молотком колоти - он умнее не станет ... Я считаю, что это проблема разработчиков, напихавших всякой хрени в офисный пакет, из которой - 99% пользователей Microsoft Office - никогда не использовали встроенные функции, и понятия не имеют, как их использовать вообще ... А, те - что работают и часто применяются - порой оставляют желать лучшего в прямом смысле этого слова ... Лучшей функциональности ...
Посмотрите, сами - язык сломаешь : ДАТАКУПОНДО (Купондо - это, что за место?) ; ДЛСТР ... ; ДСТАНДОТКЛП (Дуст от клопов?) ... Это только на букву Д и таких примеров / весь список вставки функций - более 440 позиций ... Выговорить трудно - не то, что / запомнить и понять, как работает функция ... Да, при вводе - всплывают подсказки, ну - а толку ? ...
Категории функций, в основном - работают со значениями элементов / индексов (а не с их количеством), и не решают насущных задач ... Финансовые (гроши я и в уме посчитаю), статистика / логика и аналитика (тоже - пусть мозг занимается, главное - не мешать ему в этом), математические (эти - реально могут пригодиться для облегчения расчетов с цифрами) ... Текстовые ... Давайте рассмотрим внимательно ... Специально убил время, чтобы поближе узнать потенциальные возможности обработки текста ...
Задача : в колонке / столбце таблицы Excel - более 400000 (тысяч) строчек / слов - и надо подсчитать, сколько раз повторяются уникальные слова из общего массива текстовых данных ... Сделаем сортировку от А до Я, что дальше ? А, ничего, сиди / считай вручную ... Текстовые функции Excel предлагают для обработки текста : ...
UNICODE - возвращает число / код знака первого символа в тексте ...
БАТТЕКСТ - преобразование числа в текст ...
ДЛСТР - длина строки, количество знаков в строке (иногда применимо для тупого сравнения) ...
ЗАМЕНИТЬ - замена части строки текста ...
ЗНАЧЕН - преобразование текста в число ...
КОДСИМВ - возвращает число / код знака первого символа в тексте ...
ЛЕВСИМВ - возвращает число символов / знаков от начала строки ...
НАЙТИ - возвращает позицию искомой строки в тексте ...
ПЕЧСИМВ - удаление всех непечатаемых символов / знаков из текста ...
ПОВТОР - повтор текста заданное число раз ...
ПОДСТАВИТЬ - замена части строки текста ...
ПОИСК - возвращает позицию искомой строки в тексте / поиск слева направо ...
ПРАВСИМВ - возвращает число символов / знаков от конца строки ...
ПРОПИСН - конвертация всех букв текста в прописные ...
ПРОПНАЧ - конвертация первой буквы каждого слова текста в прописные, остальные - в строчные ...
ПСТР - возвращает заданное количество знаков / символов текста с указанной позиции ...
РУБЛЬ - преобразование текста в число, денежный формат ...
СЖПРОБЕЛЫ - сжать пробелы / удалить все лишние пробелы в тексте, кроме одиночных между словами ...
СИМВОЛ - возвращает символ с заданным кодом ...
СОВПАД - проверка идентичности двух строк текста ; возвращает : ИСТИНА / ЛОЖЬ
СТРОЧН - конвертация всех букв текста в строчные ...
СЦЕПИТЬ - объединение / коннектация нескольких строк текста в одну ...
Т - проверка содержимого ячейки на соответствие : текст ? или нет ...
ТЕКСТ - преобразование / форматирование числа в текст ...
ФИКСИРОВАННЫЙ - преобразование / форматирование числа в текст, с заданным числом десятичных знаков ...
ЧЗНАЧ - преобразование текста в число без учета языкового стандарта ...
ЮНИСИМВ - возвращает знак / символ Unicode, соответствующий числу / коду знака ...
Не густо ... Первое, что бросается в глаза : вернуть код первого символа ... Бред ...Зачем ? А, если - мне нужен третий / или, восьмой ? ... Если сильно не придираться - есть функция сравнения строк СОВПАД () щелкните мышью на точку / квадратик... Но, она - работает с логическими ИСТИНА / ЛОЖЬ значениями ... Как и функция ЕСЛИ () ... Языки программирования - не трогаем, VBS макросы оставим в покое, сводная таблица или диаграмма / курят бамбук - что, остается ? : ЕСЛИ, СУММ, СЧЁТ, СЧЁТЕСЛИ, СУММЕСЛИМН ... Их применение не позволило мне придумать простую и работоспособную конструкцию программного кода для подсчета вхождений / количества уникальных слов в тексте ... Поэтому я плюнул, тщательно растер, и обратил свой взор на привычные системные инструменты Windows - DOS / BAT / CMD командный процессор ...
Программная обработка слов / строк текста в скрипте процессора CMD / Windows.
Неважно, каким путем / обработкой были получены слова (построчно / в столбец) из массива текста (например, используя WinHex, шестнадцатеричный редактор - можно заменить HEX пробел 20 между словами на код 0D0A переноса строки) ... Главное, чтобы в обрабатываемом тексте не встречались специальные и служебные символы и команды, которые нарушают выполнение BAT / CMD скриптов ... Во-первых, это большинство знаков верхнего ряда клавиатуры ... Плюс - еще по мелочи ...
~ ` ! @ # $ % ^ & * ( ) - _ + = \ | / ' " ?
опасные знаки : больше / меньше, одиночная / двойная кавычка, двоеточие ...
Эти символы можно и нужно использовать при разработке CMD скриптов, но только при тщательном контроле и используя экранировку (если они применяются, как текст, а не специальные инструкции и команды) ... В случае обработки огромного массива строк (а, 400000 (тысяч) - это огромное число, в секундах равное 6666 минут, или 111 часов, или 4 с половиной дня ...) - нет возможности лично проконтролировать каждое значение, и поэтому - лучше сразу избавиться от них (в текстовом редакторе / блокноте : CTRL+ H, найти и заменить, заменить все на [пустая строка в качестве аргумента замены]) ... В разных кодировках текста / национальных алфавитах - также могут встречаться символы, расцениваемые командным процессором, как управляющие ...
Примечание : в этом месте, программисты - обычно организовывают проверку на соответствие символа - печатному и отбрасывают непечатные ... Серьезно - даже не представляю, есть ли подобная проверка в CMD ... А если еще учесть разнообразие кодировок текста ...
Не суть ... Скрипт подсчета слов / строк работает следующим образом ... В некоторой временной папке есть несколько файлов : ...
in.txt - исходный набор отсортированных слов / строк для подсчета и анализа количества уникальных словоформ ... Скрипт будет правильно работать только с предварительно отсортированным списком ... Чтобы последнее значение счетчика было записано в файл количества повторений - в файл in.txt, в самый конец - нужно добавить произвольное слово, например stopword ... Если слово / заглушку не добавлять - достигнув EOF / конца файла - цикл завершит выполнение без сработки на новое слово и последний счет счетчика не будет записан в файл (обусловлено программным кодом сценария скрипта) ...
inout.cmd - собственно / CMD скрипт, который рассмотрим ниже ...
null.txt - пустой файл ... используется для автоматической очистки выходных файлов при новом / следующем запуске скрипта ...
outnum.txt - выходной файл для счетчика повторений слова ...
outtxt.txt - выходной файл для уникального слова / строки ...
tmp.xlsx - временный файл Excel для сортировки и анализа (при необходимости) ...
Вывод результатов в два файла outnum.txt и outtxt.txt сделан для облегчения программного кода скрипта и не мешает совершать / получать успешный подсчет слов и строк в тексте ... Скрипт подсчета количества слов содержит следующие строки программного кода : ...
CHCP 1251 ... Для работы с текстом в кодировке Windows-1251 / русский ... Применяется при необходимости ...
COPY null.txt outnum.txt ...
COPY null.txt outtxt.txt ...
При каждом запуске скрипта - старые выходные файлы очищаются / заменяются (пере записываются) пустым файлом ...
SET OLD=nullword ... Это слово / заглушка - нужно для выравнивания строк в выходных файлах, чтобы слово и его значение - совпадали ... Обосновано работой логики скрипта ...
SET CNT=11 ... При установке счетчика в 0 или 1 - происходит сбой команды ECHO ... Для устойчивой работы скрипта - значение счетчика было умышленно увеличено на +10, что может быть учтено при анализе результатов ...
ECHO %OLD% перенаправляется в outtxt.txt ... Запись выравнивающего строки слова в файл слов / строк ...
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION ... Включение режима локальной / расширенной обработки команд и отложенного расширения переменной среды для обработки переменных в режиме реального времени ... Переменные изменяют знак отображения с %x% (значение известно только после работы сценария, особенно в циклах) на !x! - значение известно сразу после расчета, в реальном времени ...
FOR /F %%I IN (in.txt) DO ( ... Запуск цикла для построчного считывания и обработки слов / строк из файла / источника ...
IF !OLD!==%%I (SET /A CNT=!CNT!+1) ... Если слово одинаковое с предыдущим / не изменилось - увеличить счетчик на +1 ...
REM ECHO Old !OLD! ; Word %%I ; Counter !CNT! ... Отладочная строка ... Можно удалить ... Раскомментировать REM строки, чтобы пошагово и наглядно увидеть, как происходит обработка входных слов и заполнение выходных файлов ...
IF NOT !OLD!==%%I ( ... Если слово изменилось - выполнить следующие действия ...
ECHO !CNT! перенаправить в outnum.txt ... Записать в файл значение счетчика для предыдущего слова ...
REM outnum.txt ... Отладочная строка ... Можно удалить ...
SET CNT=11 ... Установить / сбросить счетчик в псевдо нулевое значение ...
ECHO %%I перенаправить в outtxt.txt ... Записать новое слово в файл слов / строк ...
REM outtxt.txt ... Отладочная строка ... Можно удалить ...
SET OLD=%%I ... Установить новое слово - предыдущим / для будущего сравнения ...
) ... Завершение конструкции обработки для нового слова ...
Продолжение работы цикла построчного считывания слов из файла / источника ...
) ... Завершение цикла построчного считывания слов ... Если не было ошибок при чтении - исходный файл прочитан полностью / до конца ...
ENDLOCAL Завершение локализации рабочей среды CMD ...
EXIT ... Завершение работы интерпретатора команд / файла сценария ...
Результатом обработки слов CMD скриптингом - будут два OUT / выходных файла : со словами и с количеством / счетчиком повторений ... Чтобы иметь возможность сортировки, обработки и анализа полученного результата - можно открыть временный Excel файл и скопировать содержимое файлов в таблицу, например : ...
в столбец A - уникальные слова ...
в столбец B - значение счетчика количества повторов ...
В обоих файлах записи синхронизированы так что - проблем с копированием / вставкой быть не должно ...
Получится примерно такая Excel таблица, из которой явно видно, что слово скрипт встречалось в тексте 294 раза, а слово CMD - всего 161 раз ... Если вам нужны предельно точные значения - заполните в столбце C (ячейке C1) - формулу ...
=B1-10 ... Введенная в скрипте поправка будет вычтена из суммы подсчетов ...
Точка / квадратик в правом нижнем углу ячейки с формулой ... Щелкнуть на нее мышью, чтобы продлить ее действие - на все, следующие вниз - автоматически заполнить ячейки формулой по образцу первой ячейки ...
В столбце $B будет условно / сравнительный, а в столбце $C - точный результат подсчета количества слов по строкам ...
A B C nullword 11 1 скрипт 294 284 CMD 161 151 BAT 193 183 строка 189 179 слово 265 255 stopword -10
Используя Excel - можно вертеть полученной таблицей, "как угодно" : сортировкой найти максимум и минимум, самое часто употребляемое слово по-русски или самое редкое слово по-английски ... Таким образом, используя встроенные средства BAT / CMD программирования Windows, WinHex и Excel - можно относительно легко решить задачу по подсчету уникальных вхождений слов в текст значительного объема, не утруждая себя изучением сложных языков программирования высокого уровня и решением, связанных с ними, проблем ...
август, 2019 ...
Раздел computer : список всех страниц ...