Очистка текста — в помощь копирайтеру
В этой статье я приведу пример написания небольшой обработки, для облегчения вычищения мусора из текста. Статья подойдет начинающим копирайтерам, рерайтерам и просто людям, регулярно работающим с большими текстами.
- Описание
- Подробнее
Описание
Просьба строго не судить за описанный в этой статье код. Код, возможно, будет интересен начинающим программистам 1С или VBA и совсем не интересен профессионалам.
Начну сразу с постановки задачи:
Пусть у Вас имеется текст достаточно большого объёма, который необходимо очистить от мусорных знаков. Делается это с помощью обычной текстовой замены. Ниже таблица какой текст нам необходимо заменить:
Изначально ищем такой текст | Делаем замену на этот текст |
Два или более переноса новой строки | Один перенос строки |
Пробел + Знак препинания | Знак препинания |
Буква + Знак препинания + Буква | Буква + Знак препинания + Пробел + Буква |
Несколько пробелов подряд | Один пробел |
Пробел + Служебный знак | Служебный знак |
Пробел + Закрывающаяся скобка | Закрывающаяся скобка |
Где знаки препинания это — !?;:,.
Закрывающаяся скобка — )]>}
Служебный знак это — +-=
Если сложить все возможные вариации знаков для поиска, их получается очень много и делать такие замены вручную, то это буквально "Мартышкин труд".
Я обычно тестирую на текстовых файлах пять — семь мегабайт, — поверьте это достаточно большие объёмы текста. После такой "чистки" вставляю в программы проверки синтаксических ошибок (например, "ОРФО") и далее выкладывается на сайты, или конвертируется в другие файлы — FB Reader, Microsoft Word. Обычный Microsoft Word очень часто отключает проверку ошибок на больших текстах, из-за их громадного количества, поэтому прежде чем вставлять Ваш текст в любую другую программу, нужно очистить обязательный мусор.
Вообще ранее у меня был написан код на VBA для MS Word, но я сильно удивился, что код написанный на 1С при обработке одного и того же текста отрабатывал на домашнем компьютере быстрее. Может, конечно код рознится, но в целом смысл тот же, далее по тексту я приведу и код на VBA.
Собственно реализация алгоритма на 1С сводится к созданию массива из знаков подстановки с дальнейшей заменой каждого из этих знаков на более подходящий. Создадим внешнюю обработку, с одним единственным реквизитом "Текст", строка неограниченной длинны. Затем создадим форму и выведем этот реквизит на форму.
Откроем форму в конфигураторе реквизиту "Текст" проставим свойство вид — Поле ввода. Далее добавим реквизит формы "РасставлятьЗН" тип Булево, свойство Заголовок — Расставлять правильно пробелы между знаками препинания. Так же создадим команду "Чистка текста", на клиенте.
Затем перейдём на вкладку Модуль, для редактирования модуля формы. И отредактируем текст процедуры ЧисткаТекста():
&НаКлиенте
Процедура ЧисткаТекста(Команда)
Если ЭтаФорма.РасставлятьЗН = Истина Тогда
ЗаменаЗнака = Новый Массив;
ЗаменаЗнака.Добавить(".");
ЗаменаЗнака.Добавить(",");
ЗаменаЗнака.Добавить("!");
ЗаменаЗнака.Добавить("?");
ЗаменаЗнака.Добавить(":");
ЗаменаЗнака.Добавить(";");
ЗаменаЗнака.Добавить("-");
ЗаменаЗнака.Добавить("+");
ЗаменаЗнака.Добавить("=");
Для Каждого СтрокаПоискаЗН Из ЗаменаЗнака Цикл
ТекстЗаменыЗН = " " + СтрокаПоискаЗН + " ";
Объект.Текст = СтрЗаменить(Объект.Текст, СтрокаПоискаЗН, ТекстЗаменыЗН);
КонецЦикла;
ЗаменаЗнака.Очистить();
КонецЕсли;
Замена = Новый Массив;
Замена.Добавить(Символы.ПС+Символы.ПС+Символы.ПС+Символы.ПС);
Замена.Добавить(Символы.ПС+Символы.ПС+Символы.ПС);
Замена.Добавить(Символы.ПС+Символы.ПС);
Замена.Добавить(" ");
Замена.Добавить(" ");
Замена.Добавить(" ");
Замена.Добавить(" .");
Замена.Добавить(" ,");
Замена.Добавить(" !");
Замена.Добавить(" ?");
Замена.Добавить(" )");
Замена.Добавить(" ]");
Замена.Добавить(" }");
Замена.Добавить(" >");
Замена.Добавить(" ;");
Замена.Добавить(" :");
Для Каждого СтрокаПоиска Из Замена Цикл
ТекстЗамены = Прав(СтрокаПоиска, 1);
Объект.Текст = СтрЗаменить(Объект.Текст, СтрокаПоиска, ТекстЗамены);
КонецЦикла;
Замена.Очистить();
КонецПроцедурыДалее просто заходим в 1С: Предприятие любой конфигурации на управляемых формах. Открываем обработку из Меню -> Файл открыть.
Принцип работы обработки простой — вставляете не отформатированный текст в поле "Текст" и нажимаете на кнопку "Очистка текста". После того как поле "Текст" станет доступно (у меня на компьютере это пара секунд) из этого же поля можно скопировать готовый обработанный текст.
Используйте обработку 1С для работы с обычным текстом простых кодировок, а вот если исходный тест "набит" под завязку спец символами (рожицы, крышечки, смесь символов Unicode), то лучше использовать макрос VBA для Word.

Как видите всё работает достаточно примитивно. Создаем массив элементов поиска для замены, потом из каждого элемента получаем строку замены и подставляем в типовую функцию СтрЗаменить.
Поскольку используются функции языка 1С прекрасно работающие &НаКлиенте, мы можем обойтись без серверного вызова.
Если вы планируете использовать обработку 1С постоянно и в типовых конфигурациях. То в модуль объекта добавьте код для регистрации этой обработки.

