Форум → Программирование → PHP для идиотов → Как применить фильтр по словам при посте.
Как применить фильтр по словам при посте.
Страницы: ← Следующая страница →
-
Допустим у нас есть список запрещенных слов в базе.
Мы хотим не разрешать посты (ну например в гостевуху) мессаг с любым из этих слов.
Как бы вы сделали проверку?
Извлечь все слова и прогнать через strstr? А если слов дофига?
SQL? Тоже не совсем тривиально … строковые функции и прочее.
Какой алгоритм оптимален? -
2 февраля 2010 г. 16:47, спустя 10 минут 51 секунду
если ты про реальную защиту то я думаю тебе ничто не поможет - захотят насрут
если про алгоритм то наверное средствами sql$sql = "SELECT COUNT(*) FROM restrictions WHERE word IN (".explode(" ",$message).")";
-
2 февраля 2010 г. 16:49, спустя 2 минуты 9 секунд
AlexB,
1. Использовать sphinx и написать свой морфологизатор, чтобы ловить нечто вида "CyK4"
2. Погуглить сервисы общие, чтобы такие слова набирались не из одного источника, тогда можно будет словить "сука, хуй, пизда" и т.д.https://smappi.org/ - платформа по созданию API на все случаи жизни -
2 февраля 2010 г. 16:56, спустя 6 минут 14 секунд
CTAPbIu_MABP, я про алгоритм.
Хотелось именно находить слова в строке. Т.е. "Бла бла __хуй__ бла бла" тоже не должно пропустить.
ЗЫ. Знаю, что в таком варианте и "Застрахуй" не пропустит, но это устраивает.Спустя 85 сек.
Да не, мне важна именно алгоритмическая реализация. Сами слова не важны, это не для фильтра от мата. Там именно поиск сигнатур.
AlexB,
1. Использовать sphinx и написать свой морфологизатор, чтобы ловить нечто вида "CyK4"
2. Погуглить сервисы общие, чтобы такие слова набирались не из одного источника, тогда можно будет словить "сука, хуй, пизда" и т.д. -
2 февраля 2010 г. 16:57, спустя 1 минуту 1 секунду
я бы даже такое чтото заюзал, в принципе при индексах этот вариант будет обладать очень неплохой скоростью
CTAPbIu_MABP,$sql = "SELECT * FROM restrictions WHERE word IN (".explode(" ",$message).") LIMIT 1";
Сапожник без сапог -
2 февраля 2010 г. 17:32, спустя 35 минут 1 секунду
AlexB, поудаляй все лишнее регуляркой /[^a-z]/Спустя 22 сек.phpdude, про лимит ты прав -
2 февраля 2010 г. 17:41, спустя 9 минут 51 секунду
AlexB, поудаляй все лишнее регуляркой /[^a-z]/
Неа … там любые могут быть строки. -
2 февраля 2010 г. 17:45, спустя 3 минуты 38 секунд
preg_split("#\s+#",$text); ? вроде как любые строки обработает)
AlexB, поудаляй все лишнее регуляркой /[^a-z]/
Неа … там любые могут быть строки.Сапожник без сапог -
2 февраля 2010 г. 17:58, спустя 12 минут 50 секунд
Гм, ну обработает, дальше что. Весь алгоритм не улавливаю … -
2 февраля 2010 г. 18:03, спустя 5 минут 9 секунд
я бы даже такое чтото заюзал, в принципе при индексах этот вариант будет обладать очень неплохой скоростью
CTAPbIu_MABP,$sql = "SELECT * FROM restrictions WHERE word IN (".explode(" ",$message).") LIMIT 1";
В таком вариант не пройдет проверку предложение, ведь "Хуй - это не палец" одна, а вот "Хуй, а не какой-то там палец" другое. Имею ввиду что есть уже разные строки ввида "Хуй" и "Хуй,", а следовательно нужно делать в данном случае две записи "плохих" слов + ещё и точка, восклицательный знак и т.д. Короче, сей вариант не вариант.
Нужно таки писать свой морфологизатор (скопировал это слово с поста Эда, потому как самому написать без ошибок не удалось, сцуко). И весь прикол в том, что пока неизвестны задачи АлексаБи, то и алгоритм подсказать ему очень трудно (ведь предложенный алгоритм "мато-слов" ему не подходит, ещё что-то тоже, а потому неизвестно в какую сторону шагать). -
2 февраля 2010 г. 18:06, спустя 3 минуты 9 секунд
ну разбиваем на слова, потому мускулю (я бы скармливал частями, например по 500 слов) эти слова через where word IN () limit 1, и если хоть одно совпадение есть - говорим "мол ахуел чтоли? не ругайся пидорас!". это будет выгоднее, чем пословно сравнить базу с каждый из слов (тут все дело в колве слов в базе, если их 10к, то быстрее будет мускуль напрячь, если их 100, то проще циклом 100 слов проверить)
Гм, ну обработает, дальше что. Весь алгоритм не улавливаю …Спустя 66 сек.Givi, ну добавь в регулярку изспользуемые слова да и все, знаков припинаний не так много, или наоборот перечислить возможные буквенные комбинации, тоже в принципе вариантСапожник без сапог -
2 февраля 2010 г. 18:11, спустя 4 минуты 55 секунд
Да бог с ним написанием и морфологией. Дело не в мате и не в словах. Наверно я плохо объяснил.
Задача простая:
Cодержит строка подстроку - проверку не прошла.
Не содержит - прошла.
Т.е. если в базе два слова "Хуй", "Пизда" русскими буквами то
"Хуй - это не палец", "Хуй, а не какой-то там палец", "Хуйня, а не палец" - не должны проходить
"хуй - это не палец", "Хyй - это не палец" (X,y - латинские) - должны проходить -
2 февраля 2010 г. 18:10, спустя 23 часа 59 минут 11 секунд
АлексаБи
АлексБи =)))))
блин не жгите так =))) -
2 февраля 2010 г. 18:13, спустя 3 минуты 11 секунд
тоже заметил и поржал))) сразу не заметилАлексаБи
АлексБи =)))))
блин не жгите так =)))Сапожник без сапог -
2 февраля 2010 г. 18:19, спустя 5 минут 20 секунд
SELECT * FROM restrictions WHERE '".$str."' LIKE %restrictions.word% LIMIT 1
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!