|
Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » Разное - Как в файле Word найти дубликаты наборов символов (кусков текста) |
|
|
Разное - Как в файле Word найти дубликаты наборов символов (кусков текста)
|
Пользователь Сообщения: 58 |
Здравствуйте.
Подскажите, кто знает: Как в файле Word найти дубликаты наборов символов (кусков текста) с минимальной длиной, заданной в качестве параметра. Сами наборы символов не задаются - они программно обнаруживаются в тексте, ограничиваясь лишь их минимальной длиной. Возьмем для примера такой тест: "Мой дядя самых честных правил, Когда не в шутку занемог, Он уважать себя заставил И лучше выдумать не мог самых честных. Его пример другим наука; Но, боже мой, какая скука С больным сидеть и день и ночь, самых честных Не отходя ни шагу прочь!" В качестве параметра минимальной длины набора совпадающих символов примем например 10. Тогда программа должна найти и указать (подсветкой или еще как-то) три вхождения "самых чест" (отмечены жирным шрифтом на примере). Если таких дубликатов (разных дубликатов имеется ввиду) будет несколько, то программа должна сначала показать их список, а потом, когда пользователь выберет интересующее его текст дубликата, показать в общем тексте все его вхождения (напр.все тем же цветом). Далее можно посмотреть второй набор дубликатов и т.д. Существуют ли в природе такие программы? |
|
Отправлено: 15:30, 20-11-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sl.oleg@fb:
|
|
Отправлено: 16:03, 20-11-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 58
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
_самых честных - 2 шт самых честных - 3 шт самых честных - 3 шт самых честных - 3 шт самых честных_ - 2 шт » Как вариант - так как вы отметили, но я бы предпочел, чтоб программа блокировала проверку внутри первого набора найденный дубликатов. Или же подобные коллизии должны разруливаться на уровне настроек (учитывать/НЕучитывать пробелы или знаки конца абзаца, конца строки и т.п.; искать/НЕискать внутри найденных дубликатов; расширять/НЕрасширять выделение дубликатов на всю строку, характерную для совпадений (в моем примере до "самых честных" - опять-таки включать здесь или не включать пробел в выделение - настраивать опционально). |
Последний раз редактировалось sl.oleg@fb, 20-11-2016 в 16:24. Отправлено: 16:12, 20-11-2016 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата sl.oleg@fb:
Цитата sl.oleg@fb:
|
||
Отправлено: 16:38, 20-11-2016 | #4 |
Пользователь Сообщения: 58
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
Может, Вы расскажете, для каких целей сие Вам вообще потребно? » Есть некий документ, в котором довольно неструктурно и хаосно хранятся текстовые данные, ну (для примера) кулинарные рецепты. В этот документ добавляли всяко-разно без какой-либо систематизации, т.о. рецепт "Салат оливье" может входить и два и три раза. Причем, как я писал, данные хранятся безсистемно и может быть ситуация, когда описание следующего рецепта идет не с новой строки, поэтому отсортировать строки в Excel, а потом удалить дубли его инструментами - не вариант. К тому же т.к. описания текстовые, то внутри одного рецепта может быть несколько абзацев, а значит один рецепт будет представлен несколькими строками (с точки зренеия электронных таблиц) и при этом программно определить где заканчивается один рецепт и начинается другой - невозможно - только по контексту. Задача: почистить данный документ, удалив из него дубликаты. Чистить будем ручками, но дубли надо найти автоматически, т.к. перебирать ВСЕ названия рецептов "руками" - очень долго и хотелось бы хотя бы частично этот процесс автоматизировать. Условимся, что сами названия рецептов (целевой контекст) у нас довольно длинные и не будут конфликтовать с, например, ингредиентами рецептов, которые могут повторяться от рецепта к рецепту (потому что эти ингредиенты гораздо короче названий рецептов и будут отсеяны за счет минимальной длины строки поиска). |
|
Последний раз редактировалось sl.oleg@fb, 20-11-2016 в 17:01. Отправлено: 16:55, 20-11-2016 | #5 |
Модератор Сообщения: 16852
|
Профиль | Сайт | Отправить PM | Цитировать sl.oleg@fb, почему рубрику для названия темы вы выбрали "Разное", хотя наверняка работаете в определенной версии Word? Если она выше 2007, то при нажатии Ctrl+F слева появляется навигационная панель с результатами поиска. С ее помощью отыскать нужные фрагменты не представляет труда. Ну а удалять дубликаты, уж извольте, ручками.
|
------- Отправлено: 17:15, 20-11-2016 | #6 |
Пользователь Сообщения: 58
|
Профиль | Сайт | Отправить 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 |
Новый участник Сообщения: 22
|
Профиль | Сайт | Отправить 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
|
Профиль | Сайт | Отправить PM | Цитировать Ещё не пробовал, но попробую! Жесть
![]() ![]() Я правильно понял: в вашем примере верхняя формула находит все вхождения, которые имеют дубликаты в тексте длиной не менее 2-х символов, а в нижнем - не менее 3-х символов? Только я не понял зачем здесь что-то на что-то меняется? Мне же надо просто найти дубликаты, заменять их не надо, а что такое \1\2 ? Попробовал, к сожалению не работает на моем примере - не находит вхождение "самых чест" (при установке {4;} в {10;}). Методом проб понял, что формула игнорирует все дубли, если в них присутствуют какие либо символы, кроме букв (напр.пробелы, подчеркивания и т.п.) ![]() |
Последний раз редактировалось okshef, 22-11-2016 в 09:41. Причина: для цитирования выделите текст и нажмите кнопку "Цитировать" Отправлено: 08:37, 22-11-2016 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Methodichka, удалять не надо. Надо просто найти примерные дубликаты «заголовков», а удаляться будут гораздо более крупные фрагменты текста. Посему не Ctrl-H, а просто Ctrl-F. Далее, к сожалению, находятся не просто повторы, а весь интервал текста между повторами (включая и сами повторы). Три повторения также бессмысленно искать по изложенным причинам.
Тем не менее, Ваша идея мне весьма нравится, и я полагаю, что пока это наиболее приемлемый вариант для полуавтоматического поиска дубликатов. Ctrl-Home, Ctrl-F, Enter — нашли, Esc, смотрим на начало выделения. Посмотрели, нажали Left, перешли в точку конца выделения (со снятием оного) и, соответственно, найденного дубликата текста. Смотрим, оцениванием, при надобности выделяем потребное, удаляем. Ctrl-Home, Ctrl-F… — ищем дальше. Цитата sl.oleg@fb:
Цитата sl.oleg@fb:
Цитата Methodichka:
Цитата sl.oleg@fb:
Цитата Methodichka:
|
|||||
Последний раз редактировалось Iska, 22-11-2016 в 10:28. Причина: Исправлена существенная ошибка Отправлено: 09:08, 22-11-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|