Подтвердить что ты не робот

Как проверить, является ли строка рандомизированной, или сгенерированной человеком и произносимой?

С целью идентификации [возможных] бот-генерируемых имен пользователей.

Предположим, что у вас есть имя пользователя, например "bilbomoothof". Это может быть нонсенс, но оно все еще содержит произносимые звуки и поэтому появляется сгенерированным человеком.

Я согласен с тем, что он мог быть случайно сформирован из словаря слогов или частей слова, но пусть на мгновение предположим, что этот бот немного мусор.

  • Предположим, что у вас есть имя пользователя "sdfgbhm342r3f", человеку это явно случайная строка. Но может это будет определено программно?
  • Существуют ли доступные алгоритмы (аналогично Soundex и т.д.), которые могут идентифицировать произносимые звуки внутри строка вроде этого?

Решения, применимые в PHP/MySQL, наиболее ценятся.

4b9b3361

Ответ 1

Я думаю, вы могли бы подумать о чем-то подобном, если бы вы могли ограничить себя произносимыми звуками на английском. Для меня (я французский) слова вроде szczepan или wawrzyniec непроизносимы и, безусловно, имеют определенную случайность.

Но они на самом деле польские имена (что означает steven и lawrence)...

Ответ 2

Я согласен с Mac. Но более того, люди иногда имеют имя пользователя, которое не произносится как qwerty или rtfmorleave.

Зачем беспокоиться об этом?

< устаревшее и ложное, но я не удаляю из-за комментариев >

Но более того, никакие боты не используют "zetztzgsd" в качестве имени пользователя, у них есть dictionnary of realname, возможное имя ник и т.д., поэтому я думаю, что это будет пустой тратой времени для вас

</устаревшее и ложное, но я не удаляю из-за комментариев >

Ответ 3

Посмотрите анализ n-граммов. Он успешно используется для автоматического обнаружения текстового языка и работает на удивление хорошо даже по очень коротким текстам.

Онлайн-демонстрация (больше не онлайн) признала "bilbomoothof" как английский и "sdfgbhm342r3f" как непальский. Вероятно, он всегда возвращает лучший матч, даже если он очень плохой. Я думаю, вы могли бы обучить его различать "произносимые" и "случайные".

Ответ 4

Просто используйте CAPTCHA как часть процесса регистрации.

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

Вы заблокируете пользователей с bizzare или неанглийскими именами, что будет их раздражать, и боты будут просто пытаться, пока они не поймут хорошее имя пользователя (из словаря или других источников - Это очень приятно, кстати!).

РЕДАКТИРОВАТЬ: Ищите профилактику, а не после анализа факта?

Решение позволяет кому-то еще управлять идентификаторами пользователей. Например, вы можете использовать небольшой список поставщиков OpenID (например, SO) или facebook connect, или и то, и другое. Вы точно знаете, что пользователи настоящие, и что они решают хотя бы одну CAPTCHA.

EDIT: другая идея

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

Ответ 5

Ответить на вопроС# 1:

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

PS: После того, как вы отправили этот ответ, я столкнулся с некоторой услугой, которая дала идею примера для ограничения доменного имени пользователя, чтобы пользователи использовали почтовый ящик общеизвестного общедоступного домена в качестве имен пользователей.

Ответ 6

Сверху моей головы вы можете искать слоги, используя soundex. Это направление, которое я бы исследовал, основываясь на предположении, что произносимое слово имеет хотя бы один слог.

EDIT: здесь функция подсчета слогов:

function count_syllables($word) {

$subsyl = Array(
'cial'
,'tia'
 ,'cius'
 ,'cious'
 ,'giu'
 ,'ion'
 ,'iou'
 ,'sia$'
 ,'.ely$'
 );

 $addsyl = Array(
 'ia'
 ,'riet'
 ,'dien'
 ,'iu'
 ,'io'
 ,'ii'
 ,'[aeiouym]bl$'
 ,'[aeiou]{3}'
 ,'^mc'
 ,'ism$'
 ,'([^aeiouy])\1l$'
 ,'[^l]lien'
 ,'^coa[dglx].'
 ,'[^gq]ua[^auieo]'
 ,'dnt$'
 );

 // Based on Greg Fast Perl module Lingua::EN::Syllables
 $word = preg_replace('/[^a-z]/is', '', strtolower($word));
 $word_parts = preg_split('/[^aeiouy]+/', $word);
 foreach ($word_parts as $key => $value) {
 if ($value <> '') {
 $valid_word_parts[] = $value;
 }
 }

 $syllables = 0;
 // Thanks to Joe Kovar for correcting a bug in the following lines
 foreach ($subsyl as $syl) {
 $syllables -= preg_match('~'.$syl.'~', $word);
 }
 foreach ($addsyl as $syl) {
 $syllables += preg_match('~'.$syl.'~', $word);
 }
 if (strlen($word) == 1) {
 $syllables++;
 }
 $syllables += count($valid_word_parts);
 $syllables = ($syllables == 0) ? 1 : $syllables;
 return $syllables;
 }

Из этой очень интересной ссылки:

http://www.addedbytes.com/php/flesch-kincaid-function/

Ответ 7

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

Соберите два набора данных: один из действительных псевдонимов и один из фиктивных. Обучить простой back-progating одиночный скрытый слой нейронной сети с символьными значениями в качестве входных данных. Нейронная сеть научится различать строки, такие как "zrgssgbt" и "zargbyt", поскольку последние имеют согласные и гласные смешаны.

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

Ответ 8

Я не знаю существующих алгоритмов для этой проблемы, но я думаю, что ее можно атаковать одним из следующих способов:

  • Ваш бот может быть мусором, но вы можете сохранить список слогов, или, более конкретно, фонем, которые вы можете попробовать найти в данной строке. Но это звучит немного сложно, потому что вам нужно будет сегментировать строку в разных местах и ​​т.д.
  • есть 5 гласных в английском алфавите и еще 21. Вы можете предположить, что если бы они были случайным образом сгенерированы, то примерно вы ожидали бы 5/26 * W, (где W - длина слова) буквы, которые являются гласными, и значительные отклонения от этого могут быть подозрительными. (Если письмо включено, то 5/31 и т.д.). Вы можете попытаться построить эту идею, ища дуплексы и пытаясь убедиться, что каждый дублет встречается с одинаковой вероятностью и т.д.
  • далее, вы можете попытаться сегментировать строку ввода вокруг гласных, например, три словари перед гласной и три буквы после гласного, и попытайтесь выяснить, делает ли он узнаваемый звук по сравнению с фонемами.

Ответ 9

По-русски у нас есть запрещенные слоги, такие как ГЙ, а Ъ или Ь после гласного и т.д.

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

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

Ответ 10

Обратите внимание, что многие крупные сайты предлагают имена пользователей, такие как [first init] [middle init] [фамилия] [номер]. Затем пользователи переносят эти имена пользователей на другие сайты, и первые три буквы определенно не могут быть реализованы.