Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » Разное - Как в файле Word найти дубликаты наборов символов (кусков текста)

Ответить
Настройки темы
Разное - Как в файле Word найти дубликаты наборов символов (кусков текста)

Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: sl.oleg@fb
Дата: 20-11-2016
Здравствуйте.
Подскажите, кто знает:
Как в файле Word найти дубликаты наборов символов (кусков текста) с минимальной длиной, заданной в качестве параметра. Сами наборы символов не задаются - они программно обнаруживаются в тексте, ограничиваясь лишь их минимальной длиной.
Возьмем для примера такой тест:

"Мой дядя самых честных правил,
Когда не в шутку занемог,
Он уважать себя заставил
И лучше выдумать не мог самых честных.
Его пример другим наука;
Но, боже мой, какая скука
С больным сидеть и день и ночь,
самых честных Не отходя ни шагу прочь!"

В качестве параметра минимальной длины набора совпадающих символов примем например 10.
Тогда программа должна найти и указать (подсветкой или еще как-то) три вхождения "самых чест" (отмечены жирным шрифтом на примере).
Если таких дубликатов (разных дубликатов имеется ввиду) будет несколько, то программа должна сначала показать их список, а потом, когда пользователь выберет интересующее его текст дубликата, показать в общем тексте все его вхождения (напр.все тем же цветом). Далее можно посмотреть второй набор дубликатов и т.д.
Существуют ли в природе такие программы?

Отправлено: 15:30, 20-11-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата sl.oleg@fb:
Тогда программа должна найти и указать (подсветкой или еще как-то) три вхождения "самых чест" (отмечены жирным шрифтом на примере). »
А также:
Код: Выделить весь код
_самых честных - 2 шт
самых честных - 3 шт
самых честных - 3 шт
самых честных - 3 шт
самых честных_ - 2 шт

Отправлено: 16:03, 20-11-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
_самых честных - 2 шт самых честных - 3 шт самых честных - 3 шт самых честных - 3 шт самых честных_ - 2 шт »

Как вариант - так как вы отметили, но я бы предпочел, чтоб программа блокировала проверку внутри первого набора найденный дубликатов.
Или же подобные коллизии должны разруливаться на уровне настроек (учитывать/НЕучитывать пробелы или знаки конца абзаца, конца строки и т.п.; искать/НЕискать внутри найденных дубликатов; расширять/НЕрасширять выделение дубликатов на всю строку, характерную для совпадений (в моем примере до "самых честных" - опять-таки включать здесь или не включать пробел в выделение - настраивать опционально).

Последний раз редактировалось sl.oleg@fb, 20-11-2016 в 16:24.


Отправлено: 16:12, 20-11-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата sl.oleg@fb:
Как вариант - так как вы отметили, но я бы предпочел, чтоб программа блокировала проверку внутри первого набора найденный дубликатов. »
Угу. Вот только опять-таки, имейте в виду: первым найденным будет не то, что Вы указали — «самых чест», а «пробелсамых чес».

Цитата sl.oleg@fb:
Или же подобные коллизии должны разруливаться на уровне настроек (учитывать/НЕучитывать пробелы или знаки конца абзаца, конца строки и т.п.; искать/НЕискать внутри найденных дубликатов; расширять/НЕрасширять выделение дубликатов на всю строку, характерную для совпадений (в моем примере до "самых честных" - опять-таки включать здесь или не включать пробел в выделение - настраивать опционально). »
Может, Вы расскажете, для каких целей сие Вам вообще потребно?

Отправлено: 16:38, 20-11-2016 | #4


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Может, Вы расскажете, для каких целей сие Вам вообще потребно? »
Есть некий документ, в котором довольно неструктурно и хаосно хранятся текстовые данные, ну (для примера) кулинарные рецепты. В этот документ добавляли всяко-разно без какой-либо систематизации, т.о. рецепт "Салат оливье" может входить и два и три раза. Причем, как я писал, данные хранятся безсистемно и может быть ситуация, когда описание следующего рецепта идет не с новой строки, поэтому отсортировать строки в Excel, а потом удалить дубли его инструментами - не вариант. К тому же т.к. описания текстовые, то внутри одного рецепта может быть несколько абзацев, а значит один рецепт будет представлен несколькими строками (с точки зренеия электронных таблиц) и при этом программно определить где заканчивается один рецепт и начинается другой - невозможно - только по контексту.
Задача: почистить данный документ, удалив из него дубликаты. Чистить будем ручками, но дубли надо найти автоматически, т.к. перебирать ВСЕ названия рецептов "руками" - очень долго и хотелось бы хотя бы частично этот процесс автоматизировать. Условимся, что сами названия рецептов (целевой контекст) у нас довольно длинные и не будут конфликтовать с, например, ингредиентами рецептов, которые могут повторяться от рецепта к рецепту (потому что эти ингредиенты гораздо короче названий рецептов и будут отсеяны за счет минимальной длины строки поиска).

Последний раз редактировалось sl.oleg@fb, 20-11-2016 в 17:01.


Отправлено: 16:55, 20-11-2016 | #5


Модератор


Moderator


Сообщения: 16852
Благодарности: 3247

Профиль | Сайт | Отправить PM | Цитировать


sl.oleg@fb, почему рубрику для названия темы вы выбрали "Разное", хотя наверняка работаете в определенной версии Word? Если она выше 2007, то при нажатии Ctrl+F слева появляется навигационная панель с результатами поиска. С ее помощью отыскать нужные фрагменты не представляет труда. Ну а удалять дубликаты, уж извольте, ручками.

-------
При заполнении сведений о конфигурации компьютера не забудь поставить флажок: отображать - "Да"
-------------------------------------------------------------------------------------------
Ассоциация VirusNet - помощь и обучение борьбе с вирусами. Некоторые вопросы загрузки в моем блоге


Отправлено: 17:15, 20-11-2016 | #6


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата okshef:
Ctrl+F слева появляется навигационная панель с результатами поиска. С ее помощью отыскать нужные фрагменты не представляет труда. »

Что именно вы советуете вводить в строку поиска после Ctrl-F ? Вам известно какие именно строки дублированы? И мне нет. Тогда что ж - перебирать все вручную, со сдвигом строки поиска на один символ при каждом последующем поиске? Для файла размером в 1 МБ (а у меня файлы поболе гораздо) нужно осуществить этих поисков около одного миллиона, при затрате времени на один поиск (с учетом ввода контекста и его учета) скажем 10 секунд и работе по 8 часов в день, понадобится 347 рабочих дней. А дублей в этом файле может быть 2-3 десятка, т.о. если знать какие именно данные задублированы, то файл чистится уже не в течение года, а в течение десяти минут. Разница ясна? Прочитайте пожалуйста пост внимательно (особенно то, что я повторил ниже), прежде, чем писать в него что-либо.
Цитата sl.oleg@fb:
Сами наборы символов не задаются - они программно обнаруживаются в тексте, ограничиваясь лишь их минимальной длиной. »

А версии Word на разных компах стоят разные (2007 и 2010), работать люди будут разные, поэтому привязаться к конкретной версии не представляется возможным.

Последний раз редактировалось sl.oleg@fb, 20-11-2016 в 17:44.


Отправлено: 17:35, 20-11-2016 | #7


Аватара для Methodichka

Новый участник


Сообщения: 22
Благодарности: 7

Профиль | Сайт | Отправить PM | Цитировать


Поиск и удаление повторяющихся фрагментов текста на русском языке, длинной от 4-х букв:
1. Диалог "Найти и заменить" (Ctrl + H).
2. Поле "Найти": ([А-ЯЁа-яё]{4;})(*)\1
3. Поле "Заменить на": \1\2
4. Кнопка "Больше" > Активируем флаг "Подстановочные знаки"

Думаю, принцип понятен. Замечу, что учитывается регистр букв.

Или вот пример для трех повторений:
Найти: ([А-ЯЁа-яё]{4;})(*)\1(*)\1
Заменить: \1\2\3
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:38, 22-11-2016 | #8


Пользователь


Сообщения: 58
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Ещё не пробовал, но попробую! Жесть , а можно ссылку на описание всей этой китайской грамоты , т.е. что здесь что обозначает в приведенной вами строке, как самому такие строки писать.

Я правильно понял: в вашем примере верхняя формула находит все вхождения, которые имеют дубликаты в тексте длиной не менее 2-х символов, а в нижнем - не менее 3-х символов?
Только я не понял зачем здесь что-то на что-то меняется? Мне же надо просто найти дубликаты, заменять их не надо, а что такое \1\2 ?

Попробовал, к сожалению не работает на моем примере - не находит вхождение "самых чест" (при установке {4;} в {10;}). Методом проб понял, что формула игнорирует все дубли, если в них присутствуют какие либо символы, кроме букв (напр.пробелы, подчеркивания и т.п.) Очень жаль. Может можно как-то доработать формулу, чтоб она искала корректно любые вхождения (с пробелами, тире, запятыми, концами абзаца и т.п.)?

Последний раз редактировалось okshef, 22-11-2016 в 09:41. Причина: для цитирования выделите текст и нажмите кнопку "Цитировать"


Отправлено: 08:37, 22-11-2016 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Methodichka, удалять не надо. Надо просто найти примерные дубликаты «заголовков», а удаляться будут гораздо более крупные фрагменты текста. Посему не Ctrl-H, а просто Ctrl-F. Далее, к сожалению, находятся не просто повторы, а весь интервал текста между повторами (включая и сами повторы). Три повторения также бессмысленно искать по изложенным причинам.

Тем не менее, Ваша идея мне весьма нравится, и я полагаю, что пока это наиболее приемлемый вариант для полуавтоматического поиска дубликатов. Ctrl-Home, Ctrl-F, Enter — нашли, Esc, смотрим на начало выделения. Посмотрели, нажали Left, перешли в точку конца выделения (со снятием оного) и, соответственно, найденного дубликата текста. Смотрим, оцениванием, при надобности выделяем потребное, удаляем. Ctrl-Home, Ctrl-F… — ищем дальше.

Цитата sl.oleg@fb:
а можно ссылку на описание всей этой китайской грамоты , т.е. что здесь что обозначает в приведенной вами строке, как самому такие строки писать. »
Во встроенной документации к Microsoft Office есть, идущей в комплекте. Нажимаете Ctrl-F, затем F1 и читаете, переходя по ссылкам.

Цитата sl.oleg@fb:
Я правильно понял: в вашем примере верхняя формула находит все вхождения, которые имеют дубликаты в тексте длиной не менее 2-х символов »
Неправильно. Там же сказано — четырёх от четырёх и выше:
Цитата Methodichka:
… длинной от 4-х букв…
2. Поле "Найти": ([А-ЯЁа-яё]{4;})(*)\1 »
Цитата sl.oleg@fb:
а в нижнем - не менее 3-х символов? »
А в нижнем — тоже четырёх от четырёх и выше:
Цитата Methodichka:
Найти: ([А-ЯЁа-яё]{4;})(*)\1(*)\1 »
Но нижний (поиск сразу трёх повторов) Вам и не нужен, ибо второй повтор, «средний» между первым и третьим повторами будет лежать где-то внутри выделения. Используйте первый вариант для поиска двух повторов потребной длины. Третий повтор и все последующие (четвёртый, пятый и т.д.) Вы и так найдёте при повторном поиске тех же двух повторов.

Последний раз редактировалось Iska, 22-11-2016 в 10:28. Причина: Исправлена существенная ошибка


Отправлено: 09:08, 22-11-2016 | #10



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » Разное - Как в файле Word найти дубликаты наборов символов (кусков текста)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] в файле найти дату, скопировать символы, дописать перед символами в другом файле sucher Скриптовые языки администрирования Windows 7 10-03-2016 17:42
VBS/WSH/JS - [решено] Замена определённых символов и вставка текста. aggressor_ Скриптовые языки администрирования Windows 9 29-05-2012 15:06
CMD/BAT - Как проверить наличие текста в файле mamont1 Скриптовые языки администрирования Windows 6 16-09-2010 16:32
[решено] Найти и заменить в текстовом файле. Как? Pozia AutoIt 15 11-03-2010 19:12
Разное - Различные кодировки символов в одном файле EvgeniyQQQ Программирование и базы данных 3 21-05-2009 06:49




 
Переход