Фильтры Непристойности: Плохая Идея или Невероятно Межбегущая Плохая Идея?
кроме того, нельзя забыть Невыразимая История SpeedChat Toontown, даже использование "белого списка безопасного слова" привело к 14-летнему, быстро обходящему его с: "Я хочу засунуть своего Жирафа с длинной шеей Ваш пушистый белый кролик. "
Нижняя строка: В конечном счете, для любой системы, которую Вы реализуете, нет абсолютно никакой замены для человеческого обзора (или одноранговый узел или иначе). Не стесняйтесь реализовывать элементарный инструмент для избавлений от нападения из автомобиля, но для решительного сообщения-розыгрыша, у Вас абсолютно должен быть подход non-algorithm-based.
система А, которая удаляет анонимность и представляет отслеживаемость (что-то, что Переполнение стека преуспевает) полезно также, особенно чтобы помочь сражаться G.I.F.T John Gabriel.
Вы также спросили, где можно заставить списки профанации запускать Вас - один проект с открытым исходным кодом проверить , Dansguardian - проверяет исходный код для их списков профанации по умолчанию. Существует также дополнительное третье лицо Список Фразы , что можно загрузить для прокси, который может быть полезной подбирающей точкой для Вас.
Редактирование в ответ редактирование вопроса: спасибо за разъяснение по поводу того, что Вы пытаетесь сделать. В этом случае, если Вы просто пытаетесь сделать простой фильтр слова, существует два способа, которыми можно сделать это. Нужно создать единственный длинный regexp со всеми запрещенными фразами, которые Вы хотите подвергнуть цензуре, и просто сделать, regex находит/заменяет с ним. regex как:
$filterRegex = "(boogers|snot|poop|shucks|argh)"
и выполненный это на Вашей входной строке с помощью preg_match () к оптовому тесту для хита,
или preg_replace () для очищения их.
можно также загрузить те функции массивами, а не единственным длинным regex, и для длинных списков слов, это может быть более управляемо. Посмотрите preg_replace () для некоторых хороших примеров относительно того, как массивы могут использоваться гибко.
Для дополнительного PHP программирование примеров, посмотрите, что эта страница для несколько усовершенствовала универсальный класс для слова, фильтрующего, который * центр обозначает буквами от подвергнутых цензуре слов и этого предыдущий вопрос о Переполнении стека , который также имеет пример PHP (основная ценная часть там является основанным на SQL фильтрованным подходом слова - leet-говорить компенсатор может обойтись без при нахождении его ненужным).
Вы также добавили": Получение списка слов во-первых является реальным вопросом. " - в дополнение к некоторым предыдущим ссылкам Dansgaurdian, можно найти этот удобный .zip 458 слов быть услужливыми.
Откровенно говоря, я позволил им получить "прием система" слова и запрещаю их вместо этого, который является просто я. Но это также делает программирование более простым.
То, что я сделал бы, реализовать фильтр regex как так: /[\s]dooby (doo?)[\s]/i
или это слово снабжается префиксом на других, /[\s]doob(er|ed|est)[\s]/
. Они предотвратили бы слова фильтрации, любят успокаиваемый, который совершенно допустим, но также потребовал бы знания других вариантов и обновления фактического фильтра, если Вы изучаете новый. Очевидно, это все примеры, но необходимо было бы решить, как сделать это сами.
Я не собираюсь вывести все слова, которые я знаю, не, когда я на самом деле не хочу знать их.
Не делать.
, поскольку:
Редактирование: В то время как я соглашаюсь с комментатором, который сказал, что "цензура является неправильной", который не является природой этого ответа.
Не делать. Это просто приводит к проблемам. Один clbuttic личный опыт, который я имею с фильтрами профанации, является временем, где я был, ударяют/запрещают от канала IRC для упоминания, что я "направлялся по мосту в Hancock в течение пары часов" или чего-то к тому эффекту.
Я соглашаюсь с сообщением HanClinto выше в этом обсуждении. Я обычно использую регулярные выражения для входного текста строкового соответствия. И это - тщетное усилие, поскольку, как Вы первоначально упомянул, что необходимо явно объяснить каждую форму приема записи популярного в сети в "заблокированном" списке.
На ноте стороны, в то время как другие обсуждают этику цензуры, я должен согласиться, что некоторая форма необходима в сети. Некоторые люди просто любят отправлять вульгарность, потому что это может быть немедленно оскорбительным многочисленной группе людей и не требует абсолютно никакой мысли о части автора.
Спасибо за идеи.
правила HanClinto!
Если можно сделать что-то как Digg/Stackoverflow, где пользователи могут downvote/mark непристойное содержание... делать так.
Тогда все, что необходимо сделать, рассмотреть "непослушных" пользователей и заблокировать их, если они нарушают правила.
Относительно Вашего "приема система" дополнительный вопрос, можно обработать это путем нормализации и списка "ругательства" и вводимого пользователем текста прежде, чем сделать поиск. например, Использование серия regexes (или tr, если PHP имеет его) для преобразования [5 z$] к "s", [4@] к "a", и т.д., то сравнивает нормализованный список "ругательства" с нормализованным текстом. Обратите внимание, что нормализация могла потенциально привести к дополнительным ложным положительным сторонам, хотя я не могу думать ни о каких фактических случаях в данный момент.
большая проблема состоит в том, чтобы придумать что-то, что позволит людям заключить в кавычки ", перо более могущественное, чем меч" при блокировании "p e n i s".
Единственный способ предотвратить наступательный ввод данных пользователем состоит в том, чтобы предотвратить весь ввод данных пользователем.
, Если Вы настаиваете на том, чтобы позволять ввод данных пользователем и нуждаетесь в модерировании, затем включаете человеческих модераторов.
Взгляните на веб-сервис Фильтра Профанации CDYNE
Тестированиясистема фильтрации профанации никогда не будет прекрасна, даже если программист будет уверен и не отстанет от всех голых разработок
, который сказал, любой список 'непослушных слов', вероятно, будет работать, а также любой другой список, так как базовая проблема понимание языка , который в значительной степени тяжел с современной технологией
так, единственное практическое решение является двукратным:
Во время моего собеседования технический директор компании, который брал интервью у меня, испытал игру слова/сети, которую я записал в Java. Из списка слов всего Оксфордского словаря английского языка, каково было первое слово, которое подошло, чтобы быть предположенным?
, Конечно, самое грязное слово на английском языке.
Так или иначе, я все еще получил предложение задания, но я тогда разыскал список слов профанации (не в отличие от этого ) и записал быстрый сценарий для генерации нового словаря безо всех ругательств (даже не имея необходимость посмотреть на список).
Для Вашего особого случая, я думаю, сравнивая поиск с реальными словами, походит на способ пойти со списком слов как этот. Альтернативные стили/пунктуация требуют немного большего количества работы, но я сомневаюсь, что пользователи будут использовать это достаточно часто, чтобы быть проблемой.
Я не знаю ни о каких хороших библиотеках для этого, но независимо от того, что Вы делаете, удостоверьтесь, что Вы допускаете ошибку в направлении принимающего материала. Я имел дело с системами, которые не позволили бы мне использовать "mpassell" в качестве имени пользователя, потому что он содержит "задницу" как подстроку. Это - отличный способ отчуждать пользователей!
Остерегайтесь проблем с локализацией: ругательство на одном языке может быть совершенно нормальным словом на другом.
Один из текущих примеров этого: ebay использует словарный подход для фильтрации «плохих слов» из отзывов. Если вы попытаетесь ввести немецкий перевод «это была совершенная транзакция» («das war eine perfekte Transaktion»), ebay отклонит отзыв из-за плохих слов.
Почему? Потому что немецкое слово «был» - это «война», а «война» есть в словаре «плохих слов» ebay.
Остерегайтесь проблем с локализацией.