47723 (608351), страница 2

Файл №608351 47723 (Нейминг. Разработка генератора) 2 страница47723 (608351) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Для ввода входных данных создадим с помощью языка разметки HTML страничку, содержащую форму. В её поля должны вводиться:

  • количество ключевых слов (поле kol);

  • непосредственно слова, записанные через запятую (поле slova);

  • количество слогов в генерируемых словах (поле slog).

Данные этой формы будут обрабатываться файлом kurs.php, в результате работы которого будет генерироваться страничка со списком сгенерированных слов.

Сначала необходимо считать данные из формы и записать их в соответствующие переменные.

$kol=$_POST["kol"];

$slova=$_POST["slova"];

$slog=$_POST["slog"];

В переменных kol и slog сейчас находятся какие-либо числа, а в переменной slova находится строка, состоящая из слов, разделенных запятыми и пробелами. Преобразуем её в массив строк (s):

$s=explode(",",$slo);

Для дальнейшей работы нам необходимо еще избавиться от ненужных нам пробельных символов (которые могут появиться при заполнении формы). Для этого воспользуемся встроенной функцией string trim (string str [, string charlist]). После такого рода обработки, можно будет приступить непосредственно к реализации алгоритма разбиения слова на слоги.


2.1 Разработка функции деления слова на слоги

Слова из массива строк s по одному будем посылать на обработку в функцию delslog($str).

function delslog($str)

{$k=k_slog($str); //посчитаем количество слогов

$mas=slog($str, $k); //разобьём слово на слоги

$f=fopen("slogi.txt","a");//откроем файл slogi.txt

for($i=0;$i

{//через «-» запишем в

$mas[$i].='-'; //него слоги

fwrite( $f,$mas[$i]);}

fclose($f);} //закроем файл

В этой части программы происходит вызов функций k_slog($str)и slog($s, $k). Рассмотрим их подробнее.

function k_slog($str) //считает количество слогов

{//бежим по строке

for($i=0, $q=0; $i < strlen($str); $i++)

if(glas($str[$i])) // если очередная буква

$q++; //гласная, увеличим счетчик

return $q; } //вернём значение счетчика

Функция slog($s, $k)выполняет непосредственно разбиение слова на слоги. Как видно из примеров в п. 1.3.1, многие слова можно разделить на слоги несколькими способами. По этому определить принадлежность каждой буквы к тому или иному слогу – довольно-таки сложная задача.

Разберемся сначала с гласными буквами. Каждая из них является основой слога, по этому достаточно только отслеживать, чтобы в слог не попала вторая гласная (в этом случае должен осуществиться переход к новому слогу). За это будет отвечать флажок q.

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

  1. Согласная и последующая гласная относятся к одному и тому же слогу;

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

  3. Все согласные буквы, расположенные после последней гласной принадлежат одному и тому же слогу;

  4. Из нескольких согласных, расположенных в середине слова, первая относится к текущему слогу, остальные – к следующему (исключения составляют буквы «ъ» и «ь», которые «привязываются» к предыдущей согласной).

Последний пункт вызывает наибольшее количество сомнений относительно правильности, но вполне удовлетворяет изложенным в учебнике [1] правилам.

Получили функцию:

function slog($s, $k) //разбивает слово на слоги

{for($i=0, $q=0, $j=0; $i

{if(glas($s[$i]) && $q==0)//если очередная буква

{ //гласная и первая

$mas[$j].=$s[$i]; //припишем ее к слогу

$q=1; //установим флажок

$i++; //перейдем на след. букву}

else

if(!glas($s[$i]) && ($i==0 || $q!=1 || (glas($s[$i-1]) && !glas($s[$i+1])) || $j==$k-1))

/*если буква не гласная и: первая, или до гласной, или между гласной и согласной, или последняя*/

{

$mas[$j].=$s[$i];//припишем её к слогу

$i++; //перейдем на след. букву}

else

{ $q=0; //иначе снимем флажок и

$j++;} //перейдем на след. слог}

return $mas;} //вернём массив слогов

В приведенных функциях вызывается функция glas($a). Она выглядит так:

function glas($a) //проверяет, гласная ли буква 'а'

{

$gls='аеёиоуыэюя'; //Запишем строки из строчных и

$glb='АЕЁИОУЫЭЮЯ'; //заглавных букв

for($i=0; $i < 11; $i++)

if(substr_count($gls,$a)>0|| //если 'а' входит

substr_count($glb,$a) > 0)//в одну из строк

return 1; // вернём 1

return 0;}

Эта функция ищет вхождение переданной ей буквы a в двух строках, gls и glb, состоящих из строчных и заглавных гласных букв русского алфавита. Она возвращает 1, если буква присутствует в одной из строк (т.е. является гласной), иначе – 0.

Мы получили кусок основной программы, выполняющий первую задачу – разбиение слов на слоги.

В результате работы этой части программы файл slogi.txt заполняется слогами всех введенных слов, разделёнными знаком «-». Использование файла для временного хранения информации я считаю наиболее выгодным. Этот способ наиболее надежен и прост, потому что в противном случае пришлось бы либо вводить дополнительно переменные под хранение массивов слогов, либо наращивать один массив, но тогда могла бы возникнуть проблема с индексом, т.к. его надо было бы отправлять в качестве ещё одного параметра в функцию delslog($str). Использование нескольких функций вместо одной большой мне кажется также оправданным, т.к. это существенно упрощает восприятие текста программы. К тому же отдельные функции легче исправлять и дополнять.


2.2 Осуществление группировки слогов в слова

После разбиения всех введенных слов на слоги запускается функция группировки слогов в слова (group($k)). У неё только один входной параметр – количество слогов в новых словах.

В основе этой функции лежит алгоритм размещения с повторениями чисел 1..n в последовательности по k элементов.[5]

Рассмотрим эту функцию.

function group($k)

{

$f=fopen("slogi.txt","rt");//откроем файл slogi.txt

$a=explode("-",fgets($f));//запишем слоги в масс. а

fclose($f); //закроем файл

$n=count($a)-1; //посчитаем количество слогов

for($i=0;$i<$k;$i++){

$x[$i]=1; //зададим начальную и

$y[$i]=$n;} //конечную комбинацию чисел

while(prov($x,$y)) //пока они различны

{$p=$k; //пост. инд. в конец посл-ти

while($x[$p]==$n)//пока не найдем эл-т, отличный от

$p--; //максимального, уменьш. р

$x[$p]++; //увелич р-й эл-т послед-ти

for($i=$p+1;$i<$k;$i++)

$x[$i]=1; //все след-ие делаем единицами

if(correct($x)) //если комбинация нам подходит

{for($i=0;$i<$k;$i++) //выводим слоги с соотв.

{ print $a[$x[$i]-1];}//номерами на экран

echo "
";} //переход на новую строку}

Эта функция вызывает prov($x, $y)и correct($x). Функция prov($x, $y)следит за совпадением начальной и конечной комбинациями. Это осуществляется методом простого перебора всех элементов массивов x и y. Если в результате количество совпадающих элементов равно количеству элементов в любом из массивов, то возвращается 0 (и алгоритм размещений с повторениями заканчивает свою работу).

function prov($x, $y)

{

$fl=0;

for($i=0;$i

if($x[$i]==$y[$i]) $fl++;

if($fl==count($y)) return 0;

return 1;}

Функция correct($x) проверяет полученную комбинацию на «пригодность». В данном случае, она отслеживает повторяющиеся слоги. Если они присутствуют, она не «пропускает» их к выводу на экран.

function correct($x)

{for($h=0;$h

for($d=$h+1;$d

if($x[$h]==$x[$d]) return 0;

return 1;}

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


2.3 Анализ полученного генератора

Полученная программа далеко неидеальна.

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

Вторым минусом программы я бы назвала отсутствие дополнительной обработки выводимых слов. Скажем, не осуществляется проверка слов на соответствие простейшим орфографическим правилам (в частности на наличие недопустимых сочетаний букв, которые могут возникнуть при «состыковке» слогов из разных слов). Не осуществляется и проверка на наличие одинаковых слогов в словах (что является ещё одной причиной появления слов с одинаковыми слогами, например, если ввести слово «мама»). Все проверки такого рода можно дописывать в функцию correct($x). Только тогда в качестве параметра ей следует передавать также массив слогов.

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

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

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


Заключение

Полученный в ходе данной работы генератор удовлетворяет большинству выдвинутых в процессе работы требований. Он действительно способен сгенерировать набор слов-неологизмов, основанных на ключевых словах. Далее из них мы должны самостоятельно выбирать те, которые удовлетворяют критериям «хорошего» названия (о которых писалось ранее). Не стоит забывать и о личных предпочтениях заказчиков. Этот процесс тоже довольно-таки трудоёмкий, но несомненно проще, чем придумывание этих слов.

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

  1. улучшение быстродействия;

  2. углубление проверки выходных данных;

  3. включение функции поиска наиболее благозвучных слов из полученных.

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

У нейминга в России, как и во сём мире, огромный потенциал для развития. Его необходимость современному обществу постоянно даёт толчок для возникновения принципиально новых и доработки существующих методов имяобразования. Компьютерное решение этой проблемы представляется на сегодняшний день одним из самых предпочтительных и удобных. Разработанный мной простейший генератор вряд ли внесет большой вклад в развитие этой отрасли, но сам факт решения этой задачи может послужить толчком к решению этой проблемы в более крупном масштабе, что со временем приведет к созданию чего-то более совершенного. В любом случае, в процессе разработки я на себе ощутила востребованность квалифицированного программиста в современной жизни.


Список литературы

  1. Бабайцева, В.В. «Русский язык: теория. 5 – 9кл.» Учебник для общеобразовательных учреждений. В.В. Бабайцева, Л.Д. Чеснокова – 9-е изд. – М.: Дрофа, 2000. – 48-49 с..

  2. Бизнес-журнал [электронный ресурс]/ Джавед, Н. Случайный нейминг – Электрон. статья – 2005.- Режим доступа:
    http://www.business-magazine.ru/oldbusiness/225706/. – Яз.рус.

  3. Нейминогвое агентство Нейминг.Ру [Электронный ресурс]/ Лебедев-Любимов, А. Психологические проблемы нейминга, или как убеждать названием – Электрон. статья - 2006.- Режим доступа: http://www.naming.ru/mambo/index.php?option=com_
    content&task=view&id=12&Itemid=43

  4. Patentoved.com [Электронный ресурс]/ Перция, В. 29 способов имяобразования – Электрон. статья – 2005. – Режим доступа: http://www.patentoved.com/content.php?id-32

  5. Шень, А. Программирование: теоремы и задачи/ А. Шень. – М.: МЦНМО, 1995. – 43 – 44 с.

  6. Котеров, Д.В. Самоучитель PHP 4. /Д.В. Котеров. — СПб.: БХВ-Петербург, 2001.

Характеристики

Тип файла
Документ
Размер
258,03 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6381
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее