Pull to refresh

Comments 135

Автор, попробуйте сделать из этого новый вид капчи, получится очень интересная вещь)
Слишком легко взломать с помощью обычного словаря.
Там, где прокатывает «2+2» прокатить и это =)
Все от требуемой сложности зависит.
На некоторых сайтах требуется ввести капчу из двух английских слов, причем часто слова несуществующие(или неизвестные мне), т.е. порядок букв незнаком. Так вот это жутко раздражает при вводе, учитывая еще и искажения.
Меня больше бесит когда помимо незнакомых слов, ещё и написаны они так что глаза сломать можно. Я такие капчи называю «система угадай мелодию с одной ноты». Аж бесит, ощущение что не роботов фильтруют а людей…
Самая ужасная капча в мире это во вконтакте. Не знаю как вы, но я обычно разгадываю её попытки с 6-8 (в прямом смысле, без преувеличения), притом каждая из моих попыток длится по секунд 5-10 (то бишь достаточно вдумчиво).
Наверное, ты видел не все капчи в мире.
Попробуй разгадать вот эту
Само собой, я имел ввиду стандартные капчи.
Стандартные? Капчи уже стали подчиняться какому-то стандарту?
Не занудничайте, вы прекрасно поняли о чём я.
UFO just landed and posted this here
Да не, прошло где-то меньше минуты… Пока моя девушка это не расшифровала. Впрочем, она родом из Китая, так что это, наверное, не чистый эксперимент. )
雷筳战锤
так? (сомневаюсь насчёт второго иероглифа)
雷 霆 站 垂 :-) Да капча из разных шрифтов :)
вроде похоже…
По-моему, такая рекапча проглотит любую ерунду вместо второго слова.
рекапча априори проглотит любую ерунду вместо второго слова. она так устроена.
Нет. Иногда она проглатывает ерунду вместо первого слова
Однажды попадалась математическая формула. И проглатывало что угодно вместо этой самой формулы.
А мне доказывали что самая ужастная эта.
Слава богам, её теперь не нужно каждый раз вводить...))…
Я сразу ухожу с таких сайтов. Мое мнение таково: если капча мешает пользователю — убираем капчу и набираем модераторов. Если пофиг на людей ставим капчу покруче.
Самое смешное что капча системы «угадай мелодию» нередко стоит на сайтах типа маленьких блогов и.т.д.

Т.е проблемы спама там как таковой нет. Не было бы капчи (у меня был такой сайт) ну максимум раз в недельку один спамобот пролез, и ничего страшного бы не случилось, удалить в два клика и не париться. А вот сколько ценных людей/мнений отсеивается, одному богу известно…
У меня нарегилось нереальное количество спамоботов за то время, что не было капчи, зачем — не понятно, ибо они ничо не делали. Сайт слабо посещаем. Регилось штук по 5 в день, за годик ого-го насобиралось ))
Это рекачпа, вводя её вы фактически играете роль файнридера. Она вам дает на распознание два слова: одна проверочное, которое система знает, а второе — не распознанное, вводя которое вы помогаете гуглу распознать книгу. Фишка в том, что вводить можно только одно — проверочное, а вместо второго можно написать что угодно. После некоторой практики легко распознать какое из слов проверочное (сейчас такие слова слега раздвоены, но это меняется время от времени), но вот основное правило: если в слове есть знаки препинания, числа, любые не латинские символы — вместо это слова можно просто стукнуть по клавиатуре и отправить случайный набор символов.
Вот вам явный пример, когда второе слово вводить не обязательно: img850.imageshack.us/img850/5286/captchafc.jpg
По мотивам поста о ребус-капче — у меня появилось настойчивое желание добавить слону запятых :)
Боюсь, без контекста не получится распознать слово (на каптче).
Большие слова плохо воспринимаются, те, что поменьше — нормально.
Однако, в целом текст плохо воспринимается. Возможно, причина тому — понедельник
А я на оборот, только когда автор раскрыл суть понял, что читаю исковерканный текст. Я думаю тут еще играет роль навык скорочтения и словарный запас. В этих случаях мозг быстрее подбирает слова и не замечает проблем.
Нет, вступительный текст — понятно, а вот текст на скриншоте — там уже интереснее
Тематика тоже имеет огромное значение, я споткнулся на слове «акустики» (четвертое) толкьо потому что не был готов к этой теме. Думаю если бы перед этим читал тексты на подобную тематику, то проблемы бы не возникло. Да еще и в понедельник, с утра, пока мозги «не прогреты»…
То же самое, только акустика заставила запнуться
… толкьо потому что...
Сначала подумал что Вы прогнали коммент через программу автора.)

А по теме — слова после аккустики, включая ее, искаверканы чрезмерно, читать просто тяжело:
… обтаоркби… слганиов
— рвет мозг
У меня тоже такое ощущение, что текст со скриншота программы воспринимается куда хужэе, чем «классический» вариант. Возможно, причиной тому то, что в классическом варианте часто вторая и предпоследняя буквы остаются на месте, а также особо нет непроизносимых буквосочетаний.
Перемешивание букв + транслит — вот это гремачая смесь получится…
Уровень для продвинутых: перемешивание букв после транслита.
Была такая игра на радио — сначала русский текст переводили на инглиш, а потом обратно, но уже с другим словарем.
Надо было угадать о чем была речь
Игра случаем не Google Translate называется?
Я как-то пробовал читать перевернутый текст, тоже практически не отличается от привычного процесса. Можете добавить в свою программу еще и поворот на 180°)
Тогда можно развить до уровня игры, на первом уровне просто надо ввести текст, распознав за время, с каждым следующим усложняется трудоемкость восприятия. Повороты, искажения. И продавать в китай для тренировок распознавателей каптч.
В последнее время всё чаще капчи распознаются не китайцами, а пользователями adult-сайтов, которые вводят каптчу с целью увидеть вожделенные картинки/видео. Этим, в отличие от китайцев, даже платить не надо — сами всё делают.
Ещё красивее будет, когда месячную подписку они будут зарабатывать вводом капчи. Или я отстал от жизни и всё именно так и обстоит?
UFO just landed and posted this here
Пардон, каким боком? :-))

Навык чтения изковерканного текста это следствие знания языка, а не причина.
UFO just landed and posted this here
Ой не знаю, не знаю…

Точно так же можно и выдумать обучение иностранцев русскому через «пандонкавский» сленг.
UFO just landed and posted this here
Из личного опыта — закрепление правописания слов происходит только при непосредственном употреблении слов в письме, а не лишь только чтении.
Коли ради интереса… даешь обратное преобразование! :) але без словарей не обойтись.
Без словарей никак. Но в целом несложно, достаем слова по первой букве, отсеиваем по длине и последней букве, и фильтруем по набору букв. Получится список подошедших.
Гораздо больше можно будет отсеять если учесть вероятности следования определённых букв друг за другом.
Во-первых, марковские цепи половину сделают гораздо более простыми методами.
Во-вторых — берем словарь, сортируем буквы в каждом слове по алфавиту, строим дерево последовательностей, в распознаваемом слове также сортируем буквы по алфавиту и пробегаемся по дереву — получится гораздо быстрее.
Мне кажется, что надо ввести доп критерий — количество «правильно стоящих» букв в начале\конце.
Для слова < 7 символов это 1 (первая и последняя)
Для слова > 7 это 2 буквы.

+ запретить некоторые сочетания (например, когда я вижу БС в начале длинного слова, я впадаю в ступор и начинаю шепотом повторять «бс, бэс, бс, бз, бззз...»). Интересно, такой эффект наблюдается еще у кого то?
ИМХО всегда лучше две, ибо так человек не сразу понимает что происходит.
Если только одна буква, то хотя текст и читается, сразу видно что с ним не так.
Пнаацы, не кйчайте, там вриус, паваерешимеет бвукы!
Просто переставил внутренние буквы текста наоборот
> По раттаьлулезм ииндавоесслй огнодо агкосйгилно
прочитать практически не реально
А как вам слово — ржнлпсооаеы
Так что совсем без порядка не прочитать. В том тексте практически все гласные на своих местах, да и согласные не сильно смещены — поэтому читать не сложно.
Да, да тоже такая мысль пришла. В оригинале вообще слабо перемешано. В общем, британские ученые…
читать нужно текст, а не слова.
Читайте :)
По раттаьлулезм ииндавоесслй огнодо агкосйгилно утеситреивна порядок имеет зиечанне.

Если и можно здесь что-то прочитать, то надо повозиться и попереставлять буквы сначала.
И это я всего лишь переставил все буквы наоборот (вторую на предпоследнее место и тд..) от того, что предлагалось изначально. Я даже не подбирал ничего специально.
И тем не менее, по прежнему прочиталось без проблем.
Мне кажется что перемешивать надо не абы как, а менять местами рядом стоящие буквы, чтоб они не «убегали» далего. Если вторая буква вдруг окажется предпоследней, то шансы на прочтение существенно уменьшаются.
Может и так, но я руководствовался фразой из текста:
>в полном беспорядке
В исходном тексте нет полного беспорядка :)
А мне кажется гораздо больше сбивает с толку мешанина, неожиданно похожая на нормальное слово (чередование гласных и согласных). Например во фразе «сосредоточиться на возможностях слуха» первые два слова я прочитал спокойно, а на третьем засыпался :) Потому что стал гадать, что это за сухло такое.
Мозг распознает образы методом сравнения с образцом, поэтому чем дальше уходят буквы от своих мест, тем сильнее искажения.

Возможности слуха тоже ограничены, мозг не может слышать «бесконечное число частот», так как сложный гармонический сигнал разлагается в спектр при помощи улитки, в которой есть мембраны разного размера. Каждая мембрана резонирует на определенной частоте, и амплитуда этой частотной составляющей определяется по интенсивности сигнала от связанных с этой мембраной рецепторов.
«Новость» с очень длинной бородой (уж не один год ей точно).
Чтобы понять, насколько это неправда делаем такой тест: вместо предложения пишем фанарную последовательность слов; буквы внутри слов перемешиваем таким образом, чтобы сначла шли гласные (в алфавитном порядке), а затем согласные. После чего пытаемся доказать, что способны прочесть эту лабуду.

Вот пример, который является последовательностью слов из двух вполне осмысленных фраз, после перестановки превращается в полнейшую абракадабру:

мааееикмсттче иеиюклнсче раобты саоюявлстт эогто гаеииивдклрсче аоврта яюявлстя уойврсстта эееииодклнпцй аионнтчй паиодклнрй мааеикмтти


Причина узнавания проста. Когда мы пытаемся узнать что-либо, мы используем несколько путей поиска соответствий. Во-первых, мы воспринимаем семантику предложения, то есть пытаемся «прочесть быстро» — сиречь подобрать собственный смысловой эквивалент, который «автоматом» (через цепочки синонимов) даёт необходимое слово. Во-вторых, мы пытаемся узнать отдельные слова перебирая графические, фонетические и морфемные маски. В большинстве случаев (для слов длина которых более пяти букв) всегда можно подобрать такое расположение букв внутри слва, чтобы данное расположение не соответствовало ни одной из масок, то есть становилось бы неузнаваемым.

Текст опровержения нагло скопипащен отсюда.
Но с другой стороны ваш пример не являет собой случайное перемешивание букв, а имеет вполне конкретную последовательность(гласные-согласные), вероятность получения такого следования в случайном перемешивании очень мала и вряд ли может служить опровержением.
По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете.
Условие соблюдено, про случайность в исследованиях ни слова.
А я таки что-то прочитал :)

математические исключение? работы составляют этого … являются устройства энциклопедий античной … математики

Вообще удивительно, как же наш мозг умудряется вычленять информацию из такой каши
«Язык этой страницы — болгарский» ©

«Котовдсво» очень круто смотрится =)
Оригинальный текст всё же читается проще. Заметил, что когда читаю тот текст глаза цепляются не только за конец и начало слова, но и за некоторые «опорные» точки — буквы в середине. Т.е. слово «илссеовадний» читается примерно как и-сс-ова-ний (что уже близко к нормальному варианту).

По сути, в искаженном слове буквы не уходят далеко от своих исходных позиций, что позволяет легче читать искаженные слова.
чуть меньше кода)
//import java.util.Collections;
//import java.util.ArrayList;

String text = "Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.";
final StringBuffer sb = new StringBuffer( text.length() );
Matcher m = Pattern.compile("[а-яА-Яa-zA-Z]{4,}").matcher(text);
while (m.find()) { // words
	for(int g=0; g<=m.groupCount(); ++g) {
		String wrd = m.group(g);
		String wrd_new = wrd.substring(0,1);
		char[] chars = wrd.substring(1, wrd.length()-1 ).toCharArray();
		ArrayList<String> al = new ArrayList();
		for(int i=0; i<chars.length; ++i)
			al.add( String.valueOf(chars[i]) );
		Collections.shuffle(al);
		for(String tmp : al)
			wrd_new += tmp;
		wrd_new += wrd.substring(wrd.length()-1,wrd.length());
		m.appendReplacement( sb, Matcher.quoteReplacement( wrd_new ) );
	}
}
m.appendTail( sb );
System.out.println(sb);
Чуть меньше кода — 2:
# -*- coding: utf-8 -*-
import re, random

def _reword(m):
    bits = list(m.group(0))
    prefix, core, suffix = bits[:1], bits[1:-1], bits[-1:]
    random.shuffle(core)
    return ''.join(prefix + core + suffix)

def shuffle_text_letters(s):
    return re.sub(u'[а-яА-Яa-zA-Z]{4,}', _reword, s)

print shuffle_text_letters(u"Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.")
чуть меньше кода — 3 :)
$text = "Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.";
$text = preg_replace_callback("/(?<=[а-я])[а-я]{2,}(?=[а-я])/iu", 'rndstr', $text);
function rndstr($matches) {
	preg_match_all("/./u",$matches[0],$m);
	shuffle($m[0]);
	return join('',$m[0]);
}
echo $text;
Чуть меньше кода — 4: возвращение блудного верблюда
use utf8;
use List::Util 'shuffle';
$text = 'Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.'; 
$text =~ s/(?<=[а-яa-z])([а-яa-z]{2,})(?=[а-яa-z])/join('',shuffle(split('',$1)))/eg;
print "$text\n"; 
сдесь должен быть код на руби в две элегантных строчки, но его еще не написали
Автор, ты можешь объяснить, зачем постить такую элементарную ерунду на хабр? Давайте каждый хабровчанин будет сюда постить все программы сложнее хеллоу ворлда, которые он написал.
Объясняю, я нисколько не пытаюсь показать новый алгоритм, или сверхоптимизацию, или еще что-либо что является новым словом в программировании. Я реализовал очень старый и давно известный алгоритм просто ради интереса. И насчет данной темы, я уверен, не все люди в курсе, кому то вполне может быть интересно узнать и попробовать.
Посмотрите работы Сергея Михайлова (автора книги по скорочтению «Шаманство над книгой»). У него на сайте есть много на тему www.sm100.ru
В частности, его проект с перемешиванием букв http://www.dadon.ru/mik/mix_letters
По себе знаю — такие упражнения очень помогают повысить скорость чтения. Вот-бы кто-нибудь FBReader с такой фичей написал…
Насколько я знаю fb2 формат является xml подобным, вполне можно попробовать сделать конвертер книг в перемешанное состояние.
Мысль интересная!
Но я думал еще повороты букв сделать. Начал когда-то давно для N900 писать, потом пересел на андройд и тема завяла. Может кто-нибудь подхватит тему.
Логика была простая: нужно развивать навыки быстрого чтения на том, что читать легко и приятно, что-бы применять потом на сложном.
Опять же, предлагаю автору задуматься над слогами. Вот слово из авторского текста «пноеедрлжпоии» мне в чтении далось сложнее всего)
Вам оно далось сложно поскольку слово длинное, и вы, скорее всего, охватываете его не полностью за раз.
UFO just landed and posted this here
Интересная мысль родилась: а если не просто случайно переставлять, а переставлять так, чтоб в результате при сжатии с помощью алгоритма Huffman-а выходили меньшие деревья?

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

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

Или с помощью dynamic programming постепенно построить дерево+перестановки.

Мне кажется что будет оч-чень интересный результат в виде существенно большего коэффициента сжатия.

Фактически это будет JPEG для текста :)

Есть желающие попробовать? По идее не сложный алгоритм будет — чуть более сложнее задачка чем на CodeJam (вспомнилась задача прo «wellcome to code jam»).
Но что делать с коллизиями? Наверняка найдутся разные слова с одинаковым набором букв, у которых первая и последняя буквы также одинаковы(сходу не подобрал). Тогда однозначного декодирования получить не сможем. И выйдет как и в jpeg сжатие с потерями, что в случае с текстом нежелательно.
в том то и суть — ведь по «рзелульаттам илссеовадний» Вы не сразу отличите что в каком-то месте было другое слово и Ваш мозг «достроит» нужные перестановки в обоих случаях. Ведь задача не восстановить 1 в 1 оригинальный текст, а получить текст, который читается так же.

Именно за счет этой «фичи мозга» и можем получить сжатие большее, чем при обычном хуффмане :)

Думаю эксперимент стоит того, чтоб попробовать.
Глаз цепляется за гласные.

Посмотрите на исходный текст, практически все гласные на своих местах. Если они переставлены, узнать слово уже значительно труднее, особенно если это длинное слово. Так что простой микс — не подойдет.
Не особо читаемо получается, кстати.
Назвать программу нужно было бы чем-то в духе: «Бумперекешовка» :-)
UFO just landed and posted this here
UFO just landed and posted this here
WHY C#?
на js же легко пишется, и не нужно обладать такой фигней как винда
Возможно не все люди знают JS.
Но все, блин, как один, знают C#.
Практической пользы программа не несет, разве что прокачать навыки чтения и подгрузить мозг.

А вот это Вы зря.
Подобной программой отучивал своего младшего брата читать по слогам.
Успешно. :)
UFO just landed and posted this here
Читал справа налево и снизу вверх.
Был не прав…
… юутсупв онечартоп инемерв окьлотс, нилБ
(:.латичорп ортсыб оньловод я а, ах-аХ
То же самое коротко и на Haskell

import System.Random

blendText :: String -> IO String
blendText s = sequence ( map blendWord (words s) ) >>= return . unwords

blendWord :: String -> IO String
blendWord w = rearrange (( tail . init ) w) >>= \x -> return ([head w] ++ x ++ [last w])

rearrange :: [a] -> IO [a]
rearrange [] = return []
rearrange (x:xs) = getStdRandom (randomR (0, (length (x:xs)) - 1))
>>= \n -> sequence [rearrange (take n xs), return [x], rearrange (drop n xs)]
>>= return . concat


Holy s~t, еще и с комментариями! Ой, а можно вот это на С++, пожалуйста!
29 строчек до 2000 не дотянул:) Все можно, только за отдельныю плату)
Главное первые слова дать нормально прочитать, дальше из контекста додумываешь.
Как-то раз в одном из обзоров у меня таким способом было написано пара абзацев — по-моему, даже никто не заметил этого )
или просто не дочитали, учитывая объем Ваших постов и если эти абзацы ближе к концу
Реквестирую посты про всякие железки. Если вы конечно этим еще занимаетесь…
Мне даже показалось, что исковерканный текст читается быстрее. Видимо потому что в этом случае слова про себя не проговариваешь.
Что? Здесь не было ещё ни одной шутки про британских учёных?
[скриншот]
«…ви — питоряся!» — напоследок оценила программа половую ориентацию британских учёных.
Если хорошенько приглядеться, то буквы в исходном примере (а так же в оригинале, на английском) расставлены не абы как, замес идет максимум в пределах трех символов. Именно поэтому сгенерированный текст куда сложнее для восприятия.
Вот-вот, я тоже это подметил.
Как всегда, британские учёные [TM] сделали текст, в котором буква не уходит далеко от исходного места. А обыватель хавает.
Было бы интересно сделать такой текст, который читался бы неправильно — т.е. состоящий из слов, значение которых можно было бы интерпретировать двояко после такой обработки.
Занимался этим вопросом, в реальности дело в сохранении распознавания корня. Я усовершенствовал немного алгоритм перемешивания для затруднения восприятия, а именно: буквы делятся на гласные и согласные и выстраиваются в обратном порядке, сначала гласные, потом — согласные. При этом первая и последняя буквы всегда остаются на месте. Читается хуже на два порядка.
Для примера абзац выше, переделанный по моему алгоритму:
Заиаслмня эитм вооосрпм, в роьаетснли дело в сиеаоннрхи риааоанвнзпся конря. Я уаоееоввтсншрвсл ноегнмо аиотрглм пиаиееенвшмря для зиеуанндртя вияиотрпся, а иеннмо: бувкы дяестля на гыансле и сыаонслге и вюаиаыствртся в ооантрбм пяокдре, саалчна сыаонслге, поотм — гыансле. При эотм паевря и пяеондлся бувкы ведгса оюасттся на метсе. Чеаисття хуже на два пяокдра.
Хехъ, давным давно писал такой скриптик для mirc32, который все что я писал преобразовывал согласно этому правилу. Те, кто со мной общались, очень скоро начинали возмущаться :)
Для более-менее комфортного чтения менять местами можно только соседние буквы исходного слова.
UFO just landed and posted this here
Внезапно — обороноспособность! Я это понял, потому что это единственное слово в русском языке с семью буквами «о».
UFO just landed and posted this here
Недавно был на докладе по задачам автоматического распознавания искаженного текста. В частности обсуждали эффект Кембриджского университета. Вот пара ссылок по теме:

Обширное обсуждение феномена. В числе основных причин эффекта указывают автор указывает следующие:

1) Short words are easy — 2 or 3 letter words don't change at all.
2) Function words (the, be, and, you etc.) stay the same — mostly because they are short
3) Of the 15 words in this sentence, there are 8 that are still correct
4) Transpositions of adjacent letters (porbelm / problem) are easier to read
5) None of the words that have reordered letters create another word
6) Transpositions were used that preseve the sound of the original word
7) given the first few words of the sentence, you can guess what words are coming next

Тезисы PhD «The Significance of Letter Position in Word Recognition» (1976) — вероятно, первое исследование читабельности текстов с переставленными буквами. Кстати, никакой не Кембридж, а Ноттингем
Спасибо большое, собрал для украинского языка, компилятором который идет в комплекте .Net Framework, =)
Кому надо, вот строка, запускать в каталоге с исходниками
%WinDir%\Microsoft.NET\Framework\v4.0.30319\csc.exe /optimize /target:winexe *.cs
Может выложить исходники и бинарики на гитхаб?
Sign up to leave a comment.

Articles