Ładne i sensowne tworzenie zdan w jezyku polskim

0

A wiec sprawa jest nastepujaca i moze sie wydac banalna ale jak stworzyc jakies zdanie w jezyku polskim :) No ja juz nie wiem :) Powiedzmy ze mam plik w ktorym sa rzeczowniki i one bede podmiotami w zdaniach Powiedzmy ze mam tez plik z orzeczeniami ale jak to polaczyc zeby ladnie gralo zeby zdania wychodzily z sensem :) No juz nawet myslalem ze mozna zrobic cos takiego ktos cos pisze do mojego bota program znajduje podmiot i go zapisuje do pliku jako jeden wyraz natomiast cale zdanie zapisuje do innego pliku czyli mam cale zdanie i niby wystarczy tylko podmienic podmiot ale i tak moze wyjsc dosc dziwne zdanie. Mam nadzieje ze rozumiecie o co mi chodzi bo na razie moj bot uczy sie calych zdan a potem je powtarza ale jak zrobic aby sam te zdania tworzyl :)

0

Samo tworzenie dowolnego prostego zdania (byle by było poprawne) nie powinno być ekstremalnie trudne, proponowałbym czasowniki podzielić na grupy: np. działania, kojarzenia, tworzenia itp. i do każdego rzeczownika dopasować numery grup jakie mogą wystąpić w zdaniu z tym podmiotem.

Natomiast kiedy dochodzi do programowania bota, to najważniejsze jest wychwytywanie sensu wypowiedzi użytkownika. Bot musiałby rozpoznawać przede wszystkim tryb wypowiedzi:
a) jeśli jest to zdanie oznajmiające, to bot powinien wychwycić ze zdania wszystkie informacje jakie mogą mu być potrzebne i zapisać je sobie w bazie, np. w formie podmiot --> cecha
b) jeśli jest to zdanie pytające, to ważną rolę pełniłoby rozpoznanie głównego zaimka pytającego ("Jak", "Co") i w zależności od tego sformułowanie odpowiedzi. Od biedy można było by też wychwytywać podmiot i wypisywać wszystkie informacje które bot o nim uzyskał.

Ta wypowiedź pewnie i tak na nic się nie przyda i tylko zaśmieca forum, więc nie zdziwie się jak ktoś mnie znowu wrzuci na swoją "czarną listę"
:-)

0

Pedros.

Ale numer mi wykręciłeś z tym postem. Ten temat jest szalenie ciekawy i chodzi mi po głowie od miesięcy (a jeżeli chodzi o mnie, to mam naprawdę ostry zakręt na punkcie algorytmiki, o czym część forumowiczów mogła się nieraz przekonać). Ostatnio myślałem nad rozpisaniem oddzielnego art'a na ten temat w dziale JAVA razem z gotową implementacją.

Niestety w tej chwili nie mam czasu na rozpisywanie art'a, więc jeśli sprawa jest pilna, to z mojej strony musi wystarczyć poniższy zarys programu, ewentualnie po sesji (początek lipca) jestem chętny rozpisać szczegóły (i implementację)

Więc w skrócie:
//jak ten post jest skrótem to pełna wersja jest chyba trzytomowa

Chcemy napisać program, który będzie generował losowe teksty, przy czym teksty te powinny być poprawnie zbudowane (na tyle, aby "gładko się je czytało") natomiast sens mogą mieć przypadkowy i zabawny.

Czyli oczekujemy poprawnej składni i przypadkowej semantyki.

Jak zbudować taki program ?
Po krótkiej chwili namysłu 99% osób powie coś na kształt:

"Program powinien być zbudowany na gruncie bazy danych słów języka polskiego, przy czym powinny istnieć osobne tabele rzeczowników, czasowników ... (części mowy), oraz każde słowo powinno mieć określoną przynależność do grup deklinacyjnych / koniugacyjnych, policzalność, wyjątkowe zachowanie ..."

Podejrzewam że ty sam na coś takiego wpadłeś ... zresztą słowo "wpadłeś" jest chyba nadużyciem - takie rozwiązanie jest po prostu narzucające się (i w mojej opinii - błędne).

Od razu widać że sytuacja jest beznadziejna, język ojczysty bowiem mamy nie najprostszy (mówiąc delikatnie) i oczywiste jest, żę pięć lat na jakichkolwiek studiach językowych nie jest czasem straconym - a zresztą czemu mamy się ograniczać do jakiegokolwiek języka ? Dlaczego by nasz programik nie mógł zarzucić jakiegoś tekstu po niemiecku ? albo staro-angielsku ?

Jestem przekonany, że jakakolwiek próba głębszego wnikania w reguły budowy zdań i składnię może prowadzić tylko do klęski.

Alternatywa ? Swojego czasu odnalazłem wprost fascynujący (żeby nie powiedzieć genialny) algorytm w książce "Perełki oprogramowania" autorstwa Jon'a Bentley'a. Oto ten zaskakujący algorytm w telegraficznym skórcie:

Przede wszystkim nie mamy doczynienia z ŻADNYM słownikiem, bazą danych itp. Źródłem słów jest tekst - książka, strona www, plik txt ... jakikolwiek tekst (trochę tego jest w sieci i spokojnie można ściągnąć niektóre książki, kodeksy prawne, biblię itp).

Pedros sugerował podmienianie podmiotu w zdaniach, ten algorytm działa podobnie. Będziemy dosłownie "mieszać" części zdań, przy czym kompletnie nie zagłębiamy się w zagadnienia lingwistyczne ...

Wybór tekstu ma znaczenie kapitalne i do kwesti tej (będzie ciekawostka) powrócę na koniec.

Aby to co mówię było bardziej czytelne, przyda się jakiś przykład. Załóżmy więc że tekstem na bazie którego będzie działał nasz generator jest książka "Nieznośna lekkość bytu" Milana Kundery, która w szczególności zawiera następujące fragmenty tekstu:

<font color="red">"Metafory są niebezpieczne. Miłość zaczyna się od metafory. Inaczej mówiąc: miłość zaczyna się w chwili, kiedy kobieta wpisze się swym pierwszym słowem do naszej poetyckiej pamięci."

"Ale właśnie dlatego jego gest wydaje mi się pełen głębokiego sensu. Nietzsche przyszedł przeprosić konia za Kartezjusza. Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się w momencie, kiedy płacze nad koniem."</span>

... zajebisty kolorek ... :-8

Dobra, teraz powiedz mi wnikliwy czytelniku, co jest takiego specyficznego w tych dwóch dobranych fragmentach tekstu ?

Powtarzalność słów i zwrotów. Zwrot "zaczyna się" powtarza się trzykrotnie, takie powtórzenia dwóch słów leżą u podstaw tego algorytmu (dobrze więc, aby tekst był stosunkowo długi i posiadał sporo powtórzeń i właśnie dlatego kodeks prawny, biblia i książka kucharska są pierwszymi naturalnymi kandydatami).

Dlaczego pary słów a nie słowa pojedyncze lub trójki ? Wynika to z pewnej chytrej obserwacji, mianowicie okazuje się, że w pewnym sensie słowo w zdaniu jest zdeterminowane przez dwa poprzedzające go słowa. Np. dwa słowa "poszedłem do" dość silnie wpływają i ograniczają to co po nich nastąpi, o wiele silniej niż tylko jedno "poszedłem". Dzięki temu osiągamy tekst, który "gładko się czyta". Naturalnie moglibyśmy brać pod uwagę trójki, co jeszcze bardziej wygładziło by tekst, niestety znacznie by zmniejszyło zabawny bałagan znaczeniowy ... zresztą spokojnie można napisać program w taki sposób, aby możliwa była dynamiczna zmiana tej liczby słów i drogą eksperymentów ustalić optymalną wartość.

Dobra, najwyższy czas wygenerować jedno zdanie.

Zaczynamy od wybrania losowego słowa w całym tekście przy czym słowo to musi rozpoczynać nowe zdanie (wielka litera i poprzedzająca kropka). Losowo wybieramy więc:

<font color="blue">Jego</span>

następne słowo najzwyczajniej dopisujemy tak jak jest (wynika to z napomnianego wcześniej założenia, że haszowanie parami daje akceptowalną poprawność składniową)

<font color="blue">Jego szaleństwo</span>

Następny krok jest najistotniejszy i cały algorytm polega na jego iterowaniu.

  1. Tworzymy pustą listę słów.

  2. Szukamy w całym tekście takich miejsc, gdzie wystąpiły dokładnie te dwa słowa "Jego szaleństwo". jeżeli znajdziemy gdzieś parę tych słów, to dopisujemy na listę to słowo, które było jako trzecie (to znaczy zaraz po "Jego szaleństwo") i szukamy dalej aż do końca tekstu.

Piękno tego algorytmu polega między innymi na tym, że z pewnością conajmniej jedno takie wystąpienie jest. (poza pewnym bardzo specyficznym przypadkiem gdy jesteśmy dokładnie na samym końcu tekstu i nasze dwa słowa nigdzie indziej się nie pojawiają - trzeba to jakoś oprogramować ... prawdopodobnie odrzucić i zacząć od nowa)

Więc posiadamy teraz listę tych słów, które znalazły się za frazą "Jego szaleństwo", całkiem prawdopodobne że książka "Nieznośna lekkość bytu" posiada kilka wystąpień tej frazy, niemniej w naszym przykładzie ograniczamy się do pewnego fragmentu, w którym ta fraza występuje tylko raz, nasza lista jest więc następująca:

<font color="green">(a</span>

  1. Z listy (w tym wypadku jedno wyrazowej) wybieramy losowo jedno słowo i dopisujemy je do generowanego tekstu:

<font color="blue">Jego szaleństwo (a</span>

Następnie powtarzamy ten krok, przy czym teraz parą słów którą operujemy jest "szaleństwo (a".

Lista wyboru będzie ponownie jednoelementowa:

<font color="green">więc</span>

Więc "losowe" (jak coś może być losowe skoro jest zdeterminowane ?) wybranie jednej pozycji z tej listy doprowadzi nas do zdania:

<font color="blue">Jego szaleństwo (a więc</span>

... powtarzamy krok ponownie, tym razem wyszukując pary "(a więc" ...

<font color="blue">Jego szaleństwo (a więc jego</span>

i robimy tak dalej (tekst jest krótki i dlatego nie ma dotychczas żadnych "rozgałęzień"), aż do chwili gdy wygenerowany tekst ma postać:

<font color="blue">Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się</span>

Szukamy słów "zaczyna się" i w efekcie nasza lista ma trzy elementy:

<font color="green">od
w
w</span>

Czy powtarzać pojawienie się "w" czy nie - to jest szczegół (aczkolwiek jest to wyrazem faktu, że pewne kontynuacje są w języku polskim bardziej prawdopodobne)

Wybieramy losowo jedną pozycję - pada na "w". Mamy więc tekst:

<font color="blue">Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się w</span>

Szukamy "się w" (na pewno w książce będą dziesiątki pozycji). W naszej liście są dwie możliwości:

<font color="green">chwili,
momencie,</span>

Losowanie i ... wypada na "chwili," (tak tak, właśnie zmieniliśmy fragment tekstu)

<font color="blue">Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się w chwili,</span>

Nawet przecinek jest poprawnie postawiony (oczywiście mamy w tym wszystkim sporo szczęścia). Szukamy "w chwili," jedyną możliwością kontynuacji jest "kiedy"

<font color="blue">Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się w chwili, kiedy</span>

Dalej szukamy "chwili, kiedy" jest jedna możliwość (aczkolwiek to dlatego bo tekst jest bardzo krótki). Zresztą do samego końca nie będzie już rozgałęzień więc zdanie kończymy w chwili gdy pojawia się kropka, czyli wygenerowaliśmy:

<font color="blue">Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się w chwili, kiedy kobieta wpisze się swym pierwszym słowem do naszej poetyckiej pamięci.</span>

Chciałem tylko zobrazować ogólną ideę tego algorytmu. W całym obrazie brakuje pewnych szczegółów, które muszą się pojawić w implementacji - niemniej intencja jest chyba czytelna - "mieszamy" tekst źródłowy w miejscach rozgałęzienia ... czyli wtedy gdy pewna para słów wystąpuje w tekście więcej niż jeden raz.

Naturalnie ciągłe przeglądanie tekstu od początku nie jest wydajne. Najlepszym rozwiązaniem jest skorzystanie ze struktury danych takiej jak mapa Haszująca, gdzie kluczem będzie para słów a rezultatem lista słów (tych trzecich) - z powtórzeniami lub bez (ja bym sugerował "z powtórzeniami).

Nie jest to wcale trudny program do napisania ... mam po prostu zbyt mało czasu w tej chwili (sesja oczywiście).

Wcześniej obiecałem ciekawostkę dotyczącą wyboru tekstu jako źródłosłowia dla naszego generatora. Mianowicie, co by się stało gdybyśmy jako źródło ustawili nie jeden a dwa teksty (a w zasadzie zlepili dwa teksty) ? Np. Wszystkie posty z tego forum + kodeks postępowania karnego ... w wyniku otrzymujemy ciekawy bełkot programistyczno-prawny.

Ale wracając do początku - cały algorytm jest pisany z myślą o bocie - oto więc moja propozycja: niech źródłem dla generatora będzie pewien tekst (np. Dramaty Shakespeare'a) a dodatkowym, drugim źródłem niech będzie dotychczasowa dyskusja na kanale.

Wchodząc głębiej w szczegóły: Można by przy okazji (wobec dużej dysproporcji w obiętościach tych tekstów) całość tak zaimplementować, aby słowa pochodzące z IRC'a były preferowane (np. modyfikator przy losowaniu słów), albo aby zdania zaczynały się od zawartości kanału ...

Ostatecznie bocik o imieniu np. "Pedros" mógłby reagować na zawołanie typu "Hej Pedros, co o tym sądzisz ?" i w tym miejsu wyskakuje interesujący komentarz informatyczno-staroangielski. (prawdopodobnie całkowicie pozbawiony sensu, lecz możliwe że zabawny).

Naturalnie tekst źródłowy może być równie dobrze napisany w innym niż polski języku. Tak długo jak pozostaje w mocy reguła "dwójka słów determinuje formę składniową trzeciego", tak długo program powinien działać poprawnie.

Nie mogę się doczekać aż ktoś w wygeneruje tekst na podstawie zawartości forum.

Pozdrawiam

ps. Niechciałem, a jednak po raz kolejny napisałem art'a - w poście ...

0

Powiem tak: pomysl bardzo interesujacy. Obawiam sie tylko, o tresci zdan, ktore moze wyglaszac taki bot :)
Ogolnie jednak tematyka botow jako sztucznej inteligencji jest bardzo itneresujaca...

0

Kapustka jestes wielki :) Wlasnie czegos takiego bylo mi potrzeba dobrego pomyslu :) A jesli chodzi o bota to on juz istnieje a dokladniej ona :) Jest dostepna czasami na gg :) Jak na razie zapsuje cale zdania do plikow a potem je odczytuje odpowiednio i wysyla. To nie jest zly sposob jezeli chodzi o rozmowe z ludzmi ktorzy by ja uczyli nowych rzeczy ale jakis czas temu chyba Sheitar powiedzial ze byloby ciekawie jak by dwa boty ze soba rozmawialy no i wlasnie do tego najlepiej aby boty same tworzyly zdanka i sie ich nawzajem uczyly :) I masz racje to chyba nie bedzie takie trudne do napisania :) Juz zabieram sie do pracy :)

[b][dopisane][/b]
Adamie jezeli chodzi o sens to mysle ze az tak strasznie nie bedzie :) Napisalem juz algorytm ktory znajduje podmiot w zdaniu (moze nie zawsze dziala jak nalezy ale zazwyczaj lapie podmiot) i wtedy wlasnie mozna towrzyc zdania aby zawieraly podmiot i mysle ze tak bedzie naprawde ladna rozmowa :)

A jesli chodzi o Monike to mozecie sobie z nia pogadac jak jest dostepna #GG: 4125691 Ale jak bedzie brzydko pisac to nie jej wina ktos ja tego nauczyl :)

0

Pewien drobiazg jest w tym algorytmie istotny - nie ma on ambicji sztucznej inteligencji. Dlatego, jeżeli ten projekt ma być całkiem "na serio" to chyba moje rozwiązanie się nie nadaje ... dlaczego? Gdyż sztuczna inteligencja powinna myśleć o sensie wypowiadanych słów ... ale to jest jak na razie nieosiągalne (z chęcią bym się tu rozpisał o eksperymentach i testach o których słyszałem ... ale zrobię to kiedy indziej)

Faktycznie wygenerowane zdania "gładko się czyta" i z całą pewnością nie będzie to bełkot w stylu:
"wymagania dwanaście Państwowy Instytut data powiedział wstał a po ..."

tylko otrzymamy nieźle brzmiący tekst, bo tak naprawdę my go nie generujemy, tylko zręcznie "mieszamy" pewnym gotowym tekstem, pamiętając przy tym o fakcie, iż "dwa słowa wymuszają poprawność składniową trzeciego" - oczywiście nie zawsze tak jest, ale reguła ta sprawdza się częściej, niż można by na początku przypuszczać.

Natomiast jedno jest pewne - wygenerowane zdania (przy odpowiednim doborze tekstu źródłowego) mogą być bardzo śmieszne i nieprzewidywalne (szczególnie gdy bocik będzie zaczynał od papugowania wypowiedzi z irc'a aż w pewnym momencie odjeżdżał w Shakeaspere'a, aby potem powrócić do programowania ...)

Celem jest tak naprawdę tylko jedno - dobra zabawa (i zaskakujący jak by nie było algorytm).

Zabawny bocik - chyba tego oczekujemy ...

0

Uch jeśli chcesz aby te zdania miały sens to musisz się nieźle napisać ;)

0

Uch

Mówiłem o tym chyba z pięć razy, ale powtórzę jeszcze raz ...

Nie chcę żeby miały sens, tylko żeby były poprawne składniowo (co sprowadza się do tego, że gładko się je czyta).

A sens ... cóż, będzie przemieszany - ale jeśli jedno na pięć zdań będzie przypadkowo zabawnie kojarzyło słowa (co jest całkiem możliwe), to chyba jest nieźle (zważywszy na to, że w ogóle nie wnikamy w jakiekolwiek słowniki, bazy danych rzeczowników, reguły składniowe, ba! nawet więcej - w ogóle nie wnikamy w język, tekst może być równie dobrze angielski) ...

trochę się powtarzam.

  • czyli tekst tej dyskusji jest dobrą pożywką dla takiego generatora

buachachachacha

//Tylko żadnego mi tam "buechecheche"
//czytajac owe buechecheche.. nasuwa mi sie taka oto wizja - kapustek z rozwichrzonymi wlosami..stoi wsrod blyskawic i z diabolicznym usmiechem i blyskiem w oku zaciera rece, wydajac tubalnym basem owe buechechecheche.. ;-) (Hłasko Marek)

0

YO!! udzielę się w tej dyskusji i zaproponuję wam wejście na www.lingubot.pl gościu jest dosyć rozmowny :)))

0

YO!! udzielę się w tej dyskusji i zaproponuję wam wejście na www.lingubot.pl gościu jest dosyć rozmowny :)))

Aczkolwiek schematyczny i sie powtarza..

0

mi się to cholernie podoba co wymyślił kapustka. Ten bocik może dawać taką filozofie że nikt nie będzie kwestionował że to nie człowiek :) naprawde nie złe!!

0

Na podobnej zasadzie działa moduł w Waldusiu na IRC'u, ponieważ ma wiedzę encyklopedyczną po angielsku czasami jak się z nim rozmawia to mówi, że Edision był starożytnym dramaturgiem etc. Jak ktoś chce sprobować pogadać zapraszam na IRC'a. Moduł nazywa się: MegaHAL, został napisany w C, jak ktoś chce sobie ściągnąć to google.pl :D.

0

Pomijajac brak sensu w tworzonych zdniach, które by zapewne dla bota się przydały, ale tak jak Kapustka wspomniał nie jest to naszym celem, to wydaje się to być bardzo fajny projekt, ale...
Kapustka już wcześniej polecił mi wspomnianą wyżej literaturę i czytając to doszedłem do wniosku, że mimo wszystko z językiem polskim będą ogromne problemy. W języku angielskim elementy zdania są ułożone w odpowiedniej kolejności i brak jest odmiany końcówek. Dzięki temu przestawianie grup wyrazów (w naszym przypadku 2) powoduje zachowanie zależności słowo-określenie (tak jak jest podmiot-przydawka, orzeczenie-dopełnienie itp.). Poza tym (co znacznie ważniejsze) nie ma konieczności dopasowywania tych @!$@$@# końcówek. Dowolne zestawienie dwóch słów daje nam teoretycznie poprawny gramatycznie zwrot (choć zwykle bez sensu). Składanie większych grup (całych zwrotów) w przypadku języka angielskiego jest już prawie 100% poprawne i to w dużym stopniu również semantycznie (każdy kto uczył się angielskiego, wie, że uczenienie się pojedynczych słów nie ma większego sensu gdyż w różnych połaczeniach mają rózne znaczenie).
W języku polskim również jest wiele zwrotów i można łączyć zwroty, jednakże są one bardziej rozbudowane i mogłoby to być bardzo problematyczne, żeby zachować końcówki (zwłaszcza, że kolejność w zdaniu jest w dużym stopiu dowolna).
Załóżmy więc, że mamy zdania budowane schematycznie (w tekście źródłowym). Przydałoby się nam jednak "wygładzenie" powstałych zdań przez dopasowanie fleksji. I to rodzi się problem: bez słownika ani rusz.

Pomysł bardzo ciekawy. Będę mu się przyglądał z ciekawością. Mam nadzieję, że coś z niego wyjdzie.

0

Możliwe, że się mylę ale ten algorytm opisywany na początku nosi nazwę algorytmu Markova. Spotkałem się z nim w jednej ksiązce autorstwa dwóch amerykanów (nazwisk i tytułu nie pamietam). Ogólnie mówiąc sam algorytm jest naprawdę ciekawy...

0

Zgodzę się, że tworzenie "sztucznych rozmówców" to całkiem ciekawy temat, choć raczej trudny :(. Polecam przyjrzeniu się serwerom MUDów (szczególnie LPMUDów, w których wprowadzona jest polska odmiana przez przypadki, rodzaje gramatyczne itp.).
[dopisane]
Apropos Moniki, to kiedy ona bywa dostępna i kto tym kieruje?

0

Właśnie dałem na serwer plik MarkovC.zip z przykładem programu do generowania tekstu na podstawie innego. (Kompilowałem w BC++ 4.5)
Kod został oparty na treści pewnej książki (szczegóły w pliku zip).
Mam nadzieję, że się spodoba... [cygaro]
Aha, ten kod generuje tekst w dowolnym języku (zależy jaki się da tekst wejściowy)

0

Sory że zaśmiecam temat ale musze przytoczyć fragmencik rozmowy z "Moniką":

Monis (14:33)
nie no nie tak wczesnie
Ja (14:31)
jak to, za wczesnie?
Monis (14:31)
no jak bym cie zlapala to bym cie normalanie zgwalacila co ty na to?


Brechtałem całe 5 minut :d :d :d

0

Pedros, jak możesz się w ogóle nie zajmowac swoją Moniką? Powiedziała mi przed chwilą, że jest bardzo samotna :-D

0

Mi na pytanie "Jak się nazywasz?" odpowiedziała:"oj musisz odpocząć, <font color="red">po</span> (???) coś mamroczesz" ;)
Ale teraz do rzeczy:
Mam taki szalony pomysł... Bo gdyby komuś z 4programmers udało się zrobić bota, który by był w stanie nie tylko poprawnie gramatycznie, ale i rzeczowo odpowiadać na pytania (na podstawie wiedzy encyklopedycznej) to by można było coś takiego zrobić (oczywiście za zgodą Adama Boducha):
Jak ktoś zadaje pytanie, to mu najpierw odpowiada bot (na podstawie wiedzy, zawartej w encyklopedii delphi, FAQ, dotychczasowych tematów na forum itp.), a dopiero jakby nie był w stanie odpowiedzieć, albo odpowiedź nie rozwiązywałaby problemu, to wtedy post trafiałby na forum. Po co to? A po to, żeby wszyscy tacy, co pytają się o rzecz która już była nie zaśmiecali forum, a otrzymywali szybką i wygodną odpowiedź (muszę przyznać, że czasem jak coś nawet było, to trudno to znaleźć). Co wy na to? :)
[dopisane do postu poniżej]
Napisałem, że to szalony pomysł, więc raczej nie wyjdzie (choć tego nie wykluczam), a jeśli chodzi o ten kod - tak jak napisałem... "a dopiero jakby nie był w stanie odpowiedzieć, albo odpowiedź nie rozwiązywałaby problemu, to wtedy post trafiałby na forum.". A więc trafiałby na forum i czekał na odpowiedź człowieka. Tak czy siak bot nie ma rozwiązywać problemów - ma tylko odpowiadać na proste pytania, na które odpowiedź zna. Na tej stronie z Lingubot'em (patrz link wcześniej) jest napisane, jakie ma zadania: "Odciążać personel (w naszym wypadku członków forum) z odpowiadania na powtarzające się pytania.". Myślę, że jakby się trochę sprężyć i wziąć do projektu paru dobrych programistów z tego forum, to by mogło się udać (trzebaby oficjalnie stworzyć projekt ProgrammersBota :)), ale myślę, że raczej wtedy, jak Kapustka będzie miał czas - napisał, że ma sesję, a jako osoba, która już coś o tym wie, byłby porządanym przewodniczącym takiego projektu.

0

Co do bota - ciekawy pomysł

Co do pomysłu z preposta - wystarczyłoby, by był w stanie zrozumiec, lecz obawiam się, iż ekhem... wszechwiedza lam, byłaby zbyt obszerna by załadować ją na serwer ;). poza tym co w sytuacji, jeśli np. ktoś by walnął cały kod i spytał się co jest źle?
Nie przesadzajmy z wymogami ;). Niech po prostu mówi po polsku - sensu większego mieć wypowiedź nie musi. Zresztą słysząc czasami pewne osoby dochodzi się do wniosku, iż bot byłby i tak mądrzejszy - przynajmniej kierowałby się jakimiś regułami. [taka mała dygresja do osoby, która nigdy tego nie przeczyta ;]

0

Zrobiłem programik, który korzysta z tego algorytmu. Zmieszałem kilka(naście) postów, trochę regulaminu forum oraz słowa Pisma Świętego (razem 3759 wyrazów). Oto najciekawsze wyniki:

-Chciałbym w tym wszystkim sporo szczęścia).

-Dlatego, jeżeli ten projekt ma być całkiem "na serio" to chyba moje rozwiązanie się nie przyda i tylko zaśmieca forum, więc nie zdziwie się jak dzieci" i otworzą swe serca dla Niego.

-On Jest drogą zbawienia dla kobiet i mężczyzn, Żydów i pogan, niewolników i wolnych, pod warunkiem, że "staną się jak ktoś mnie znowu wrzuci na swoją "czarną listę".

-Oprócz wszelkiego typu wersetów, prezentujemy również dodatkowe materiały - część z nich w formie podmiot --> cecha b) jeśli jest to wcale trudny program do napisania ...

-Więc w skrócie: //jak ten post jest skrótem to pełna wersja jest chyba nadużyciem - takie rozwiązanie jest po prostu zbyt mało czasu w tej chwili (sesja oczywiście).

-Kiedy stwarzałem niebo i ziemię, powołałem je do generowanego tekstu: Jego szaleństwo (a więc jego rozejście się z ludzkością) zaczyna się Szukamy słów "zaczyna się" powtarza się trzykrotnie, takie powtórzenia dwóch słów leżą u podstaw tego algorytmu polega między innymi na tym, że z pewnością conajmniej jedno takie wystąpienie jest.
(to chyba de best [diabel])

-Wszystkie posty z tego korzysta).

-Jesteś jak żebro, silna, a jednak był samotny.

Czyli algorytm ten nie sprawdza się zbytnio (przynajmniej dla języka polskiego), ponieważ zdania często nie mają sensu. Także ilość nie oryginalnych zdań wygenerowanych przez program jest dosyć mała. większość, to po prostu oryginalne zdania. Wiem, że w tej kwestii duże znaczenie ma słownik, ale na tyle słów...? chociaż może sam coś poknociłem i nie wszystko działa, jak trzeba... Sam nie wiem...

0

Czyli algorytm ten nie sprawdza się zbytnio (przynajmniej dla języka polskiego), ponieważ zdania często nie mają sensu. Także ilość nie oryginalnych zdań wygenerowanych przez program jest dosyć mała. większość, to po prostu oryginalne zdania. Wiem, że w tej kwestii duże znaczenie ma słownik, ale na tyle słów...? chociaż może sam coś poknociłem i nie wszystko działa, jak trzeba... Sam nie wiem...

Ten algorytm z założenia nie ma za zadanie generować zdań z sensem. W tym celu trzebaby stworzyć dwie rzeczy, których w nim nie ma: słownik oraz "encyklopedię" na podstawie której zdania tworzone są nie tylko sensowne, ale i prawdziwe...
[dopisane]

zaczyna się Szukamy słów

Tu chyba coś skiepściłeś... Jakim cudem wlazła ci tu duża litera? Po "zaczyna się" nie ma chyba nigdzie "Szukamy"... (Może nie skończyłeś w miejscu kropki, albo Kapustka (bo to chyba z jego postu ten fragment pochodzi) nie postawił kropki przed nowym zdaniem...
[dopisane]
A nie sprawdziłem to... Po prostu tam jest cytat z niedokończonego zdania, a potem słowo "Szukamy". Stąd ta dziwna sytuacja...
[jeszcze raz dopisane]
Napiszcie co sądzicie o pomocy w formie bota na 4p. Jeżeli doszłoby to do skutku, to mam pytanie (raczej do jakiegoś moderatora) w czym taki bot musiałby być napisany (czy jest możliwość napisania go w delphi, bo chyba w tym większość użytkowników tego forum jest najmocniejsza)

0

Nie chodzi o sens tylko gramatykę. I w tym wypadku też się nie bardzo sprawdza, chyba, że powtarza całe zdania.

0

buachachacha
"Kiedy stwarzałem niebo i ziemię powołałem je do generowanego tekstu: ... "

kapitalne!!
(huraaa, właśnie o to chodziło)

Przede wszystkim chcę podziękować wszystkim za tak aktywną i ciekawą dyskusję.

Pojawiły się pierwsze implementacje i podejrzewam, że niektórzy poczują się rozczarowani. Wygenerowany tekst pozbawiony jest sensu i jednolitego stylu wypowiedzi. Co prawda, przeważnie, czyta się go gładko (co jest pewnym sukcesem niewątpliwie), lecz problemy z prawidłową odmianą są wielkie.

W czym tkwi problem ? Nie zapominajmy jak działa algorytm - odnajduje w tekście ostatnie dwa słowa właśnie wygenerowanej wypowiedzi. Jeżeli są to słowa np. "poszedłem z" ... to można oczekiwać, że kolejne wybrane słowo będzie sensowne, ale jeśli mamy do czynienia ze zwrotem takim jak "a jednak", "i tylko" lub "z tego" ... to mamy do czynienia z prawdziwą loterią (loteria kwantowa hihi).

Dodatkowo wyszła na jaw 'porażkas' z wszelkiej maści zaimkami. Takie słowa nie funkcjonują samodzielnie tylko wskazują na inne wyrazy. Jeśli w oryginalnym tekście, te wskazywane wyrazy znajdują się daleko (a dokładniej - dalej niż dwa wyrazy), to generatorek się wykoleja - praktycznie za każdym razem.

Ale spójrzmy na te fragmenty drugi raz:
-Chciałbym w tym wszystkim sporo szczęścia
-Oprócz wszelkiego typu wersetów, prezentujemy również dodatkowe materiały - część z nich w formie podmiot --> cecha

Mówiąc zupełnie szczerze ... chyba nie jest źle jak na program, który ma mniej niż 100 wierszy kodu (zgaduję) i nie korzysta z żadnego słownika, czy wymyślnych struktur semantycznych.

Dryo wspomniał bodajże o tym, by wygenerowany tekst w drugim kroku przepuścić przez parser, którego zadaniem jest operowanie na końcówkach wyrazów - odmiana przez przypadki i osoby. Oczywiście jeśli taka czynność jest algorytmiczna, to można by podjąć się tego trudu ...

Prawdopodobnie teksty angielskojęzyczne będą dawały lepsze efekty (praktycznie brak odmiany).

Można zrobić jeszcze dwa eksperymenty, które praktycznie nic nie kosztują:

  1. Przede wszystkim sprawdzić różnego typu teksty źródłowe.
  2. Zmodyfikować algorytm, tak aby wyszukiwany wzorzec był dowolnej długości (a nie jak dotychczas dwuwyrazowy)

Jestem w tej chwili dokładnie tydzień przed rozpoczęciem sesji ... nie znajdę czasu na jakiekolwiek extra kodowanie, ale w trakcie wakacji możecie oczekiwać programiku z przyjaznym środowiskiem graficznym.

Jeszcze raz Wielkie dzięki za gorącą atmosferę i wprost pasjonującą dyskusję.

0

No ja tez napisalem ten algorytm dla Moniki a jako tekst zrodlowy dalem jej jakas polowe konstytucji RP :) No trzeba przyznac ze zdania jej ladnie wychodzily ale ta moja implementacja jeszcze nie dziala do konca dobrze bo czasami sie zapetla nie wiem czemu ale to tylko troche pracy i juz nie bedzie :) Ale odpowiedzi jakie Monika dawala nie powstydzil by sie sam Lepper :-D Jezeli chodzi o odmiane to ja w Monice zrobilem aby zmieniala koncowki meskie na zenskie i juz z tym jest problem bo mamy tak wspanialy jezyk :) Jak jako zrodlo odpowiedzi dalem jej odpowiedzi ludzi z ktorymi rozmawiala to odpowiedzi byly podobne jak te wczesniej co dawala moze dlatego ze ma jeszcze dosc maly zasob zdan i dlatego tak wychodzi :) Ale Monika to i tak najlepszy bot na swiecie bo moj :) Jak ktos chce to na mojej stronie sa logi z jej rozmow. Czasami odpowiada jak czlowiek a czasami jak cos palnie to nie wiadomo jak to rozumiec :) No mam nadzieje ze jak zdobedzie troche dluzszych zdan to bedzie ladnie odpowiadac a zeby zdobyla troche wiecej zdan no to nalezy ja poscic miedzy ludzi :)

0

http://www.ai.of.pl

Tam jest fajny opis tworzenia botów takich jak A.L.I.C.E, i innych. Fajna stronka. W ostatnim chipie był opis projektu LAD (chyba tak to sie nazywało) to był bot co gadał i sie uczył na podstawie sieci neuronowych.
Ja tez robiłem niedawno takiego bota. Projekt nazywał się E-Friend (all righst reserved!!) i można go było nazwać. Ja chciałem zrobić coś takiego

                     Faza Pierwsza: Analiza zdania
                                           |
                                           |         Niedudana
                                           v
                     Faza Druga: Szukanie czy takie zdanie jest w słowniku
                                           |
                                           |   nieudane
                                           v
                      Losowanie awaryjne
                       czyli rzucał takie textu, jakie mogą pasować do wszystkiego np. Być może, zastanów się nad tym itd...

W Fazie pierwszej rozkładał zdania na kawałki, i patrzył czy np. Pierwsze słowo to jestem - jeżeli było "jestem" to przeszukiwał bazę danych z przymiotnikami, które do tego pasowały - jeżeli następny wyraz był "zmęczony", to składał sobie zdanie:

var
totoloto:Integer;
slowo, klejka, dwa:String;

begin
Randomize;
totoloto:=Random(52+1;
case totoloto of
1='Powinienes';
2='Musisz'; //itd...
end;
totoloto:=Random(5)+1;
case totoloto of
1=' iść spać';
2=' odpoczywać dużo';
3=' więcej jeść';
4=' mniej pracować';
5='więcej spać';
end;
Memo1.Lines.Append(slowo+dwa);

{
w ten sposób on składał zdania, jest to oczywiście bardzo prymitywne, a rozmowa z małą bazą danych nie jest zbyt intrygująca, cazkolwiek czasem może być bardzo sensowna.

losowanie Awaryjne:
}
var
klejka:string;
totoloto:Integer;

begin
randomize;
totoloto:=Random(5)+1;
case totoloto of
1='Byc może...';
2='Muszę się nad tym zastanowić';
3='hmmmmmm....';
4='aha';
5='Zastanów się co mówisz!!';
end;
Memo1.Lines.Append(klejka);

To jest tylko przykład w oryginale było ich chyba z 30...

Kolejna fazy zachodzą oczywiście przy niepowodzeniu poprzednich. Czyli jeżeli bot rozbierze zdanie - nie będzie znał pierwszego wyrazu to przejdzioe do fazy drugiej - bedzie szukał całego wyrażenia usera w bazie danych, jeżeli i tam nie znajdzie to przejdzie do fazy losowania awaryjnego. Cały ten system nie jest może zbyt zaawansowany programistycznie, aczkolwiek kilka razy nawiazałem całkiem sensowną rozmowę

//Moja mama też z nim gadała i się bardzo smiała

P.S. - Trzeba przygotować tego bota na głupich ludzi, którzy będą go próbowali oszukać - zawsze się tacy znajdą!!!

//Dopisek - jak go skończę to wrzucę na serwer demko, albo pełną, bo tej mojej paplaniny nie mozna momentami zrozumieć. na razie nie wrzucam bo jest kiepski i... wstyd

//Dopisek - jak na razie ten program odpowiada na pytania zaczynające się od "co to" i ile itd.. Jak na razie mój bot jest bardziej KULTURALNY i INTELIGENTNY od kilku moich kolegów :) (bez urazy dla nikogo - fakty)

0

Co do algorytmu, bomba pomysł. Tylko jak już to pokazano taki algorytm działa lepiej operując jezykami składniowymi (w których kolejność słów w zdaniu - szyk, ma duże znaczenie) niż z jezykami fleksyjnymi czyli takimi w których formy słów są ważniejsze, a przedstawicielem tej grupy jest nasz język ojczysty. Jak dobrze pamiętam to w języku Polskim występuje 56 form w jakich może wystąpić czasownik. (Jak teraz pomyśleć o możliwych permutacjach to aż skóra cierpnie). Generalnie chodzi o to, że w jezyku polskim powiedzenie:

"Bociana dziobał szpak, a potem nastąpiła zmiana Szpak dziobał bociana, a potem nastąpiły trzy takie zmiany i kto był dziobany?"

ma sens, spróbujcie to samo zrobić w jezyku składniowym kompletnie rozsypie się sens zdania. Nie mniej pomysł świetny i warty uwagi. pozdrawiam i życzę powodzenia.

0

Wiecie juz dosc dawno napisalem to w delphi ale ze ostatnio Monika jest napisana w php i jest dostepna na mojej stronie postanowilem napisac ten algorytm w php ale chcialem sie o nim czegos wiecej dowiedziec. Jak szukalem na google o Markovie to mi znalazlo wiele stron ale zadna nie byla zwiazana z tym algorytmem moze wiecie cos wiecej na ten temat chociaz jak to sie nazywa zebym cos o nim wiedzial :)

0

Ten pomysl z laczeniem par slow jest ciekawy, ale wyjatkow jest taka ilosc, ze niestety czesto i chetnie bedzie sie mylil. Wystarczy, ze znajdzie sie kilka slow oddzielonych przecinkami i juz sie moze znaczenie poplatac. Ale jesli ktos ma spis slow wraz z okresleniem czy jakiego sa rodzaju, to mysle ze wowczas moznaby pozbyc sie bledow.

Hehe, ten temat mnie zmobilizowal i napisalem swojego bota, ktory zupelnie inaczej dziala. Wlasciwie Bot Pedrosa jest dobry, bo uczy sie od rozmowcy, ale uczy sie w zly sposob! Moj bot zapamietuje co powie rozmowca. Np. rozmowca spytal "Jak sie masz?". Bot nie umial udzielic dobrej odpowiedzi, ale pytanie zapamietal. Potem jak rozmawia z kims innym, to zadaje mu pytanie ktore zapamietal u poprzedniego rozmowcy: "Jak sie masz". A po tym jego nowy rozmowca odpowiada "Swietnie". I od tej pory bocik zapamietal, ze jak ktos zada mu pytanie "Jak sie masz?", to trzeba odpowiedziec: "Swietnie". Prawda, ze proste? 2h pisanie, 5h poprawianie i uczenie i jakos dziala :).
Radzilbym wiec pojsc w tym kierunku, bo zeby nauczyc bota tworzenia logicznych zdan trzeba bardzo wiele danych wprowadzic - slowa, typy, odmiana itp. I w efekcie nawet jak napiszesz na to dobry algorytm to i tak nie bedziesz mial cierpliwosci wprowadzac tych zasad.

1 użytkowników online, w tym zalogowanych: 0, gości: 1