Классифицировать слова на хорошие и плохие

У меня есть список доменных имен, и я хочу определить, похоже ли имя домена на порносайт или нет. Как лучше это сделать? Список порнодоменов выглядит так: http://dumpz.org/56957/ . Эти домены можно использовать для обучения системы тому, как должны выглядеть порнодомены. Также у меня есть другой список - http://dumpz.org/56960/ - многие домены этого списка также есть порно и я хочу определить их по имени.


person Mykola Kharechko    schedule 29.05.2011    source источник
comment
Хм, кстати говоря, как сайт arstechnica.com оказался в этом списке...?   -  person Martin Törnwall    schedule 29.05.2011
comment
@martin-tornwall: dumpz.org/56963   -  person Mykola Kharechko    schedule 29.05.2011
comment
В частности, если вы делаете это в качестве интеллектуального упражнения, вы можете проверить библиотеку nltk Python. Описание классификаторов приведено в документации nltk. Обратите внимание, что ваши обучающие данные должны также включать некоторые отрицательные домены (т. е. домены, которые не являются порно-доменами).   -  person notnoop    schedule 29.05.2011
comment
@notnoop: Спасибо, поищу эту библиотеку. А как насчет en.wikipedia.org/wiki/Naive_Bayes_classifier? Можно ли его использовать для этой задачи?   -  person Mykola Kharechko    schedule 29.05.2011
comment
@Mykola, вы можете использовать любой классификатор, включая наивный байесовский классификатор, который включен в библиотеку nltk. Хорошие результаты зависят от выбранного вами классификатора и качества признаков. При этом, возможно, анализ доменных имен может быть не лучшей эвристикой.   -  person notnoop    schedule 29.05.2011
comment
Ars Technica — хороший пример того, почему этот подход не работает. Тот факт, что некоторые поисковые запросы, похожие на порно, появляются в домене, не означает, что все (или даже существенная часть), размещенное на домене, является порнографией.   -  person Nick Johnson    schedule 30.05.2011
comment
@Nick, поиск порносайта в Google — это только один из многих других подходов, которые я планирую использовать. Другими критериями являются: оценка доменного имени, оценка контента на сайте, оценка IP-адреса домена (виртуальный хостинг), оценка серверов имен, которые используются для доменов и т. д.   -  person Mykola Kharechko    schedule 30.05.2011
comment
@Mykola Я хочу сказать о классификации по домену, а не о том, как вы их оцениваете.   -  person Nick Johnson    schedule 30.05.2011


Ответы (6)


Используйте байесовский фильтр, например: SpamBayes или Divmods Reverend. Вы тренируете его с помощью списка, который у вас есть, и можете оценить, насколько вероятно это для данного домена, если это порно.

Краткий обзор см. в этой статье.

person jazz    schedule 29.05.2011
comment
Отличный ответ. Это именно то, что я хочу. Спасибо. - person Mykola Kharechko; 29.05.2011

Вы не можете полагаться на доменное имя для этого, слишком много порно доменов с приличными именами и несколько других с порноподобными именами, но с безопасным содержанием.

person sorin    schedule 29.05.2011
comment
Да, конечно, но доменное имя может быть одним из многих других критериев. Как видно из двух списков - корреляция есть. - person Mykola Kharechko; 29.05.2011
comment
На данный момент у меня есть база данных из 10 000 потенциально порно доменов. На этой неделе я попробую подход к классификации доменных имен и опубликую результаты. - person Mykola Kharechko; 30.05.2011

Это может зависеть от ваших целей. Я предполагаю, что вы в основном заинтересованы в минимизации ложных отрицательных результатов (случайно назвать домен хорошим доменом, если это не так). Это может быть правдой, если, например, вы хотите, чтобы все порноссылки на форуме проверялись на наличие спама перед публикацией. Если какие-то непорно-ссылки будут помечены для проверки, это нормально.

В этом случае вы, вероятно, могли бы сделать что-то довольно простое. Если бы вы могли составить список порнографических слов, вы могли бы просто пометить все домены, содержащие любое из этих слов, как подстроку. Тем не менее, это позволит поймать некоторые безопасные домены: expertexchange.com может соответствовать «sex» или «exchange», но «yahoo» никогда не будет помечать положительный результат. Легко реализовать, легко понять, легко настроить.

Списки нецензурных слов можно найти с помощью любимого поисковика. Вы можете использовать свой список доменов для извлечения общих длинных подстрок по доменам в виде слов.

Если вы действительно хотите получить правильные ответы, вам нужно посмотреть, что находится в этих доменах. Site-About-Kitty-Porn.com может быть доменом лолкотов или нелегальным порно. Невозможно узнать, если вы не ползете. Если вы извлечете фактический контент и сопоставите его со своим списком, у вас будет немного лучше.

Вы также можете протестировать каждый домен с какой-либо сторонней службой, такой как интернет-фильтр, безопасный для детей, или даже попытаться проверить, будет ли домен отображаться в результатах безопасного поиска в вашей любимой поисковой системе. Конечно, убедитесь, что вы соблюдаете TOS каждой службы и все такое.

person Gregable    schedule 29.05.2011

Как уже указывалось, вам нужна какая-то классификация, чтобы достичь того, чего вы пытаетесь достичь. Но тогда общая точность (точность и полнота) зависит от имеющегося у вас обучающего набора данных. Для этой цели вы можете использовать классификаторы, такие как SVM, дерево решений и т. д.

Я бы посоветовал использовать полуконтролируемый подход, при котором вы группируете разные URL-адреса и проверяете несколько репрезентативных URL-адресов из каждого кластера, чтобы увидеть, порно это или нет. Преимущество в том, что вам не нужно какое-либо обучение, и вы можете найти URL-адреса порно, которые, вероятно, не охватывают ваш набор данных для обучения. Распространенными методами кластеризации являются k-средние, иерархический, dbscan и т. д. Это все равно не будет охватывать порносайты, у которых нет порноподобных URL. Для этого вам нужно захватить страницу и выполнить аналогичное обучение/кластеризацию содержимого веб-страницы (страниц).

person user352951    schedule 30.05.2011

Вы имеете в виду что-то вроде этого?

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)
person Antonin Brettsnajdr    schedule 29.05.2011

Прочтите этот пост в блоге о классификации веб-страниц по темам. Начните со списка плохих сайтов в качестве положительных примеров и используйте любую эвристику для поиска хороших сайтов (базовый поисковый робот, засеянный некоторыми невинными поисковыми запросами Google) в качестве отрицательных примеров. Этот пост знакомит вас с процессом извлечения контента со страниц и касается Weka и того, как вы можете применить некоторые из их основных обучающих материалов.

Обратите внимание, что вы можете добавить в обучающий набор дополнительные данные, относящиеся к предметной области вашей задачи, а не просто использовать содержимое страницы. Например, количество изображений или размер изображений на странице может быть фактором, который вы можете принять во внимание.

person Tyson    schedule 04.06.2012