In the example below, you can see we're reffering to the Name and Artist fields
of the Song type declared above, both {Name} and {Artist} are our keywords
and yes! you guessed it! Everything between play and by will be treated as a
{Name}, and everything that's after by will be treated as an {Artist} meaning
that play and by are our limits.

keywords as well as limits are CaseSensitive so be sure to type them right.

Note that putting 2 keywords together will cause that only 1 or none of them will be detected

limits are important - Me :3

Learn() error

Learn maps all models samples to their respective models using the NaiveBayes
algorithm based on those samples. Learn() also trains all registered models
so they're able to fit expressions in the future.

// must call after all models are registrated and before calling nl.P()err:= nl.Learn()
if err != nil {
panic(err)
}
// ...

Once the algorithm has finished learning, we're now ready to start Processing
those texts.

Note that you must call NL.Learn() after all models are registrated and before calling NL.P()

P(expr string) interface{}

P first asks the trained algorithm which model should be used, once we get
the right and already trained model, we just make it fit the expression.

Note that everything in the expression must be separated by a space or tab

When processing an expression, nlp searches for the limits inside that
expression and evaluates which sample fits better the expression, it doesn't
matter if the text has trash. In this example:

{Name} would be replaced with King,
{Artist} would be replaced with Lauren Aquilina,
trash would be ignored as well as the limitsplay and by,
and then a pointer to a filled struct with the type used to register the model (Song)
( Song.Name being {Name} and Song.Artist beign {Artist} )
will be returned.