Ahoj, v minisoutěži o placku a samolepky na tento týden si zkusíme
naprogramovat cleverbota v PHP. Jedná se o chat člověka s počítačem. Na
webové stránce bude zobrazena textarea s textem, který se odesílá robotovi
a dále posledních několik vět v konverzaci.
V základní fázi by měl robot umět odpovídat na základní otázky typu
"Jak se máš?", "Kolik je hodin?" nebo "Máš rád něco"? a podobně.
Samozřejmě by měl umět odpovědět i v případě, když napíšeme Jak je,
Jak se máme atd. Konverzace se může ukládat např. do session.
V pokročilé podobě by program mohl do databáze ukládat otázky, které
položil člověk robotovi a ty potom zkoušet občas člověku položit a
uložit si lidskou odpověď. Když se následně někdo jiný robota zeptá na
stejnou věc, odpoví, což člověka dost možná překvapí
Ukažme si příklad. Někdo se zeptá robota kolik stojí prášek do
pečiva. Robot to samozřejmě nemůže vědět, tak nejlepší co může
udělat je analyzovat větu a když zjistí, že obsahuje slovo kolik a na konci
otazník, odpoví třeba "hodně". Otázku si však uloží a potom ji položí
jinému člověku, se kterým si píše, ten mu odpoví, že 10 korun. Když se
následně někdo jiný zeptá na tu samou otázku, robot již zná odpověď.
Představte si, že vašeho robota opravdu umístíte na web a za několik
týdnů nebo měsíců se ho lidé zeptají na stovky vět. To už by mohlo být
zajímavé.
Samozřejmě je zde háček v tom, jak poznat podobnou otázku od člověka,
je třeba z vět odstranit spojky a podobná zbytečná slova a tak najít
klíčová slova a podle nich podobné věty.
Určitě si program zkuste, není zde žádná laťka jak to musí
fungovat a tak může placku získat i velmi jednoduché řešení. Navíc je to
zábavná úloha
Paradne zadanie, skusim nieco spravit, mozno sa mi podari osekat moj kod zo
starsieho projektu, ktory je ale trosku rozsiahlejsi (v podstate disponuje
ciastocnou umelou inteligenciou).
https://drive.google.com/…NWszN1E/edit?…
Tady je mé jednoduché řešení, udělal jsem to zhruba za 10 minut. Moc toho
neumí, učí se postupně. Je to napsané v C#, data to nikam neukládá. Čím
více mu toho řeknete, tím bude chytřejší.
Tohle téma je zajímavé.
16:22:31LinuxD
držhubu
16:22:32Kecal Víčko
Kolik ti je?
16:22:34LinuxD
15
16:22:35Kecal Víčko
Proč to říkáš?
16:22:41LinuxD
ptal jses
16:22:42Kecal Víčko
Bez práce nejsou koláče.
Je to super !
Zatím to vypadá takto. http://cleverbot.filippyrek.cz/ Chtěl bych udělat to že
když by se zeptal sám od sebe na nějakou otázku tak by si tu odpověď
vložil do db, ale to možná nestihnu do deadline
Ty: kolik stojí mobil?
Cleverbot: Málo
Ty: Kolik stojí raketoplán
Cleverbot: Hodně
Ty: kolik stojí ponorka?
Cleverbot: Hodně
Ty: kolik stojí papír
Cleverbot: Hodně
Ty: kolik stojí pentilka
Cleverbot: Nevím
Ty: kolik stojíš ty?
Cleverbot: Nevím co ti na to mám odpovědět. Prosím odpověz za sebe:
Ty: kolik stojí mobil?
Cleverbot: Hodně
Ty: Kolik stojí raketoplán
Cleverbot: Málo
Ty: kolik stojí ponorka?
Cleverbot: Nevím
Ty: kolik stojí papír
Cleverbot: Hodně
Ty: kolik stojí pentilka
Cleverbot: Málo
Ty: kolik stojíš ty?
Cleverbot: Snažím se si rozšíři slovní zásobu. Odpověž za sebe prosím:
Ty: zdravím
Clever bot: Nevím co ti na to mám odpovědět. Prosím odpověz za sebe:
Ty: jenom jsem pozdravil
Cleverbot: Děkuji ti za odpověď. co?
Ty: proč se mě furt ptáš?
Cleverbot: A teď se ptej ty.
Ty: nebudu se na nic ptát
Cleverbot: Nevím co ti na to mám odpovědět. Prosím odpověz za sebe:
Ty: už neřeknu ani slovo
Cleverbot: Děkuji ti za odpověď. Seš na chlapce?
Cleverbot: A teď se ptej ty.
Ty: co umíš
Cleverbot: Nevím co ti na to mám odpovědět. Prosím odpověz za sebe:
Ty: já umím odpovídat
o pár řádků později
Cleverbot: A teď se ptej ty.
Ty: co umíš
Cleverbot: já umím odpovídat
Schválně, co ho naučím teď...
Ty: kdo je tvůj otec?
Cleverbot: Můj otec je programátor z devbooku, FilipPyrek.
Ty: kdo je tvoje matka
Cleverbot: Nevím co ti na to mám odpovědět. Prosím odpověz za sebe:
Zaznamenal jsem zde jen již populárního robota od Filip Pýrek. Placka
je tedy tvoje Napiš
x do zpráv adresu a jakou chceš (algoritmy nebo PHP).
Co se týče funkčnosti aplikace, tak to docela funguje. Mohl by se však
ptát méně okatě, ruší to celkový dojem z konverzace. Tedy místo
"Odpověz za sebe prosím" by měl odpovědět jen něco z DB nebo něco
náhodného. Otázku by potom měl položit znovu ne tobě, ale někomu jinému
a bez upozorňování, že neví co znamená, prostě se ho na to normálně
ptá. Ideálně třeba do DB ukládat IP adresu, aby ji položil vždy někomu,
kdo se na ní neptal.
Kód je objektový, i když metoda tellMe se moc objektově netváří. Pokud
chceš aplikaci do budoucna rozšiřovat, určitě by chtělo vymyslet jakým
způsobem věty analyzovat. in_array(.., $slova) se tam vyskytuje nějak
mockrát.
Kdybys s tím pokračoval, tak dej vědět, líbí se mi to
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.