This is a very simple chatterbot written in Io
To learn Irma how to answer something, do :
Irma register("something", "how to answer")
To get an answer :
Irma answer("Blaha blaha")
To save Irma to a file :
Irma saveToFile("filename")
To get Irma's vocabulary from a file
Irma withFile("filename")
Sequence words := method( Regex setIsUTF8(true) setString(self) setPattern("\\w+") allMatches map(asString) )
Object or := method(self)
Irma := Object clone do(
vocabulary := Map clone
vocabulary atPut("bonjour",list("Salut !"))
vocabulary atPut("salut",list("Comment vas-tu ?","Bonjour"))
register := method(rep1, rep2,
rep1 := rep1 asLowercase words join(" ")
if(vocabulary at(rep1),
vocabulary at(rep1) append(rep2),
vocabulary atPut(rep1, list(rep2))
)
)
answer := method(rep,
exactAnswer(rep) or nearAnswer(rep)
)
exactAnswer := method(rep,
rep := rep asLowercase words
vocabulary detect(k, k words == rep ) ?at(1) ?anyOne
)
randAnswer := method( vocabulary values flatten anyOne )
nearAnswer := method( rep,vocabulary at(vocabulary keys max(words intersect(rep asLowercase words) join size)) anyOne)
save := method( vocabulary serialized )
with := method( dict, vocabulary = doString(dict) )
saveToFile := method( file, f := File clone with(file or "irma_sav.io") openForUpdating ; f write(self save println) ; f close)
withFile := method( file, self with(File clone with(file or "irma_sav.io") open readLines join("\n")))
willFree := method( "Saving Irma" println ; saveToFile( "irma.emergency.io" ) )
)