Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

Алгоритм удаления лишних пробелов в словах : Программирование

06.05.2024 23:27


19.03.2024 15:38
OlegON
 
Не успеваю сосредоточиться, может, кому-то интересно будет подумать, каким может быть алгоритм удаления лишних пробелов в фразах типа.

Код:
П р о с т о  текст и  е щ е  т е к с т
суть сложности, наверное, только в определении сюзов и предлогов... На выходе, собственно, должно получиться

Код:
Просто текст и еще текст
При этом повторный прогон по фразе ее корежить не должен.
20.03.2024 08:14
Shift
 
В лоб, мне кажется, никак.
Пример:
п р о с т и т е
Что должно получиться?
простите или прост и те?
20.03.2024 08:36
volk13
 
я заметил, что в словах по одному пробелу, а между словами - по два пробела, но есть одно исключение - один пробел между "текст" и "и", поэтому - если убрать по одному пробелу после каждой буквы, то получится так:

Просто тексти еще текст
20.03.2024 13:27
OlegON
 
Суть - попытка нормализовать текст после того, как спамеры начинают пихать пробелы, чтобы обойти шаблоны.
Первая идея была вообще пробелы убрать, но "продам" и "про дам" все же совсем разные вещи.
Цитата:
Shift п р о с т и т е
тут, видимо, все же отсутствует двойной пробел, потому слово без разделений должно получиться, я потому и обратился за помощью, что задача пока выглядит нерешаемой, особенно в рамках моментальной оценки
Цитата:
volk13 Просто тексти еще текст
вот, да, видимо, эти ложные срабатывания придется принять, как данность... и это еще несмертельно...
Сначала думал просто считать отношение количество одиночных и двойных пробелов к общему количеству символов и, если их достаточно много, то просто вообще убирать все одиночные пробелы, но, что-то мне кажется, это не будет работать, особенно в варианте, когда пробелами разделяется только спам-слово. Был еще вариант в голове, идем с конца строки, и если символ в текущей позиции и пробелы справа и слева, то пробел справа удаляем. Это как раз, как мне кажется, даст вариант вроде "тексти"
20.03.2024 14:34
student
 
Цитата:
OlegON все же отсутствует двойной пробел
тогда просто - заменяешь все двойные пробелы на что ни будь, потом убираешь оставшиеся одиночные и далее вместо чего ни будь вставляешь одиночные пробелы
20.03.2024 15:09
vdm
 
А в каких текcтах "легально" используется разбивка букв пробелами. Может вообще резать все, где много групп символ-пробел-символ-пробел-символ?
20.03.2024 16:30
baggio
 
Алгоритм простой.
Если идет подряд более 3 букв по сторонам которых пробел - вывешивать тряпку - Напиши по человечески.
три это для того чтобы хоть какие матные слова писать было моно)))))
20.03.2024 17:10
OlegON
 
Цитата:
student заменяешь все двойные пробелы на что ни будь, потом убираешь оставшиеся одиночные
это если исходить из того, что текст исключительно такого стиля... а как это определить?
Цитата:
vdm А в каких текcтах "легально" используется разбивка букв пробелами.
сначала чуть не хлопнул себя по лбу, насколько понравилась идея, но потом понял, что те, кто попробуют через этот фильтр пропустить код что-то вроде x = x + 1, меня четвертуют. Да и в принципе навязывать оформление - моветон, придется каждому второму объяснять, почему и за что.
Цитата:
baggio Алгоритм простой
все не так просто, как кажется... :) Особенно, если рассматривать, что поменять могут только одно слово. Например "Я добрый человек, но злой с п а м е р"
20.03.2024 17:26
volk13
 
Цитата:
OlegON код что-то вроде x = x + 1
ну, если есть знаки арифметики и числа - то это можно тогда пропускать
по остальному - если попадается более чем определённое кол-во (сам определи) подряд следующих друг за другом "буква"+"пробел" - то выдавать предупреждение с требованием нормализовать текст, ну и не пропускать такое сообщение ..
20.03.2024 19:04
baggio
 
Цитата:
OlegON
все не так просто, как кажется... :) Особенно, если рассматривать, что поменять могут только одно слово. Например "Я добрый человек, но злой с п а м е р"
По моему алгоритму данное сообщение не должно пройти фильтрацию.... не вижу проблем
Часовой пояс GMT +3, время: 23:27.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.