ELEKTRYBAŁT


raport z wykonania projektu na przedmiot

Metody i algorytmy sztucznej inteligencji


Autor: Adam Żeluk
Prowadzący: dr inż. Witold Paluszyński
Wrocław, 18.06.2007r.

1. Opis problemu

W ramach projektu zaimplementowałem program działający na wzór maszyny opisanej w książce Stanisława Lema "Cyberiada". Aplikacja ta na podstawie zdań wprowadzonych przez użytkownika generuje zdania zakończone rymami o podobnej ilości sylab. Zdania na ogół są gramatycznie poprawne, ale jak to w poezji bywa nie zawsze z sensem.

2. Rozwiązanie problemu

Aplikacja na podstawie wprowadzonych utworów, generuje bazę słów oraz bazę powiązań między słowami. Jako słowa rozumiane są ciągi znaków nie zawierające spacji, ale mogące zawierać inne znaki takie jak znaki interpunkcyjne. Natomiast jako relacja jest rozumiane to, jakie dwa wyrazy wystąpiły obok siebie we wprowadzonym tekście. Na podstwaie zapamiętanych słów i relacji aplikacja jest w stanie budować poprawne gramatycznie zdania.

Zdania generowane są od końca. Najpierw zostaja wyszukane słowa do rymu w bazie, z których zostaje wylosowane jedno. Następnie są wyszukiwane, na podstwie bazy relacji, słowa stojące przed wylosowanym wyrazem i następuje kolejne losowanie. Wylosowane w kolejnych etapach słowa, są łączone w zdania.

Aby zdanie wprowadzone i zdanie wygenerowane miały podobną długość, zliczane są sylaby, a zdanie generowane jest budowane tak długo, dopóki nie przekroczy ilości sylab w zdaniu wprowadzonym lub braknie powiązań w bazie relacji. Sylaby zliczane są na podstawie samogłosek, algorytm pomija "zmiękczenia".

3. Implementacja

Aplikacja została napisana w języku skryptowym PHP. Do przechowywania słów i występujących miedzy nimi relacji została wykorzystana baza MySQL.

Aplikacja została podzielona na kilka skryptów, tak aby wyodrębnić pewne funkcjonalności i ułatwić instalację. Do wprowadzania utworów służy skrypt wprowadzanie.php, natomiast do generowania zdań skrypt poeta.php, do skasowania zawartości bazy służy skrypt erase.php. Powyższe skrypty korzystają z konfiguracji połączenia z bazą MySQL zapisaną config.php oraz biblioteki funkcji poety poeta_lib.php.

4. Przykład działania i wyniki

Dzięki temu, że poszczegolne wyrazy są losowane z pomiędzy dostępnych opcji, aplikacja może generować różne rozwiązania.

zapytanieodpowiedzi
elektrybałt w akcjiwydawanej w redakcji
od nauki dostaję niestrawnościmatematyk usiłuje stracić na kości
żadnych nowości
uczestniczyć znowu w rzeczywistości
i to powinno wystarczyćwypadałoby zaliczyć

5. Wnioski

Zdania na ogół są "bardzo poetyckie" - mają odpowiednią budowę gramatyczną, jednak nie mają sensu.

Sporym ograniczeniem jest to, że generowane zdania składają się tylko z małych liter.

Za to zaletą jest bardzo łatwe wprowadzanie danych.

Postawiony problem był sporym wyzwaniem, ponieważ w internecie ciężko znaleźć rozwiązania podobnych problemów. Jednak problem udało się rozwiązać, a zwracane wyniki często są bardzo ciekawe.

6. Źródła

PHP Manual http://php.net.pl/manual/pl/index.php

MySQL Manual http://dev.mysql.com/doc/

Źródło utworów: http://www.poezje.ovh.org/, http://www.spojrzenia.com/