Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм нахождения слов в тексте, есть ли такой? 
:(
    Опции темы
al1ve
Дата 15.2.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



здравствуйте. подскажите пожалуйста алгоритм или программный код для поиска слова в введённом тексте, как например в Word`е для Delphi. я нашёл что-то но это кажись для СИ  и не совсем то - http://base.vingrad.ru/view/2582-Algoritm-...ih-slov-v-fayle

Это сообщение отредактировал(а) al1ve - 15.2.2011, 18:16
PM MAIL ICQ   Вверх
superVad
Дата 15.2.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



По ссылке - модуль для Делфи.

Не совсем ясна задача. Может тебе функции pos хватит?
PM MAIL   Вверх
al1ve
Дата 15.2.2011, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



напомни для чего она. в текстовом поле набран произвольный текст (не абракадабра). при нажатии кнопки "обработать" программа должна найти в набранном тексте "плохие" слова и заменить их на слово типа "<cenosored>". проще говоря - мат-фильтр =)
PM MAIL ICQ   Вверх
meteor2312
Дата 15.2.2011, 19:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 19.11.2010

Репутация: нет
Всего: нет



Используй pos, delete, insert.
pos - определить положение подстроки в строке (возвращает порядковый номер первой буквы подстроки),
delete - удаляет подстроку из строки,
insert - вставляет подстроку в строку.
Для подробного изучения гугл тебе в помощь  smile 
PM MAIL   Вверх
Poseidon
Дата 15.2.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(meteor2312 @  15.2.2011,  19:46 Найти цитируемый пост)
Используй pos, delete, insert.
Не используй pos, delete, insert, используй StringReplace


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
al1ve
Дата 15.2.2011, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



хорошо, попробую. спасибо за помощь)
PM MAIL ICQ   Вверх
superVad
Дата 15.2.2011, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Цитата(Poseidon @  15.2.2011,  19:17 Найти цитируемый пост)
Не используй pos, delete, insert, используй StringReplace

Или регулярные выражения.
PM MAIL   Вверх
al1ve
Дата 15.2.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



а искать плохие слова внутри слов так же? или уже самому придётся думать? например когда вот так - кошканоссобака. как замаскировать в данном примере например слово "нос"?
PM MAIL ICQ   Вверх
Poseidon
Дата 16.2.2011, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(superVad @  15.2.2011,  20:40 Найти цитируемый пост)
Или регулярные выражения.
Регулярки для замены слов? Конкретных слов, кстати. Да ты шо..?

al1ve, ты про StringReplace читал вообще? Про тот же pos читал? Почитай, не будет таких вопросов. Текст в Дельфи (да и в других языках так же) не делится на слова. Пробел - это такой же символ как и "а". Так что функциям будет все равно, подсунешь ты им "кошканоссобака" или "кошка нос собака". "нос" найдет в любом случае. А вот если тебе нужно именно отдельно слово "нос" найти, то нужно применять хитрость и искать в тексте не "нос", а " нос " и варианты, типо " нос.", " нос," и т.д.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
MetalFan
Дата 16.2.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(Poseidon @  16.2.2011,  12:56 Найти цитируемый пост)
А вот если тебе нужно именно отдельно слово "нос" найти

тогда регулярки в помощь)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
superVad
Дата 16.2.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Цитата(Poseidon @  16.2.2011,  11:56 Найти цитируемый пост)
Регулярки для замены слов? Конкретных слов, кстати. Да ты шо..?

Ну различные библиотеки регулярок под делфи обычно умеют Реплейс делать (еще и сплит).
Вероятно тут они как раз пригодятся, т.к. могут быть варианты написания "плохих" слов.
PM MAIL   Вверх
Poseidon
Дата 16.2.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Я обычно применяю регулярки когда нужно что-то по маске найти, "вырвать" из текста что-нибудь, подходящее по критерию, вывести текст в определенном формате. А когда нужно просто заменить одно слово на другое, то зачем усложнять проект регулярками, если есть стандартные функции?

Цитата(MetalFan @  16.2.2011,  12:58 Найти цитируемый пост)
тогда регулярки в помощь
Итить. Для "найти" pos в помощь. Для "заменить" - StringReplace. Что ж вы так эти регулярки полюбили-то?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Frees
Дата 16.2.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(Poseidon @  16.2.2011,  17:13 Найти цитируемый пост)
Что ж вы так эти регулярки полюбили-то?

А почему ты их не любишь?
ведь для поиска они дают больше возможностей чем pos.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
CodeMonkey
Дата 16.2.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



l'arbre - это одно слово или два?

Это два в французском, но одно слово в английском.

Это я к тому, что граница слова - довольно сложное понятие. Даже если ограничиться только русским, то в нём также найдётся место для импортированных слов.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Poseidon
Дата 17.2.2011, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Frees @  16.2.2011,  14:52 Найти цитируемый пост)
ведь для поиска они дают больше возможностей чем pos
Зачем мне больше возможностей, когда мне надо мат заменить на "<cenosored>"? Т.е. одно слово заменить на второе. Как с пушки по воробьям.

Цитата(CodeMonkey @  16.2.2011,  19:24 Найти цитируемый пост)
l'arbre - это одно слово или два?
А какая разница? Если нам надо его заменить полностью, то и сбиваем его в StringReplace полностью. Если частично, то вбиваем часть. И, по сути, нам по барабану одно тут слово или два. Мы работает с текстовой строкой, а не со словами и предложениями. 

Регулярки нужны когда надо действительно сложные операции с текстом сделать. А когда простая замена одного слова на другое... Вы пиво открыть тоже МЧС вызываете со спец. оборудованием или все же открывалкой пользуетесь?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Frees
Дата 17.2.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(Poseidon @  17.2.2011,  12:05 Найти цитируемый пост)
Как с пушки по воробьям.

а по моему это как раз не воробьи

как понять это отдельное слово или часть другого слова и его не надо заменять..


Цитата(Poseidon @  16.2.2011,  15:56 Найти цитируемый пост)
А вот если тебе нужно именно отдельно слово "нос" найти, то нужно применять хитрость и искать в тексте не "нос", а " нос " и варианты, типо " нос.", " нос," и т.д.

с помощью регулярок проще учесть варианты, разве нет?

ИМХО в простом варианте(лабораторная, курсовая) StrReplace - лучшее решение, но если нужно что то серьезно то регулярки упростят работу

Это сообщение отредактировал(а) Frees - 17.2.2011, 09:25


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Poseidon
Дата 17.2.2011, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Frees @  17.2.2011,  09:21 Найти цитируемый пост)
как понять это отдельное слово или часть другого слова и его не надо заменять..
А ТС это не надо ведь
Цитата(al1ve @  15.2.2011,  21:17 Найти цитируемый пост)
а искать плохие слова внутри слов так же? или уже самому придётся думать? например когда вот так - кошканоссобака. как замаскировать в данном примере например слово "нос"?




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 17.2.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Poseidon @  17.2.2011,  10:05 Найти цитируемый пост)
А какая разница?


А такая, что по формулировке задачи надо слово менять на слово. Не набор букв, а слово. Как ты поменяешь слово на слово, если ты не определишь границы слова. Вот ' надо считать разделителем слов или нет?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Poseidon
Дата 17.2.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(CodeMonkey @  17.2.2011,  14:33 Найти цитируемый пост)
по формулировке задачи надо слово менять на слово. Не набор букв, а слово.
Уверен? Вчитайся внимательно
Цитата(al1ve @  15.2.2011,  18:05 Найти цитируемый пост)
подскажите пожалуйста алгоритм или программный код для поиска слова в введённом тексте, как например в Word`е
 
Цитата(al1ve @  15.2.2011,  21:17 Найти цитируемый пост)
а искать плохие слова внутри слов
 
Цитата(al1ve @  15.2.2011,  21:17 Найти цитируемый пост)
например когда вот так - кошканоссобака. как замаскировать в данном примере например слово "нос"


Я конечно за автора говорить не буду, возможно он имел ввиду именно слова по отдельности искать. Но по заявленному можно судить что ему как-раз набор букв, составляющих слово, и надо. Word ищет набор букв и найдет его даже посреди слова, пример со словом "нос" это только доказывает. Так что по формулировке задачи нужно набор букв поменять на набор букв. Другое дело что эти наборы составляют вполне осмысленные слова. В первом случае мат, во втором "<cenosored>". Но это уже для нас не важно.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 17.2.2011, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Poseidon @  17.2.2011,  19:42 Найти цитируемый пост)
Я конечно за автора говорить не буду, возможно он имел ввиду именно слова по отдельности искать. Но по заявленному можно судить что ему как-раз набор букв, составляющих слово, и надо. Word ищет набор букв и найдет его даже посреди слова, пример со словом "нос" это только доказывает. Так что по формулировке задачи нужно набор букв поменять на набор букв. Другое дело что эти наборы составляют вполне осмысленные слова. В первом случае мат, во втором "<cenosored>". Но это уже для нас не важно. 


Изначально он спрашивал про отдельные слова, а потом передумал.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
al1ve
Дата 18.2.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



тогда как сделать чтобы искал и отдельные слова, и внутри слов как в Word`е? Word использует Pos?
PM MAIL ICQ   Вверх
Poseidon
Дата 18.2.2011, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(al1ve @  18.2.2011,  12:11 Найти цитируемый пост)
Word использует Pos
То, что использует Word мы не знаем. Но по результату так как-раз что-то похожее на pos  smile 



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
CodeMonkey
Дата 18.2.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(al1ve @  18.2.2011,  13:11 Найти цитируемый пост)
тогда как сделать чтобы искал и отдельные слова, и внутри слов как в Word`е?


Ну ты может определишься, чего тебе надо? Всё же отдельные слова или не отдельные слова?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
al1ve
Дата 18.2.2011, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



просто плохие слова могут ещё "прятаться" внутри нормальных слов. поэтому хотелось бы и так - чтобы находил ещё и внутри слов=)
PM MAIL ICQ   Вверх
CodeMonkey
Дата 18.2.2011, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Код

Label1.Caption := StringReplace(' кошка нос собака - будет кошканоссобака', 'нос', '<censored>', [rfReplaceAll, rfIgnoreCase]);


Это сообщение отредактировал(а) CodeMonkey - 18.2.2011, 20:49


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Frees
Дата 18.2.2011, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



Цитата(al1ve @  18.2.2011,  22:49 Найти цитируемый пост)
просто плохие слова могут ещё "прятаться" внутри нормальных слов. поэтому хотелось бы и так - чтобы находил ещё и внутри слов=)


'блестящая бляха' -> 'блестящая <censored>ха'


разве это правильно? или это не важно...

Это сообщение отредактировал(а) Frees - 18.2.2011, 21:38


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Keeper89
Дата 18.2.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Не понятно, о чем вы спорите. 
Если рассматривать последний случай, то проще сделать через регулярки, используя словарь "похожих" слов:
Нашли match[1] - нашу "плохую" вставку, смотрим, нет ли match[0] в списке и реплайсим.

Если все равно, что менять, решение вот:
Цитата(CodeMonkey @  18.2.2011,  20:49 Найти цитируемый пост)
Выделить всёкод Pascal/Delphi
1:
    
Label1.Caption := StringReplace(' кошка нос собака - будет кошканоссобака', 'нос', '<censored>', [rfReplaceAll, rfIgnoreCase]);


А ТС нужно привести все случаи замены очень подробно.

Это сообщение отредактировал(а) Keeper89 - 18.2.2011, 22:09


--------------------
PM MAIL WWW   Вверх
al1ve
Дата 19.2.2011, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



Цитата

'блестящая бляха' -> 'блестящая <censored>ха'


разве это правильно? или это не важно...



неправильно. потом сделаю "белый" и "чёрный" списки. а пока так


Это сообщение отредактировал(а) al1ve - 19.2.2011, 15:52
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1419 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.