Salutammo!
' ///////////////////////
'
' B A B B E A
'
' ///////////////////////
'
' //// E' IMPORTANTE CHE SIANO PRESENTI I DUE FILES... PARDON, LA BASE DI
' CONOSCENZA E TUTTE LE CONNESSIONI SINAPTOQUANTICOPAPPARDELLICHE
'
' OVVERO: FRASI.TXT E EVA.TXT
DECLARE FUNCTION CONTROLLAPAROLE& (PAROLEA$(), CNTA&, PAROLEB$(), CNTB&)
DECLARE FUNCTION ESTRAIPAROLE& (X$, PAROLIST$())
DECLARE SUB INIT ()
DEFLNG A-Z
RANDOMIZE TIMER
CONST TRUE = -1, FALSE = 0
'
' //// ATTIVARE IL DEBUGMODE PER INTERESSANTI SCOPERTE SCIENTIFICHE
' NEL MONDO DELL'I.A.!!!
'
DEBUGMODE = FALSE
DIM PAROUTEN$(50), PAROCOMP$(50)
COLCOMP = 7
COLUTENTE = 3
LOCATE , , 0
COLOR 7, 0
CLS
CALL INIT
COLOR COLCOMP
PRINT
PRINT "Ciao sono Babbea! :-)"
PRINT "Sono un Pastrocchio Virtuale, è sto per"
PRINT "interpretare la parte prevista dal copione!"
PRINT
'
' //// APRO IL COPIONE, APPUNTO
'
FILEFRASI = FREEFILE
OPEN "I", FILEFRASI, "FRASI.TXT"
'
' //// APRE IL FILE CON LE RISPOSTE EVASIVE. CERCAVO UN METODO MOLTO STUPIDO
' PER GESTIRLE, E HO PENSATO A QUESTO. FACCIO IN MODO CHE NEL FILE CI
' SIA SCRITTO QUANTE RISPOSTE CI SONO, DIMENSIONO UN ARRAY E LE CARICO!
' OH, SI. E' VERAMENTE UN SISTEMA STUPIDO! ANDRà BENISSIMO...
'
FILEEVA = FREEFILE
OPEN "I", FILEEVA, "EVA.TXT"
INPUT #FILEEVA, NUMEVA
DIM FRASIEVA$(NUMEVA)
FOR I = 1 TO NUMEVA
LINE INPUT #FILEEVA, FRASIEVA$(I)
NEXT I
CLOSE FILEEVA
LOCATE , 1
PRINT "Cominciamo pure..."
DO
COLOR COLUTENTE
PRINT "> ";
LOCATE , , 1
LINE INPUT TESTO$
LOCATE , , 0
TESTO$ = LTRIM$(RTRIM$(UCASE$(TESTO$)))
COLOR COLCOMP
'
' //// CORAGGIO... DIAMO UNA GUARDATA A COSA CAVOLO DI SCRIVONO...
'
IF TESTO$ = "" THEN
'
' //// SE NON SI SCRIVE NIENTE, FINIAMOLA QUI
' FACCIAMOLO CON UNA FRASE DA DURO, ALLA TERMINATOR! :D
'
PRINT "Hasta la vista, Baby!"
EXIT DO
ELSE
'
' //// COMINCIAMO COL FARE A PEZZI LA FRASE
'
PAROLEC = ESTRAIPAROLE(TESTO$, PAROUTEN$())
'
' //// QUI CI STAREBBE BENE IL CONTROLLO PER IL TURPILOQUIO.
' MA è TALMENTE BANALE CHE ANCHE UNO PSEUDO-SEDICENTE-GURU
' HA DETTO CHE HA POCO A CHE FARE CON L'IA, QUINDI PASSIAMO
' OLTRE SENZA ULTERIORE INDUGIO! :D
'
'
' //// CONTROLLA LA BASE DI CONOSCENZA PER TROVARE LA FRASE CHE
' PIù CORRISPONDE
'
MAXMATCH = 0
MATCHCHIAVE = 0
SEEK FILEFRASI, 1
DO WHILE NOT EOF(FILEFRASI)
CHIAVEPOS = SEEK(FILEFRASI)
LINE INPUT #FILEFRASI, TEXT$
IF TEXT$ = UCASE$(TEXT$) THEN
PAROLEN = ESTRAIPAROLE(TEXT$, PAROCOMP$())
PUNTI = CONTROLLAPAROLE(PAROUTEN$(), PAROLEC, PAROCOMP$(),
PAROLEN)
IF PUNTI > MAXMATCH THEN
MAXMATCH = PUNTI
MATCHCHIAVE = CHIAVEPOS
'
' //// I PRINT DI DEBUG SONO INTERESSANTI PER AVERE
UN'IDEA DI COSA FANNO
' IN PRATICA I PRODIGIOSI PROCESSI COGNITIVI DI
BABBEA!!!
'
IF DEBUGMODE THEN PRINT PUNTI; "***", TEXT$
END IF
IF DEBUGMODE THEN IF PUNTI > PAROLEC * 3 THEN PRINT PUNTI,
TEXT$
END IF
LOOP
IF (MATCHCHIAVE = 0) OR (MAXMATCH < 1) THEN
'
' //// RISPOSTE EVASIVE! NE SCELGO UNA A CASO...
'
E = INT(RND(1) * NUMEVA) + 1
PRINT FRASIEVA$(E)
ELSE
'
' //// SELEZIONA RISPOSTA!
' QUI SALTO DIRETTAMENTE ALLA RISPOSTA RAGIONATA, LEGGASI
' PAPPARDELLA PRECONFEZIONATA. VOLENDO FARE I RICERCATORI
' VERAMENTE FIGHI :) POTREI IN CASO DI DUBBIO (VALUTANDOLO
' AD ESEMPIO PER SIMILITUDINE DI PUNTEGGIO TRA VARIE FRASI
' CHIAVE, OPPURE IN CASO DI MANCANZA DI ADEGUATO NUMERO
' DI PARTICELLE TIPO IL UN DI CHE, ECCETERA) PRENDERE LA
' PRIMA RISPOSTA (CHE SIMULA UN ROVESCIAMENTO DELLA DOMANDA)
' PREMETTERE UNA COSA TIPO "INTENDI FORSE DIRE..." E POI
' AGGIUNGERE "ALLORA DIGITA" E METTERE LA FRASE CHIAVE.
' MA MI SEMBRA TALMENTE UN'OFFESA ALL'INTELLIGENZA CHE NON
' LO FACCIO NEMMENO... :D
'
'
SEEK #FILEFRASI, MATCHCHIAVE
FOR I = 1 TO 3
LINE INPUT #FILEFRASI, TEXT$
NEXT I
PRINT TEXT$
END IF
END IF
LOOP
COLOR 7, 0
END
FUNCTION CONTROLLAPAROLE (PAROLEA$(), CNTA, PAROLEB$(), CNTB)
'
' /// QUESTA è UNA VERSIONE ULTRA BANALE E PRIMITIVA PER UN SISTEMA
' DI PATTERN MATCHING. SI POTREBBERO SPERIMENTARE UN'INFINITà
' DI CORRETTIVI. MA IL BELLO è CHE GIà COSI HA UNA PARVENZA
' DI FUNZIONAMENTO...
' QUESTO MI AUTORIZZEREBBE FORSE A PARLARE DI IA.... ?!!?? :D
'
FOR A = 1 TO CNTA
IF LEN(PAROLEA$(A)) > 2 THEN
FOR B = 1 TO CNTB
IF PAROLEA$(A) = PAROLEB$(B) THEN
PUNTI = PUNTI + LEN(PAROLEA$(A))
MATCH = MATCH + 1
ELSEIF PAROLEA$(A) = LEFT$(PAROLEB$(B), LEN(PAROLEB$(B)) - 1)
THEN
PUNTI = PUNTI + LEN(PAROLEB$(B)) - 1
END IF
NEXT B
END IF
NEXT A
'
' //// QUESTO DOVREBBE DARE PRIORITà ALLE FRASI CHIAVE PIù BREVI
'
D = CNTB - MATCH
IF D < 1 THEN D = 1
PUNTI = PUNTI / D
CONTROLLAPAROLE = PUNTI
END FUNCTION
FUNCTION ESTRAIPAROLE (X$, PAROLIST$())
SEPARATORI$ = " ,.:;'?!></\-+*" + CHR$(34) + CHR$(9)
PAROMINLUNG = 1
FOR I = 1 TO LEN(X$)
C$ = MID$(X$, I, 1)
IF INSTR(SEPARATORI$, C$) > 0 THEN
TEXT$ = TEXT$ + " "
ELSE
TEXT$ = TEXT$ + C$
END IF
NEXT I
TEXT$ = TEXT$ + " "
DO
P = INSTR(TEXT$, " ")
IF P > PAROMINLUNG THEN
CONTAPARO = CONTAPARO + 1
PAROLIST$(CONTAPARO) = LEFT$(TEXT$, P - 1)
END IF
TEXT$ = LTRIM$(MID$(TEXT$, P))
IF TEXT$ = "" THEN EXIT DO
LOOP
ESTRAIPAROLE = CONTAPARO
END FUNCTION
SUB INIT
COLOR 0, 7
PRINT "BABBEA (Un Programma vagamente ironico) "
COLOR 7, 0
PRINT "Ogni ravvisabile riferimento a cose, persone, "
PRINT "personaggi virtuali, baggianate varie, eccetera "
PRINT "è da considerarsi assolutamente casuale! :D "
PRINT "------------------------------------------------"
END SUB
--
Posted from 64.124.150.140.safeweb.com [64.124.150.140]
via Mailgate.ORG Server - http://www.Mailgate.ORG
>Ecco a voi Babbea!
NOOO!!!! ma sei un mito!!! :-)
ma tutti questi mitici anonimi...che imperversano nel newsgroup!! noo!!! :-)
Quale Eloiso, le chiedo se sarebbe possibile usare Babbea come mascotte per il
Francesco Lentini fans club.
Sarebbe disposto a cedere gratuitamente i diritti del sorgente agli Eloisi ?
( i quali licenzieranno il software sotto GPL )
Inoltre grati del suo lavoro, la inciteremmo a diventare un Eloiso.
--
sandro pons
"Gli amici dei miei utenti possono diventare miei utenti".
Lo dice ELOISA, il bot che "chatta".
da: Virgolette di punto-informatico.it
Hai ragione. Anche se, purtroppo, credo sia sempre e soltanto lui... :-(
il LADRO Rocco Papaleo, alias Draco Roboter, alias Uno dei tanti.
Ma fa piacere lo stesso (non è da tutti avere dei fans, anche se fasulli).
--
Cibernetica-mente,
Francesco Lentini
http://www.eloisa.it - Eloisa® Official Web Site