Доклад - Створення генератора сказок засобами Delphi - Программирование, Базы данных

Казка - це один з основних жанрів усної народнопоетичної творчості і є найбільш відомим для найширшого кола читачів (дитячого та дорослого віку). Це епічне, переважно прозовий художній твір авантюрного, чарівного чи побутового характеру здебільшого з установкою на вигадку.

Актуальність роботиу цьому, що час існує мало різних програм генерації казок самим користувачем. За допомогою комп'ютерної лінгвістики та застосування математичних методів та комп'ютерних технологій, можна створити додаток, що дозволяє користувачеві самому створити власну розповідь. За допомогою такої програми можна легко генерувати різні сценарії і вводити в них власних героїв, а також час і місце подій, що відбуваються.

Метанашої роботи - створити програму генерації казок засобами Delphi.

Вивчити алгоритм створення казки.

Виявити потреби комп'ютерної лінгвістики у реалізації обробки тексту.

Визначити можливості середовища Delphi для автоматизованої генерації казок.

Розробити програму створення казок.

Глава I. «Теоретичні основи генерації казок програмними засобами»

1.1. Алгоритм створення казки

Алгоритм створення казок на основі Морфологічного аналізу

Будується та заповнюється морфологічна таблиця: елементи казки - варіанти їх виконання. Рядків і стовпців може бути скільки завгодно. Зазвичай 6-10. Наприклад, як у цій таблиці.

Визначається за одним словом з кожного рядка таблиці. Це герої та умови майбутньої казки. Для більшої таємничості можна скласти нотацію таблиці на кшталт шахової дошки івибрати код казки, наприклад, такий: 1Г-2Г-3В-4Б-5Б-6Г-7Б. З цих умов складається власна казка. Якщо таблицю поміщати відомих казкових героїв, то вийде «салат» з відомих казок, якщо поміщати будь-які об'єкти, вийде «самостійна» казка.

Сюжет казки створюється «по ходу справи. Наприклад, за вказаною вище нотацією може вийти таке: „Красива Царівна Несміяна у дрімучому лісі потрапила до рук лютого розбійника, який зробив Несміяну безпечною. Її врятував мудрий чарівник. Він дав Несміяни Машину Часу, на якій вона помчала в минуле, стала знову гарною і більше ніколи одна не ходила в дрімучі ліси“.

Алгоритм створення казок на основі методу контрольних питань

Метод контрольних питань для написання казок:

Вигадуються питання. Запитання записуються.

Відповідаючи питання, створюється сюжет.

І чорновий варіант казки готовий! Якість казки залежить від питань, від їхньої послідовності та від оригінальності відповідей. Казка виходить як „їзда у невідоме“. Чим менш пов'язані між собою питання, тим цікавіше виходить казка, але тим безмежніша і неприборканіша потрібна фантазія. Наприклад, такі питання:

Скільки було учасників казки?

Де і чому вони вчилися?

Які вони мали характери?

Що хотів кожен? Кого вони любили?

Чому вони не могли виконати своїх бажань?

Яке лихо сталося з одним із них? Що він зробив?

Якщо казка „пішла“, можна додавати скільки завгодно питань, персонажів та подій, повторювати окремі питання. Взагалі кажучи, створення гарної казки — процес творчий, із повтореннями, переробками та покращеннями. Успіх чи неуспіх казки є своєрідним індикатором рівня розвиткууяви у дітей та дорослих.

Казка запускається питаннями, наприклад:

Що б ти зробив, якби знайшов „джерело сміливості“? (Попив би сам і став сміливим).

Кому б ти дав напитися насамперед і чому? (Своєму приятелеві Сашка, він весь час бреше від боягузтва).

Не забудь, у твоєму розпорядженні ціле джерело…

Чарівник дозволив тобі протягом однієї години побувати там, де ти захочеш.

Куди б ти подався? Навіщо? Що б там ти зробив?

Як знайти наймудрішої людини в королівстві?

Які б ти поставив йому запитання?

Запустіть казку першою фразою.

Жив був старий мудрий мамонт.

Тобі подарували сонний порошок, і ти...

Методика та форми роботи над казкою

Казка - специфічний жанр, будь-яка казка - це "особливий замкнутий світ, в якому діють закони, непримиренні в реальному світі".

Закони „казкового світу“ аналогічні з погляду здорового глузду, але природні всередині казки. Хочеться звернути особливу увагу на п'ять законів:

1. Одухотворення предметів та явищ природи;

2. Олюднення предметів, явищ, подання у реальні чи фантастичні образи;

3. Синтез низки звичайних явищ, предметів, істот на образи, наділені незвичайними властивостями, народний результат уяви, як висловлювання мрії, ідеї;

4. Чудові перетворення та звернення;

Завдяки цим законам у дію казки, до її емоційної сфери включаються всі явища об'єктивно існуючого світу, всі предмети уяви, як сили, що реально діють. Саме тому казка — благодатний матеріал для розвитку відтворювальної та творчої уяви дитини як важливих сторін її емоційної сфери та необхідних для повноцінного сприйняттятворів читачем.

Казки зберігають свою національну індивідуальність, а кожна народна казка своєрідно та по-своєму неповторна.

Найвдячнішим способом вивчення казки є її інсценування. Цьому сприяє насиченість казки діалогами.

Форми роботи з казкою можуть бути найрізноманітнішими. Вкажемо ще деякі смислові акценти, які видаються значимими. Вони можуть реалізовуватися під час розмови про казку, як питань, звернених до дітей, як завдання, запропонованих дитині після знайомства з казкою.

Приклад питань та завдань:

1. Дати характеристику персонажа (який той чи інший з них).

2. Пояснити, чому сталася та чи інша подія.

3. Показати, що стає об'єктом глузування народу.

4. Прочитати в особах казкові діалоги та полілоги, виділяючи голосом характерні особливості персонажа.

5. Вказати на текстові відмінності у традиційних для казки повторах. Пояснити їхнє значення.

6. Встановити різницю між словами і вчинками персонажів. Дати моральну оцінку цій розбіжності.

7. Відзначити використання у казці приказок, прислів'їв та інше.

8. З'ясувати, яким представився дитині той чи інший герой, на чому ґрунтуються його переваги.

9. Пояснити, чому у казці з'являються значні імена. Чи завжди вони визначають головне у персонажах?

10. Охарактеризувати тональність мови того чи іншого персонажа, відповідність інтонації його думкам та вчинкам.

11. Питання, що стверджують зв'язок людини з природою, світом, „прославляють“ почуття дружби, подяки тощо, які з конкретно-казкових подій.

12. Питання, що активізують пам'ять дитини, що змушують її звернутися до відомих їй аналогій.

13. Прохання підібрати до якогось слова або виразу близькі за значенням слова та висловлювання.

14. Пояснити, як описується в казці прекрасне та потворне.

15. Розкажіть, як і чому змінився характер героя.

16. Порівняння, аналогія, зіставлення (ніж казки одного народу нагадують казки іншого народу).

17. Які корінні цінності народу, його поняття про справедливість, нагороду та неминучу ганьбу?

1.2.Способи генерації текстових творів програмними засобами

Одним із способів генерації тексту є спосіб Ланцюг Мркова - це певна послідовність, кожен наступний елемент якої не залежить від попередніх. Це для ланцюга першого порядку. Для ланцюга другого порядку залежить тільки від одного попереднього, третього від двох попередніх і так далі.

Що це дає нам практично? Ми можемо взяти текст будь-якою мовою та розібрати його статистично. Записати, яка ймовірність появи будь-якого слова після якогось іншого. Після чого, вибираючи перше слово навмання, можна вибрати друге, що залежить від першого. По другому - третє, і так далі. В результаті отримаємо текст, який виглядає як правильно побудовані пропозиції, але без будь-якого сенсу.

Наведемо приклад тексту, згенерованого із фрагмента художнього твору за допомогою ланцюгів Маркова:

порядок ланцюга = 3 (кожне слово залежить від двох попередніх):

порядок ланцюга = 2 (кожне слово залежить лише від попереднього):

— Спиш? — комбінація кількох літер і вище.Я знав, що з кімнати,— в це слово, —Ти, на мою думку, повинен був ще кілька разів чув це пов'язано з наступною магістратурою і двері чорного ходу великої квартири. Вона навіть страшний літаючий собака,яка називалася „Лоліта“. Друга картина називалася „закріплювачем“. У цій зоні — англосаксонські вампіри могли бути гарною людиною, за горілкою стоїш у цьому рано говорити. — А приклеїв ти можеш скористатися словом на хард-диск, на стіні висів віяло над стовпцем тексту привітно дивився лисий лоб. — Ромочка, моя душа стерегла твоє запитання.

Видно, що більше порядок ланцюга, то вище ймовірність незмінності великих фрагментів.

Той самий принцип працює не лише зі словами, а й із літерами. У природній мові існує не тільки ймовірність появи якоїсь літери, але й ймовірність появи якоїсь літери після якоїсь конкретної. Так можна генерувати простий набір букв та знаків, наприклад (порядок 2):

стійкий вища я. нт инстро номалеще Каза з очейза ятогло немосетеланопі інашем вамнирое, У но — звірила — А мох покість уловила Волосатот мій некостсчню каз сстобуденаком ... — м вість їх з чатонал. каз зди ктилицвржачниснышвезалнем Наетрощега у, пише спрю тиматовне ден ів b? по мазьку та Крідні. торк сль кувати, меналекалірето тке милюще ня очтаз тобипробне ном ет св заражі »Wisml. звсерь к... іно тв, я, іза нотромма бо сиршьног днотеезаль сесо нал про норилкою — кіломітра Кожіних омн, бинічу це ряєра. кучусмії — овезу, — мало то ня, вустрор к, зучтопотіні, ажеруз я Номамо Ві? - Жорно преногдаоро лючтнілодогоназа помі страро веніл-мпієня. в ну ніяк сь, по помико імаск етвонелієсть гл ввіз наемероливерне Махотрит ска, тириля з Я, прая - ме їх іне, пана -трна ожноб Мигона, тьдення та булибусен. обучкам смучисо у, му вдромогро cren, ікимел іцетькудембще нгостистоско чтафогл, німіли ДРа мови. буматинакілеровила в.

Далі наведено код, за допомогою якого це було отримано (PHP).

initFromFile(«якийсь файл.txt») або die(«лайно буває.»);

* $bullshit = $m->generate(2000); // генерує фігню довжиною 2000 символів.

* $m->initFromString(file_get_contents(«somefile.txt»)) або die(«лайно буває.»);

* $bullshit = $m->generate(100, MARKOV_OPT_WORDS); // генерує фігню довжиною 100 слів.

define(«MARKOV_OPT_CHARACTERS», 1); // параметр: обмеження кількості символів для generate()

define(«MARKOV_OPT_WORDS», 2); // параметр: обмеження кількості слів для generate()

define(«MARKOV_DEFAULT_K», 3); // довжина ланцюга Маркова за замовчуванням

define(«MARKOV_TIME_LIMIT», 120); // обмеження часу для initFromFile()

* inits class' Markov k-sets з текстом із рядка.

* повертає true в разі успіху, false у разі невдачі

if(strlen($str) k) повертає false;

$words = preg_split('/s+/', trim($str));

if(count($words) k) повертає false;

foreach($words як $w)

for($i=0; $i _addToSets($set, substr($str, $i, 1));