Hi, All
You can also so all this “stuff” using simple Basic, or any language, the problem y clear:
time an space! (and, of course execution time..)
“give me enough time an dspace and anything might be possible”
Lets go serious..
The problem with simple pattern recognizers, is that NLP gramamr seems, but is not fully pattern-layed, its semmantically created, so the real understanding is a complicated stuff, probably non deterministic, and even context sensitive.
This is true for AIML, MongoScript, RiveScript and even with the last Loebner Prize winner, ChatScript, I am sorry for you all, persisting upon paterns.
Patterns are part of the human language, but they are infinitely (almost) deep, you might want to mimic “understandin” just by laying out parttern-recognition of macro-chuks like “parts-of-a-sentence” Subject, Veral-part, time-declaration, circumstantial syngagma. All this would be good, but.. NLP grammar-parsers are very complex, slow and they are exact and not robust: even a slight mistyoping, an extra comma or unrecognized word, the whole parse goes to hell! Also they consume a hell of resources, adn the parse-tree matching is even more complex!
I respect AIML defenders, they almost embedded their minds on AIML, and the “smart” way to solve almost any-question, but only patterned ones, never generic ones.
To say it easily, with AIML, templates, categories and smart nesting, you might “capture” almost any grammar structure, but, the power needed to process something contaninig a grammar for only noun-phrase is amazing!. Also you get rid of the power of controlling the parse, even you might need to write the same pattern every time under every level, or I did not understand well AIML.. may be!
I once tried to write a simple NP grammar in AIML and after a few days, I abandoned the project! Even AIML dont has access to POS so, if you need this, you must write a POS tagger and “disguise” the patterns to use them instead of words;... this might be useful, but what is the difference among using a dedicated automata to make a parse, instead of using a weird thing like AIML to do it in a far more complex and uncontrolled way?
Actually I wrote a platform which implements a new Dialog Description Language which resembles AIML, just like a simple pattern matcher, but, having some more power (I guess) because the system has a Dialog Manager (DM), and this DM controlles the flow of the patterns and the whole conversation, Having a lot of “flags” each of them controlling subtle aspects of dialoges, like “dont repeat this”, “only say this once every 5 volleys”, “insist ith this until a correct answer has been validated”, “dont remember this step”, etc.
This platform it is capable of remembering and letting the conversation flow easily, een run topic “subroutines” like handling meta-orders such as “please tell me what I have just said” “stop ennumerating”, “lets change subject”, etc.
Also I incorporated some Simple-Parsing in the form of “chunking” allowing patterns to be layed out, using operators, like Sintagms of Time, ot Nominal-Parts, Verbal-Parts, etc. this “recognition” is complete and the “chunk” gets analized, obtainig the nucleus, some ontologig information, allowing to process it even in some external code (C#, VB, C++, J#, F#, etc.)
All this allows to write a full complex math calculator in one-single line of code, obtainig the calculation result as the “captured” object, even if the result is numeric or an expression. ¿Can you do this in AIML? - I guess no! (not without a lot of code) but you cannot solve precedence of 2 operations like Addition “+” and Product “*” (I dont know how to)
So keep an eye on my work, I will be soon publisinh some results, my system is designed as multi-language, but actually as the parsers and dictionaries are language dependent, its done for Spanish, and little English.. sorry!
best!