2012-06-29 8 views
5

Mam ten osobisty projekt C++ i obecnie utknąłem. Wygląda na to, że wiele osób zadawało pytania na ten temat, a teraz chciałbym przeprosić, jeśli jest to powtórne pytanie.Odpowiedzi na pytania w oparciu o bot w chacie na czacie w C++?

W każdym razie, ten projekt to bot, który odpowie na podstawie danych wprowadzonych przez użytkownika. Obecnie w postaci trwa całe zapytanie i szuka dopasowania za pomocą długich, nieefektywnych linii instrukcji if. Jeśli znajdzie dopasowanie, odpowie z określoną odpowiedzią.

Powodem, dla którego tu przybyłem, jest to, że mam dość pisania bardzo czasochłonnych i nieefektywnych oświadczeń, które nie uwzględniają nawet wszystkich odmian tego samego pytania. Nie szukam kodu ani rozwiązań, które pobierają dane z Wikipedii lub czegoś podobnego. Chciałbym, żeby bot czatu odpowiedział tylko na kilka prostych pytań.

Podczas mojego czasu odrabiającego się instrukcjami if, wpadłem na pomysł. Dlaczego nie używam słów kluczowych tak jak wyszukiwarka w rankingu stron internetowych?

Mam napisany kod, aby zliczyć, ile razy słowo kluczowe (lub kilka różnych) istnieje w zapytaniu. Problem polega na tym, jak je ustawić, aby znaleźć najlepszą odpowiedź? Zakładam, że odpowiedzi i słowa kluczowe będą musiały być przechowywane w specjalny sposób.

Moja lista odpowiedzi na moje główne pytanie, jakim są:

1. Po otrzymaniu zapytania, oceniającym go za pomocą pliku ini gdzie ma słowa kluczowego (y) w kluczu, a odpowiedź jako wartość tego. Jeśli istnieje wiele odpowiedzi, weź inne słowo kluczowe i wyszukaj je, a także oryginał (zmniejszając zakres). Wykonanie tego wystarczająco długo powinno dać prawidłową odpowiedź.

Plusy: Pasuje do tego, co muszę zrobić, i jest to coś, co mogę zrozumieć w C++.

Wady: Wydaje długie i nieefektywne, prawie jak nurkowanie w if znowu ...

2. Korzystanie z bazy danych SQL, powiedzieć to, aby znaleźć odpowiednią odpowiedź. Nie jestem pewien, jak by to się stało.

Zalety: Byłaby to niewielka waga, ponieważ komputer bazy danych obsługiwałby wyszukiwanie i mógłby być dość szczegółowy.

Minusy: Może powodować trochę bólu, ponieważ jestem już dość wysokie wody z C++. Jednak zaczynam myśleć, że skończy się tak jak instrukcje if.

3. Najlepszą odpowiedzią, że ktoś tu jest prawdopodobnie sugerować aiml (który był discussed here).

Plusy: Używane do tworzenia inteligentnych botów czatowych i mają dużą moc.

Wady: wydaje się zbyt „ciężkie” dla mojego prostego projektu i nie mogę paznokci dół przeszukiwanie że znajdzie mnie łatwy do zrozumienia kod bota który zabierze aiml.

Mam nadzieję, że ktoś może zaproponować inteligentną trasę do wzięcia, ponieważ nie jestem fanem C++ i czuję, że już podążam głębinowo z tym projektem. Jednak tego lata czułem się jak ugryzienie się w język, wyjście z mojej strefy komfortu i na raz zrobienie czegoś użytecznego w C++. Mógłbym zrobić to szybko w PHP, ale aby wysyłać wiadomości, muszę użyć C++.

+0

Jeśli mógłbyś zrobić to w php, co powstrzymuje cię od zrobienia tego w języku C++? Powinieneś też bardziej skupić się na kontekście niż na rankingu słów kluczowych, jeśli chcesz, aby wyglądał na inteligentnego. – gcochard

+1

Jeśli chodzi o uczynienie sztucznej inteligencji co najmniej trochę "inteligentną", będzie to wymagało wiele pracy. Pierwszym etapem żałoby jest akceptacja. –

+0

Kontekst byłby czymś prostym, już to przemyślałem. Po prostu znajdziesz właściwą lub najlepszą odpowiedź. Kiedy wychowywał się Alex, obawiam się, że żadna sztuczna inteligencja nie będzie łatwa do zrobienia. Nie jestem najlepszy w C++, ale w tym samym czasie się nie czołgam. Nie jestem przyzwyczajony do C++ i wciąż zawijam głowę niektórymi koncepcjami. –

Odpowiedz

0

Zrobiłem coś podobnego z botem IRC jakiś czas temu i użyłem do tego AIML. Liczenie, ile razy słowo kluczowe występuje w zdaniu, nie wydaje się bardzo trafnym sposobem. Korzystanie z AIML jest prawdopodobnie drogą do zrobienia. Gdybyś użył AIML, nie musiałbyś dużo zawracać sobie głowy pisaniem kodu C++, ponieważ rzeczywisty "mózg" (jak można nazwać) jest napisany w AIML. Niewielki fragment kodu, który I (dobrze myślę, że przyszedł z przykładu dla dużej części) napisał załadować libaiml.xml (plik zawierający kod aiml dla bota):

#include <aiml.h> 
// ... 
using namespace aiml; 

// setup Ai bot: 
cInterpreter* interpreter = cInterpreter::newInterpreter(); 

try { 
    if(!interpreter->initialize("libaiml.xml")) 
     throw 1; 
} catch(int _ret) { 
    cout << "ERROR: " << interpreter->getErrorStr(interpreter->getError()) 
     << " (" << interpreter->getError() << ")" << endl; 
    if(!interpreter->getRuntimeErrorStr().empty()) 
     cout << "Runtime Error: " << interpreter->getRuntimeErrorStr() << endl; 
} 

I wtedy użył interpreter->respond(message, "name", result);, aby uzyskać odpowiedź. Połączyłem się z libaiml (potrzebuje libxml2), który można znaleźć pod http://www.alicebot.org/downloads/programs.html.(scroll aż do C++, powinieneś tam znaleźć libaiml; zauważ, że musisz także zainstalować std_utils). Możliwe, że mój kod przestał działać z powodu aktualizacji w bibliotece, nie wiem. Na szczęście libaiml zawiera również miły przykład, który był dla mnie bardzo przydatny w tym czasie.

Powinieneś być w stanie znaleźć całkiem sporo dokumentacji na temat samego formatu XML, np. http://www.alicebot.org/TR/2011/. Polecam zapoznać się z powyższym przykładem (dołączonym również do libaiml).

Życzę powodzenia!

Powiązane problemy