Июнь 2008

Генератор случайностей, понимающий русский язык.

05.06.2008

Я крут.

Результатом «перемешать 3 цифры от 3 до 5 и 2 английских слова через пробел; — ; буква и русское слово через -; $ ; 3 числа, слова или буквы; 2 символа из [@#$%]» является 5 4 egg sky 5 — p-теперь $ 9649sunv@@
Упомянутый ранее пример «3 числа от 100 до 150 через пробел; 5 русских и английских слов вперемешку; @@@; цифра от 1 до 9″ преобразуется в 148 150 147такойдверьзначитьmanonly @@@5

Возникли, правда, трудности с интерпретацией текста. Например 3 числа, слова или буквы можно интерпретировать как
а. Либо 3 числа, либо 3 слова, либо 3 буквы.
б. 3 элемента из набора (все числа + все слова + все буквы) (то есть, может получиться 2 числа и одна буква, скажем)
в. Одно число, одно слово, одна буква.

Тут как в поиске — угадать, что нужно юзеру, нереально. Поэтому считаем, что это вариант в.

Далее — дефолтные значения. По умолчанию — язык английский, диапазон чисел — как у функции rand.

И ещё одна трудность — когда остановиться в усложнении.
Позволив «и», я усложнил и удлинил код раз в 5. Можно позволить «по 3 числа, слова и буквы», это несколько строк всего. Можно добавить поддержку дробных чисел (сейчас можно сгенерить вот так «число от 3 до 5; точка; число от 0 до 99″). Но решил остановиться на том, что есть. Надо только имена, фамилии добавить, и поддержку мыл.

Upd. Минус есть — скорость. $rr->Rand(«число от 3 до 5; точка; число от 0 до 99″) выполняется 10 тысяч раз за 3 секунды, а rand(3,5).’.’.rand(0,99) — полтора миллиона. В 150 раз разница. ( rand(300,500)/100 вообще практически 4 млн. циклов успевает).

Upd 2. А wordpress закрывает незакрытые теги. Вот из-за таких прибамбасов это самый популярный и самый тормознутый блог-движок.

Генератор.

02.06.2008

Сижу, пищу генератор случайного чего-нибудь, понимающий русский язык. Что-то типа «3 числа от 100 до 150 через пробел, 5 русских и английских слов вперемешку, @@@, цифра от 1 до 9″ — ожидаем «140 127 118киноkillонокноlove@@@7″

Компилятор языка в промежуточный массив уже написал — 60 строк. Чувствую, будет самый медленный генератор рандомного чего-нибудь. :) . Компилятор нужен из-за вот такой вещи — «5 английских, 4 русских буквы, 7 цифр» или «5 английских и русских слов» — когда слова отбрасываются (в случае «5 английских букв, 4 русских буквы, 7 цифр» и «3 английских слова и 2 русских слова» промежуточной компиляции вообще бы не понадобилось).

Генерация текста.

01.06.2008

Прикрутил частотность.

Зарождение правила относят к x-xiii выходным. по функции становления воинам строя у базисом двигались крупные хозяйственные истории — свой, управляемые князьями. Еврейские свой этнически задних потенциальных племён объединялись в политические и главные высадки. Земледелием существования многих догосударственных введении считается трех 1219 против галицко-волынскими князьями и 21 нынешним князем. В росте кроме 5 будущих князей упоминается барки. Избрав школа в своём барельефе от сына, он ок. 1240 уничтожил или изобразил командиров и сформулировал под истории основой часть машин базисом. Так в начале xiii района на истории шведской северо-западной греции и юго-восточной экспедиции образовались красное княжество предыдущее. В начале xiii района в свой базисом-язычников с юго- и с северо-запада началось присутствие европейских рыцарей-крестоносцев. Теперь они изготовили пруссию и ливонию, а оставшиеся непокорёнными свой сомали под сетью экспедиции.

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

Из интересного в процессе реализации только вот.
INSERT INTO wiki_formcount(`word`,`count`,`form`,`form_id`)
SELECT DISTINCT `wiki_counts`.`word`, `wiki_counts`.`count`, `form`,`form_id` FROM `wiki_counts`,`part_of_speech` WHERE `wiki_counts`.`word`=`part_of_speech`.`word`

INSERT INTO wiki_forms(`form_id`,`form`,`form_count`)
SELECT `form_id`, GROUP_CONCAT(`form`,»-»), SUM(`count`) FROM `wiki_formcount` GROUP BY `form_id`

Последнее не использовалось, сейчас попробую. А GROUP_CONCAT, кстати, далеко не в каждом справочнике по mysql упоминается.