Tutorial for NLP
Eskarn's tutorial for NLP
Adding Words and Sentences to the NLP
Natural Language Processing
(anywhere i say npl i mean nlp)
This is an advanced tutorial and probably wont have pictures
How im going to do this tutorial is explain the theory on how the NPL works then cheat
after you know how the NLP works you will understand why im gonna cheat
i will be using an unpacked dungeon
How to unpack
you will need to have the brain enabled to see the responses and debug mode is always good
settings ini in main folder
runtime { start_mode = FAST; debug_sys = BASIC; debug_render = NONE; debug_phys = NONE; debug_brain = ENABLED; save_key = ""; }
pack_dungeon\ai\nlp
you will see 59 text files each text file handles different parts of the NLP
lets start with something easy
open up
nlp_actor.txt
lets take the top set
#actor = <you> : you
#actor is the variable
<you> is the word said by the player
: you is the result
this one is a little bit different
#actor = <#name> : &0
#actor is the variable
<#name> is another variable set below so we are seeing if any of those names have been said
: &0 this is saying the first #variable so #name
if the player said tiffany it would return tiffany
if they said aiko it would return aiko
lets move on to nlp_answer.txt
#answerverb = <#actor can> : yes,&0,can,present
@answerverb is the variable
<#actor can> remember the #actor from before so if the player says any of the #actor words aswell as can so "you can" "we can" "Samantha can" etc
: yes,&0,can,present this will result as
present.can.#actor.yes with #actor being what was said
well this seems easy
nlp_actor.txt
nlp_answer.txt
nlp_attr.txt
nlp_greet.txt
nlp_object.txt
nlp_question.txt
nlp_verb.txt
are the ones that have mostly single words and then a single responses
lets move on to a harder one
and we will see how this all comes together
open nlp_ac_feel.txt
now you will instantly see it becomes a lot harder
so lets take the first response
#nquestion1 = <how * #qis * #actor> : ^qn_how_ac_feel(&1,present)
#nquestion1 is the variable
<how * #qis * #actor> #qis is set in npl_question.txt and #actor we know
so #qis can be "is" "are" "am"
"how is he" "how are you" "how am Samantha"
the * mean anything so the sentence could also be "how is [that] Samantha"
"how [nice] is [this] Samantha" "how [goobly] are [pixydustinface] Samantha"
some of these don't make sense but that's why there is many responses
: ^qn_how_ac_feel(&1,present)
^qn_how_ac_feel the ^ means the variable is not set but do it anyway otherwise there would be an error saying that its not set
the qn_how_ac_feel is used later and it would be
#actor.present
now open
nlp_result.txt
and find
// Actor feel
here is where the qn_how_ac_feel is used
qn_how_ac_feel(*,*) : get (form),&0(actor),feel(attr),&1(tense)
qn_how_ac_feel(anything,anything) so basicly #actor.present
: get (form),&0(actor),feel(attr),&1(tense)
e=[get.form,#actor.actor,feel.attr,present.tense])"
#nquestion1 = <how * #qwas * #actor> : ^qn_how_ac_feel(&1,past) #question = <#nquestion1> : question(&0) #sentence = <#question> : &0
then it all comes down to #final in npl_sentence.txt
#final = <#answer #name * #sentence *> : &1(&0,&2)
Every result has to start with the actor who the sentence is addressed to.
So #final = <#name #greet *> : &0(&1)
Can parse "Saiko Hello" -> Saiko(Hello)
if it does not have #name it must be "you(&0)"
if you understand all of this and want to try to add words and sentences in go for it otherwise im gonna show you how to cheat
only cheat if you are adding an animation command
copy the nlp_actor.txt and rename it nlp_custom
////////////////////////////////////////// // Custom ////////////////////////////////////////// #custom = <#custom0> : animation(&0) in_custom(*) : &0(animation),animation(type) #custom0 = <#customval> : ^in_custom(&0) #customval = <* handstand *> : handstand #customval = <* bend over bench *> : benchanal #customval = <* ride me *> : rideme #customval = <* cartwheel *> : cartwheel
open syntax.txt and add
#include "ai/nlp/nlp_custom.txt"
under #include "ai/nlp/nlp_sentence.txt"
open nlp_sentence.txt
and add
#final = <#custom *> : you(&0)
under nres final 0
this will make our animation response trigger first so don't use already existing words otherwise they will override them
inside the trace.txt after running the dungeon and saying the words
09:39:31 Me: CTALK: "ride me"
09:39:31 BRAIN: "Saiko[TALK]:talk=(closest:2,from:PLAYER,to:you,slen=7,cat=animation,e=[rideme.animation,animation.type])"
09:39:33 BRAIN: "state.code.ref.state.RUN0.animation.rideme"
09:39:31 Me: CTALK: "ride me"// what the player said
to:you// which is the you in #final
slen=7// how many character are in the word "ride me" includes the space
cat=animation// the animation in #custom
I think that's enough on the nlp
If i missed something or something is incorrect then let me know
Good luck