У меня есть список доменных имен, и я хочу определить, похоже ли имя домена на порносайт или нет. Как лучше это сделать? Список порнодоменов выглядит так: http://dumpz.org/56957/ . Эти домены можно использовать для обучения системы тому, как должны выглядеть порнодомены. Также у меня есть другой список - http://dumpz.org/56960/ - многие домены этого списка также есть порно и я хочу определить их по имени.
Классифицировать слова на хорошие и плохие
Ответы (6)
Используйте байесовский фильтр, например: SpamBayes или Divmods Reverend. Вы тренируете его с помощью списка, который у вас есть, и можете оценить, насколько вероятно это для данного домена, если это порно.
Краткий обзор см. в этой статье.
Вы не можете полагаться на доменное имя для этого, слишком много порно доменов с приличными именами и несколько других с порноподобными именами, но с безопасным содержанием.
Это может зависеть от ваших целей. Я предполагаю, что вы в основном заинтересованы в минимизации ложных отрицательных результатов (случайно назвать домен хорошим доменом, если это не так). Это может быть правдой, если, например, вы хотите, чтобы все порноссылки на форуме проверялись на наличие спама перед публикацией. Если какие-то непорно-ссылки будут помечены для проверки, это нормально.
В этом случае вы, вероятно, могли бы сделать что-то довольно простое. Если бы вы могли составить список порнографических слов, вы могли бы просто пометить все домены, содержащие любое из этих слов, как подстроку. Тем не менее, это позволит поймать некоторые безопасные домены: expertexchange.com может соответствовать «sex» или «exchange», но «yahoo» никогда не будет помечать положительный результат. Легко реализовать, легко понять, легко настроить.
Списки нецензурных слов можно найти с помощью любимого поисковика. Вы можете использовать свой список доменов для извлечения общих длинных подстрок по доменам в виде слов.
Если вы действительно хотите получить правильные ответы, вам нужно посмотреть, что находится в этих доменах. Site-About-Kitty-Porn.com может быть доменом лолкотов или нелегальным порно. Невозможно узнать, если вы не ползете. Если вы извлечете фактический контент и сопоставите его со своим списком, у вас будет немного лучше.
Вы также можете протестировать каждый домен с какой-либо сторонней службой, такой как интернет-фильтр, безопасный для детей, или даже попытаться проверить, будет ли домен отображаться в результатах безопасного поиска в вашей любимой поисковой системе. Конечно, убедитесь, что вы соблюдаете TOS каждой службы и все такое.
Как уже указывалось, вам нужна какая-то классификация, чтобы достичь того, чего вы пытаетесь достичь. Но тогда общая точность (точность и полнота) зависит от имеющегося у вас обучающего набора данных. Для этой цели вы можете использовать классификаторы, такие как SVM, дерево решений и т. д.
Я бы посоветовал использовать полуконтролируемый подход, при котором вы группируете разные URL-адреса и проверяете несколько репрезентативных URL-адресов из каждого кластера, чтобы увидеть, порно это или нет. Преимущество в том, что вам не нужно какое-либо обучение, и вы можете найти URL-адреса порно, которые, вероятно, не охватывают ваш набор данных для обучения. Распространенными методами кластеризации являются k-средние, иерархический, dbscan и т. д. Это все равно не будет охватывать порносайты, у которых нет порноподобных URL. Для этого вам нужно захватить страницу и выполнить аналогичное обучение/кластеризацию содержимого веб-страницы (страниц).
Вы имеете в виду что-то вроде этого?
scala> val pornList = List("porn1.com","porn2.com","porn3.com")
pornList: List[java.lang.String] = List(porn1.com, porn2.com, porn3.com)
scala> val sites = List("porn1.com","site1.com","porn3.com","site2.com","site3.com")
sites: List[java.lang.String] = List(porn1.com, site1.com, porn3.com, site2.com, site3.com)
scala> val result = sites filterNot { pornList contains _ }
result: List[java.lang.String] = List(site1.com, site2.com, site3.com)
Прочтите этот пост в блоге о классификации веб-страниц по темам. Начните со списка плохих сайтов в качестве положительных примеров и используйте любую эвристику для поиска хороших сайтов (базовый поисковый робот, засеянный некоторыми невинными поисковыми запросами Google) в качестве отрицательных примеров. Этот пост знакомит вас с процессом извлечения контента со страниц и касается Weka и того, как вы можете применить некоторые из их основных обучающих материалов.
Обратите внимание, что вы можете добавить в обучающий набор дополнительные данные, относящиеся к предметной области вашей задачи, а не просто использовать содержимое страницы. Например, количество изображений или размер изображений на странице может быть фактором, который вы можете принять во внимание.