Полоса Contiki
набор комика А в небольшой норвежской компании-разработчике программного обеспечения. Весь текст на английском языке. Проверьте его в http://contikistrip.kjempekjekt.com
Полоса Contiki http://contikistrip.kjempekjekt.com/images/contikistrip5.png Полоса Contiki http://contikistrip.kjempekjekt.com/images/contikistrip7.png
Я думаю, вы могли бы придумать что-то подобное, если бы вы могли ограничить себя произносимыми звуками на английском языке . Для меня (я француз) такие слова, как szczepan или wawrzyniec , непроизносимы и определенно имеют некоторую случайность.
Но на самом деле они польские имена (имеется в виду Стивен и Лоуренс ) ...
Я согласен с Mac. Но более того, у людей иногда бывает непроизносимое имя пользователя, например qwerty или rtfmorleave.
Зачем это нужно?
<устаревшее и неверное, но я не удаляю из-за комментариев>
Но более того, ни один ботов не использует 'zetztzgsd' в качестве имени пользователя , у них есть словарь настоящего имени, возможного псевдонима и т. д., поэтому я думаю, что это будет для вас пустой тратой времени
устаревшее и ложное, но я не удаляю из-за комментариев>
Внезапно я мог искать слоги, используя soundex . Это направление, которое я бы исследовал, исходя из предположения, что произносимое слово имеет хотя бы один слог.
РЕДАКТИРОВАТЬ: Вот функция для подсчета слогов:
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's 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 /
Просто используйте CAPTCHA как часть процесса регистрации.
Вы никогда не сможете отличить настоящие имена пользователей от имен пользователей, созданных ботами, не сильно раздражая пользователей.
] Вы будете блокировать пользователей с причудливыми или неанглийскими именами, что будет их раздражать, а боты будут продолжать попытки, пока не поймают хорошее имя пользователя (из словаря или других источников - это очень хорошее имя , кстати!).
РЕДАКТИРОВАТЬ: Ищете профилактику, а не анализ постфактум?
Решение позволяет кому-то другому управлять идентификацией пользователя за вас. Например, вы можете использовать небольшой список поставщиков OpenID (например, SO), или facebook connect , либо и то, и другое. Вы будете точно знать, что пользователи настоящие, и что они решали по крайней мере одну CAPTCHA.
EDIT: Другая идея
Найдите строку в Google и проверьте количество найденных совпадений. Не должно быть вашим единственным инструментом, но это тоже хороший индикатор. Рандомизированные строки, конечно, не должны иметь совпадений или иметь мало совпадений.
Найдите анализ n-граммов. Он успешно используется для автоматического определения языка текста и на удивление хорошо работает даже с очень короткими текстами.
Онлайн-демонстрация (больше не онлайн) распознала 'bilbomoothof' как английский и 'sdfgbhm342r3f' как непальский. Вероятно, он всегда возвращает лучшее совпадение, даже если оно очень плохое. Я думаю, вы могли бы научить его различать «произносимое» и «случайное».
К сожалению, это невозможно, так как функция сложности Колмогорова не вычислима, поэтому вы не можете сгенерировать такой алгоритм, если не примените некоторые rules в домен возможных имен пользователей, тогда вы сможете выполнить эвристический анализ и принять решение, но даже тогда это действительно сложно сделать.
PS: После публикации этого ответа я наткнулся на какой-то сервис, который дал представление о примере для ограничения домена имени пользователя разрешите пользователям использовать почтовый ящик общеизвестного домена в качестве имен пользователей.
Вы можете использовать нейронную сеть, чтобы оценить, выглядит ли псевдоним как псевдоним на естественном языке.
Соберите два набора данных: один из действительных псевдонимов и один из поддельных. . Обучите простую нейронную сеть с одним скрытым слоем с обратным продвижением, используя значения символов в качестве входных. Нейронная сеть научится различать такие строки, как «zrgssgbt» и «zargbyt», поскольку в последнем смешаны согласные и гласные.
Важно использовать реальные примеры, чтобы получить хороший дискриминатор.
Я не знаю существующих алгоритмов решения этой проблемы, но думаю, что его можно атаковать в любом из них. из следующих способов:
Обратите внимание, что многие крупные сайты предлагают такие имена пользователей, как [первая инициализация] [средняя инициализация] [фамилия] [номер]. Затем пользователи переносят эти имена пользователей на другие сайты, и первые три буквы определенно не произносятся.