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

Полоса Contiki

набор комика А в небольшой норвежской компании-разработчике программного обеспечения. Весь текст на английском языке. Проверьте его в http://contikistrip.kjempekjekt.com

Полоса Contiki http://contikistrip.kjempekjekt.com/images/contikistrip5.png Полоса Contiki http://contikistrip.kjempekjekt.com/images/contikistrip7.png

53
задан IAdapter 24 July 2009 в 00:52
поделиться

10 ответов

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

Но на самом деле они польские имена (имеется в виду Стивен и Лоуренс ) ...

16
ответ дан 7 November 2019 в 08:53
поделиться

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

Зачем это нужно?

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

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

8
ответ дан 7 November 2019 в 08:53
поделиться

Внезапно я мог искать слоги, используя 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 /

2
ответ дан 7 November 2019 в 08:53
поделиться

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

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

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

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

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

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

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

3
ответ дан 7 November 2019 в 08:53
поделиться

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

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

8
ответ дан 7 November 2019 в 08:53
поделиться

Ответ на вопрос №1:

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

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

2
ответ дан 7 November 2019 в 08:53
поделиться

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

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

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

2
ответ дан 7 November 2019 в 08:53
поделиться

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

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

In Русский, у нас есть запретные слоги,

0
ответ дан 7 November 2019 в 08:53
поделиться

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

0
ответ дан 7 November 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: