ASERYLA: development change log ******************** version 2.0 03/04/22 ************************************************************************ - Updated the Stanford Core NLP version to the 4.X This implies a complete refactor of the language processing. At this point the language processing analysis of the sentences is not extracted from the constituent tree. It has been replaced by the dependency parsing provided by the results of analyzing the sentences - All the source code has been updgrade to modern C++ - The internal code has been refactored to simplify their syntax - The server interface and the GUI has been simplified to focus only in the important functionality. ---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------- ******************** version 1.11 17/03/18 ************************************************************************ ADDED: - Added an extra checking over the interactions searchs, for validate the object has the correspondent affected relation with positive tendency E.g: "an ox can jump the ocean". "ocean can't be jumped". can ox jump ocean? Yes --> but it sould be No [http://aseryla.16mb.com/MD_memory.html#iacq] This change also affectes the memory arrange: http://aseryla.16mb.com/APP_starting.html#memclean] and the interaction question groups: [http://aseryla.16mb.com/MD_language.html#graph_ia] - Appended the personal gramar relations. From now the words: anybody, anyone, somebody and someone are assigned with the concept "person" FIXED: - The application crashes when is processed a passive sentence that also has "the capable of" form E.g: The mouse protein has been shown to be capable of binding to heparin - In passive sentences with multiple verbs the "affected actions" was interpreted also as "skill actions with interactions to the self subject" E.g.: The man has been shown to claiming to debt --> ... "man can claim man" --> the subject and the interaction is the same - When multiple names appears into the same sentence, the system was processing them as only one large name E.g: Mike sang the love song by John Turner --> "PN/3/Mike/John/Turner" (mike_john_turner isa person) instead of "PN/3/Mike" + "N/3/John/Turner" - The lemma identification process failed over some irregular plular words (mice --> mouse, alumni --> alumnus, ...) - The system crashes when an specialization contain a non semantic word E.g.: Engine(noun) Oil(noun) Fully(adverb) Synthetic(noun) when the concept is lemmatized the adverbs can't be find into the dictionary ******************** version 1.10 01/10/17 ************************************************************************ ADDED: - Database mechanism to save the failed processed sentences from [Tf] orders - For simplicity and performance reasons in the Internal Language Code for skills only allows ONE interaction [http://aseryla.16mb.com/Internal_Language.html#code] - Optimized the order Tc (load ilc file); the spent time has been reduced about 30% From now, the file only can contain ILC, no empty lines, no remarks (== ...), all the WORD orders must been at the beggining [http://aseryla.16mb.com/Interface.html#tilcfile] - The order Tf (process text file) has suffered a considerable code revision. The Stanford core NLP has been redesigned for saving up to 80% the time spent in analysing sentences In the database; the mechanism of storing the processed sentences has been disabled for this order. Processing a file of 1.7Mb with 18,700 sentences spends 533 secs (8 minutes), the previous version spends 966 secs (16 minutes) Results obtained using an Ubuntu 14.0.4 64 bits with 8GB RAM and processor Intel i5 [http://aseryla.16mb.com/Interface.html#tfile] - Code refactoring and redesign has been applied in the Frame Search achieving a considerable reduction in the node exploration (and therefore in the processing time) [http://aseryla.16mb.com/MD_memory.html#ds] - When the memory has a huge number of concepts and relations, loading a ilc file spent too many time. So the memory saving file has been redesigned to store the memory content in a more efficient way for a posterior loading. Given a file with 11.154.369 ilcs (406 MB) The previous version (memory in ILC format) spends 248 secs (4.8 minutes) for loading it. This version loads the memory in 32 secs (reduced up to 90%), and the memory.txt is reduced in 30% size Results obtained using an Ubuntu 14.0.4 64 bits with 8GB RAM and processor Intel i5 From this version the memory file extension is changed to ".ase" for avoid collisions with older versions (memory.txt) [http://aseryla.16mb.com/APP_starting.html#bkp] [http://aseryla.16mb.com/Memory_files.html] - The last modification it entails to change the meaning of the memory save order [@v]; and a new order for saving the memory in internal language format is needed [@i] [http://aseryla.16mb.com/Interface.html#osave] [http://aseryla.16mb.com/Interface.html#osaveilcs] - Modified the question commands that returns list of elements (?s, ?i, ?g, ?f) for limiting the search and the maximum number of returned elements [http://aseryla.16mb.com/Interface.html#qsetelems] [http://aseryla.16mb.com/Interface.html#qinterselems] [http://aseryla.16mb.com/Interface.html#qguesselems] [http://aseryla.16mb.com/Interface.html#qfreeelems] - For large tasks (such as processing files) added mechanisms to indicate the progress of executing and even for cancelling them [http://aseryla.16mb.com/Interface.html#progress] - Created 2 new functions for access to the sentences (that are stored into the DB) that may failed during the language processing (if the NLP server is not running, the sentence is not considered as failed) [http://aseryla.16mb.com/Interface.html#odbgetfailed] [http://aseryla.16mb.com/Interface.html#odbcleanfailed] - Modified the command [@t] for adding or delete the word type of any concept [http://aseryla.16mb.com/Interface.html#ochecktype] FIXED: - When the memory is saved in ILC format saving the memory. The tendency of the skill relations that has interactions was incorrectly saved. person can write document 2 1 person can write newspaper 1 1 --> (person can write) tendency = 3 file saved as --> person can write document 1 person can write newspaper 1 person can write / 2 --> (person can write) tendency = 4 [http://aseryla.16mb.com/Interface.html#osaveilcs] - the obtaining the path of the search process, it could be stucked into a infinite loop [http://aseryla.16mb.com/Interface.html#qRetrievePath] - Set Deep Searches doesn't check if the path is broken a ISA b ISA c ISA d (but d ISA b / -1) [http://aseryla.16mb.com/MD_memory.html#ds] - Memory Arrange didn't remove the attribute concepts when the relation does not exist anymore E.g: cat have paw / 0 1 --> The relation is removed cat%paw is large / 1 1 --> all the characteristics of cat%paw must be removed and the concept itself not saved into the memory [http://aseryla.16mb.com/APP_starting.html#memclean] - Ty command didn't check the source of the interactions (e.g: cat can jump stone&2 --> error). Neither it creates correctly the interaction concept if it was an specialization (e.g.: cat can jump stone_wall --> created stone & wall but not "stone wall") [http://aseryla.16mb.com/Interface.html#tAddKnow] - Ti command didn't check if the source has a valid integer value, neither the word type of the provided interaction (that must be a noun) [http://aseryla.16mb.com/Interface.html#tilc] - For avoiding system hungs, limited the numbers and ranges of the Attributes up to 1 million [http://aseryla.16mb.com/Internal_Language.html#code] - Processing some sentences that contains specializations with standalone letters could produce some bad lemma assignations E.g: "King George V --> king_george_person" or "photographers W D Downey --> photographer_null-position_null-position_downey" ******************** version 1.9 28/04/17 ************************************************************************ ADDED: - In a ILC with interactions, if the tendency is not reported a tendency 1 is assumed person can write document/book ==> person can write document*1 person can write book*1 [http://aseryla.16mb.com/Internal_Language.html#code] - Added a new command [Ta] that analyzes a sentence and returns the results WITHOUT saving into the memory the extracted relations [http://aseryla.16mb.com/Interface.html#tanalyze] Used in the "verify" tab of the GUI interface [http://aseryla.16mb.com/GUIinterface.html#verify] - Modified the parameter "type" of the order @t, now it expect the logical POS reference [J/N/V] instead of a number for referencing the Nouns, Adjective or Verbs [http://aseryla.16mb.com/Interface.html#ochecktype] - Added a new command [?p] that return the path of visited elements to solve a question e.g.: : can cat jump stone? --> "cat isa pet isa mammal have leg have fierce_claw can jump stone" [http://aseryla.16mb.com/Interface.html#qRetrievePath] - Improved the interaction searches to deal with multiple matches mouse can eat cheese mouse isa mammal mammal can eat chesse*-1/bread*-1 mouse isa animal animal can eat bread/fruit During the search when the skill is found, take the decision over the interactions of that relation. Stopping the search, even if the interaction does not exists in that relation. The expected behavior is: can mouse eat onion? No (not found) can mouse eat cheese? Yes can mouse eat bread? No (found first in mammal than in animal) can mouse eat fruit? Yes - It has been appended the source to the interactions (as optional & declaration) E.g.: person can write document*1&2/report&3 4 5 - 1 is the tendency and 2 the source of the "document" interaction - 3 the source of the "report" interaction - 4 is the tendency and 5 the source of "person can write" relation [http://aseryla.16mb.com/Internal_Language.html#code] - Created new order [Tw] for calculate the Word Sense Ambiguation of a concept, based in the relation keys and characteristics [http://aseryla.16mb.com/Interface.html#tWSD] - Added a "weight" formula to each frame, as useful measure of how important is a frame inside the total memory This measure is needed to calculate the "Word Sense Ambiguation" of a concept (Tw order) [http://aseryla.16mb.com/MD_memory.html#weight] [http://aseryla.16mb.com/Interface.html#tWSD] - Created new order [Ty] for append ILC relations, and left the system to append all the needed elements for the relation can be inserted into the memory. E.g: "Ty cat%leg is nice / 2 3" it process: WORD N cat cat WORD N leg leg WORD J nice nice cat HAVE leg / 2 3 cat%leg HAVE leg / 2 3 [http://aseryla.16mb.com/Interface.html#tAddKnow] - Deal with multiple Relative clauses (that, which, what ....) in the same subject part Eg: the phone, that is a device, and the printer, what is a unit, has power phone ISA device printer ISA unit * phone ISA unit <-- currently, by design, the parser has the limitation that a WH clause affects all the identified subjects + phone HAVE power + printer HAVE power [http://aseryla.16mb.com/MD_considerations.html#relative] - Created new order [?o] to obtain the edges for drawing a graph with the ontology (parent relations) of a concept [http://aseryla.16mb.com/Interface.html#qGetOntology] - The order show language stats [@a] has been expanded with the number of relations with more than one source, the number of frames which weigth is zero and the number of frames which weigth is one [http://aseryla.16mb.com/Interface.html#olangstats] - The order show lexicon [@e] has been expanded with the number of different sources the relation has [http://aseryla.16mb.com/Interface.html#oshowlex] - Created a new order [@p] to obtain the 10 lexicon references that correspond with the concepts that have the higher frame weight. FIXED: - The tendency of the interactions when processing ILC was not correctly processed person can write document*a <-- "a" is not a valid number - Some error descriptions when questions are asked via free format direct search [?f] were incomplete. E.g.: ?f 0 0 0 0 0 0 0 0 0 0 0 aa --> (nothing is returned) instead of "incomplete question" ?f 0 0 0 0 0 0 0 0 0 0 0 aa bb cc --> it's not a valid key ... instead of "aa" it's not a valid key ... [http://aseryla.16mb.com/Interface.html#qfreeelems] - The response of some commands related with interactions still returns the old format (interaction&advervs) E.g.: ?t 4 31 32 33*1& Yes [http://aseryla.16mb.com/Interface.html#qaffinterselems] - For the commands [@e] show concept and [@l] lexicon list; the references passed as argument it has been converting from String to int(signed 2 bytes) instead of unsigned long (unsigned 4 bytes); this limits considerably the range of concepts that could be asked. [http://aseryla.16mb.com/Interface.html#oshowlex] [http://aseryla.16mb.com/Interface.html#olexicon] - It has not been checking if lexicon references are valid for almost all the commands that it manages; They must be greater than zero and lower than the maximum number of learned concepts, in other word the lexicon size. @e [http://aseryla.16mb.com/Interface.html#oshowlex] @t [http://aseryla.16mb.com/Interface.html#ochecktype] ?c [http://aseryla.16mb.com/Interface.html#qconfirmation] ?a [http://aseryla.16mb.com/Interface.html#qaffelems] ?s [http://aseryla.16mb.com/Interface.html#qsetelems] ?n [http://aseryla.16mb.com/Interface.html#qnumelems] ?g [http://aseryla.16mb.com/Interface.html#qguesselems] ?i [http://aseryla.16mb.com/Interface.html#qinterselems] ?t [http://aseryla.16mb.com/Interface.html#qaffinterselems] - The analyzer do not create the relations of "Relative Clauses" when the verb is "have" in the subsentence. E.g.: "the cat, that has four paws, is a pet" = "the cat is a pet" --> cat IS pet = "cat has four paws" --> cat HAVE paw 4 (this must also creted) It works perfectly if the original sentence is "cat has four paws" and with other verbs in the relative clause subsentence such as "the cat, what is a good pet, is nice" or "the dog, that can run, has fur" - On "have" sentences with characteristics in the object part the "objects" was not reported by the grammar analyzer E.g.: - Ta the device does not have piece ... device/have/piece (OK) ... but - Ta the device does not have good pieces ... device/have/ (fail) ... [http://aseryla.16mb.com/Interface.html#tanalyze] [http://aseryla.16mb.com/Interface.html#tfree] - The the grammar analyzer didn't identify correctly the subjects and objects when are attributes car trucks of iron are not cars of wood --> iron%car_truck/are(neg)/wood%car --> (ROOT (S (NP (NP (NN car//SUBJECT//) (NNS trucks//SUBJECT//)) (PP (IN of) (NP (NN iron//SUBJECT//)))) (VP (VBP are//VERBLINK//neg/) (RB not) (NP (NP (NNS cars//OBJECT//)) (PP (IN of) (NP (NN wood//OBJECT//))))))) [http://aseryla.16mb.com/Interface.html#odbsentence] - When a sentence with a multiple verb and objects are processed, the interaction relations only is created for the last verb E.g: "fox ran and jumped the stone" fox can run / fox can jump stone / stone canbe jump it should be: fox can run stone / fox can jump stone / stone canbe jump / stone canbe run - Avoided the creation of concepts with only 1 letter E.g: "Malcom X was an activist" WORD N Malcom malcom WORD N X x <--- WORD N Malcom_X malcom_x - When an asertion is also negated, the relation gets a tendency == 0, if you save the memory (without applying the memory clean up), an inconsistent memory file is stored. E.g: - cat is nice - cat is not nice --> [memory file] cat is nice / 0 1 when the system loads the file --> Error processing (cat is nice / 0 1) on line (44) from (relations) error: The tendency (0) must be a valid number [http://aseryla.16mb.com/Interface.html#osave] - The sets direct search order [?s] for security reasons has been limited up to 20, the number of returned concepts. [http://aseryla.16mb.com/Interface.html#qsetelems] ******************** version 1.8 02/11/16 ************************************************************************ ADDED: - a new maximum limit, a guess question can return up to 500 concepts [http://aseryla.16mb.com/Interface.html#qaffelems] [http://aseryla.16mb.com/Interface.html#qguesselems] - It has been established that the system answer automatically when the subject and object are the the same concept It will be "Yes" when the code is a parent or feature question (be berb) E.g.: is a person a person? and "No" for the other questions type, such as "does hair has hair?" or "can jump be jumped?" On the other hand, any processed ILC which concept and object are the same, although the commands Tc/Ti do not raise any error, won't be stored into their correspondent frame. [http://aseryla.16mb.com/MD_considerations.html#selfidentity] - Improved the filtering of "empty" sentences when a text is process, now also filter self identity relations (person IS person) and specs relations (black_jump_mail ISA mail / black_jump_mail CAN jump / black_jump_mail IS black) check the "saveAll" parameter of the Tb comand [http://aseryla.16mb.com/Interface.html#tbunch] - Modified the show concept order [@e] to append if the relation it was manually for the user, basically this information is used by the GUI interface to highlith the data in the explore tab [http://aseryla.16mb.com/Interface.html#oshowlex] [http://aseryla.16mb.com/GUIinterface.html#explore] - When an internal language code is processed with errors, the detailed description is returned [http://aseryla.16mb.com/Interface.html#tilc] - Improved the memory purge, adding mechanisms to remove those concepts that only has NER or specialization relations E.g.: paris ISA location london ISA location londos IS huge united states ISA location united states ISA states Paris and United States are filtered, London remains because it has other relations It also remove those adjectives and verbs that don't have mentions (and obviously also nouns with no relations) [http://aseryla.16mb.com/APP_starting.html#memclean] Important Note: from this version the system does not apply any memory content filtering unless is explicitely asked via @v 1 [http://aseryla.16mb.com/Interface.html#oautosave] FIXED: - When an exception was raised during the process of a command, the main loop didn't report the error to the socket client and get stuck in an infinite loop blocking the communication (dead lock) - During the memory file load, the number of lines correctly loaded it was inconsistent when the file has a large number of lines. It was because the type for store the number of relations was type USHORT (then a maximum of 32767) - When the memory content is saved (without applying the clean and tidy up process) it may store relations with neutral tendency, so those relations failed when the memory file is loaded. E.g.: "animations are a mixture of additive and not additive behavior" + behavior is additive / 1 1 + behavior is additive / -1 1 + behavior have mixture / 1 1 + animation isa behavior%mixture / 1 1 --> behavior is additive / 0 1 <== this is an invalid ILC --> behavior have mixture / 1 1 --> animation isa behavior%mixture / 1 1 - The lexical process didn't split correctly the sentences when there is consecutive punctuation. E.g.: "the cat,.the dog" - the process confirmation produced a critical exception when the relation it was an ISAIS E.g. nice Noun/Adjective --> cat is nice? unknown [true] --> fail - 16 minor adjustments has been applied in the GUI interface - resolved a problem when the grammar is processing incomplete "capable of" sentences. (e.g. "Mike is capable of in") - added controls to the [?t] order (affirmative frame interactions direct search) for checking the indicated lexicon references are valid noun-verb-noun, avoiding this troubles in a possible question confirmation future action. [http://aseryla.16mb.com/Interface.html#qaffinterselems] - When the user made only confirmations the system didn't save those changes. [http://aseryla.16mb.com/Interface.html#qconfirmation] Neither when it found errors during the load of the memory. This leads to detect the same errors again when the system re-starts. [http://aseryla.16mb.com/APP_starting.html#bkp] - Some nouns was been classified as determiners by the cst_lemmatizer, produccing a critical scenario (e.g.: Somersen --> some) - Enhanced the Lexical phase to avoid processing consecutive punctiation (e.g.: "the cat, JJJDF, and the dog are nice" --> the cat,, and the dog are nice") and invalid words (e.g.: "the anti-[TAG1], or anti-[TAG2], ..." --> the anti-, or anti-, .) - Fixed a trouble when numbers are identified as noun in the sentence 111 222 333 was nice --> (S (NP (NN 111 222 333)) (VP (VBD was) (ADJP (JJ nice)))) - Solved an issue port closing and maximum accepting of socket connections in linux. - The Tl, Ti and ?c commands has not been processing the sources correctly. - Tc command (load a ILC file) fails on loading files with whitespaces into the name or route. - @a command produces number overflow on calculating the number of words and concepts the memory contains. [http://aseryla.16mb.com/Interface.html#olangstats] - The tendency of the attributes was duplicated when the content of the memory is saved into the memory file - Fixed a trouble with recursive "have" sentences that could hang the language analisys E.g.: Executive Office of the President have good Presidents --> executive_office%president have president executive_office%president%president is good ******************** version 1.7 29/05/16 ************************************************************************ ADDED: - order [@a] has been modified to append more details, such as the interactions, concepts, word types, ... Before: "There are XXXX words and YYY relations extracted from ZZZ analysed sentences."; Now: returns a slash separated list with the total number of existent relations words/concepts/nouns/verbs/adjectives/adverbs/ (positive)parents/(positive)features/(positive)attributes/(positive)skills/(positive)affecteds/ (negative)parents/(negative)features/(negative)attributes/(negative)skills/(negative)affecteds/ (positive)interactions/(negative)interactions/attributes with number indicated/with adverbs references/processed sentences [http://aseryla.16mb.com/Interface.html#oLangStats] Also adapted the GUI interface [http://aseryla.16mb.com/GUIinterface.html#explore] - Adapted the object guessing graph to include the interactions --> 'what/which' (is not checked!!!) --> { concept(noun) } * --> key (verb 'be', 'can', 'have' or 'do') (if not declared assumes the same type as the prior condition} --> {not} --> {'be' if key is 'can' (key = canbe)} --> {number only if key is "have"} --> {determiner} object (noun, adjective or verb depending on the key type) --> {receiver} (noun or verb when iac questions) --> [and|or] * --> (loop --> jump to * --> until no more conditions) Also adapted the GUI object guessing tab: [http://aseryla.16mb.com/GUIinterface.html#guess] [http://aseryla.16mb.com/Interface.html#qguesselems] - Added the option of manage internal language codes from the GUI: [http://aseryla.16mb.com/GUIinterface.html#ilc] - Capacity and Consistency test to check the grammar parser is capable for deal with a considerable range of diferent sentence types (currently there are 41372 sentences that are processed in about 3 minutes) - The extraction and analisys of phrases with 2 independent sentences E.g.: "the lemmon is acid although the grenade is nasty" is processed as "the lemmon is acid" AND "the grenade is nasty" - The multiple verb relations correct processing: E.g.: "a cat is an animal that can hunt mice and eat a very good cheese" It's processed as "a cat is an animal", "a cat (not animal) can hunt mice" and "cat eat a very good cheese" - Extented the grammar parse to extract more acurated relations in the "rest of the processed sentence" E.g.: "She moved out from her parents because she wanted to life on her own" after identify the subject / verb /object part (She moved out from her parents) The rest of the sentence (because she wanted to life on her own) ... Before: it was processed only looking for NP with adjective-noun relations (e.g.: ... before the red[adjective] lines[noun] ... --> line IS red) Now: It also process as independent those nodes identified as sentence (... she wanted to life ... --> person CAN want life*1&) - Append "with" clauses management in the object part before: an spider with 8 large legs and black hair is a bug Now, it also accepts as: an spider is a bug with 8 large legs and black hair - Remove the numbers could take part of an specialization E.g.: "11 Street is good place" --> 11_street isa place + 11_street is good - Added a new command [Tb] That process an entire text without using a file [http://aseryla.16mb.com/Interface.html#tbunch] - Published a new version of the Aseryla version of Stanford NLP core that reduce the size (up to 90% !!) of the output results xml (by removing any "useless" tag). Also It can return the analysis of more than one sentence, reducing the socket communication that it reduces the total time of processing a large text. [http://aseryla.16mb.com/APP_starting.html#nlpkit] This specially affects the loading of batch text files [http://aseryla.16mb.com/Interface.html#tfile] [http://aseryla.16mb.com/Interface.html#tbunch] - Re-designed the database to remove some redundant data (such as the ILWS) and some obsolete information (e.g. propers table or the XML field in the sentences table) As well as adding a place to set the current processed sentence, allowing this remove the redundant output files that the server produces when a sentence is processed (./data/current_sentences.txt) and the "./data/internal_language.txt". Furthermore, the sentence database cache has been disabled, as the stored data increase a lot, meanwhile the processing time is not improved. [http://aseryla.16mb.com/ APP_starting.html#bkp] and also check the model in the "./database/schema.sql" - Disabled the .backup copy of each data file of the system, due to is not helping to recover data in case of system failure, but wasting storage size. This responsability is left to the user criteria. - Removed the order [Tx] that gets the ilcs from a sentence (in the same way as [Ts] does) but without using the dictionary, only the words identified during the analysis [http://aseryla.16mb.com/Interface.html#textract] - To avoid overflow the Stanford Core NLP, the sentences will be limited up to 30 words by sentences. [http://aseryla.16mb.com/MD_language.html#proc] This is a safety measure to avoid user input errors, for example, processing a text file with no dots as a dot sentence separator instead of line separator [http://aseryla.16mb.com/GUIinterface.html#feed] - Remove as server parameter the "MaxILC2save" mechanism (the safety measure to dump the memory content into the memory file) Now this parameter is automatically managed by the server, the 100 processed senteces remains as default. - Due to the load time is worst, the data is duplicated and also for simplicity, the memory file content has been replaced from the old format [http://aseryla.16mb.com/Memory_files.html] to internal language code. Now the server it self auto-load the minimal required words (key words required to parse the questions, NERs, ...) and loads the rest of knowledge from the same file "./data/memory.txt" but in ILC format. - Improved the lemmatise task on sentence processing, to avoid the same word provides different lemma depending of the type of word Stanford Core NLP didn't manage in the way the system needs, therefore the lemmatization of the words are take over by the CSTlemma (University of Copenhagen) E.g.: sci-fi(N) --> sci-fus sci-fi(J) --> sci-fi properly(J) --> properly propers(N) --> proper infrared(N) --> infrare infrared(J) --> infrared jumping(V) --> jump jumping(N) --> jumping - Added parameters to the command [@v] for giving the option of force save with or without tiding up the memory [http://aseryla.16mb.com/Interface.html#osave] FIXED: - Do not process Noun Phrases with only adjectives, for example in sentence with multiple objects and mixed types e.g.: "that coin is fake or a counterfeit" ... is) (NP (NP (JJ fake)) --> coin IS fake <-- this was not include !! (CC or) (NP (DT a) (NN counterfeit))))))) --> coin ISA counterfeit - The order Tc (load a ILC file) has been modified to stop when detects the first fail, and report the the error and position, or for continue the process saving the errors into a file [http://aseryla.16mb.com/Interface.html#tilcfile] - The order Ts (extractiing the ilc of a sentence) didn't manage correctly the identified words. [http://aseryla.16mb.com/Interface.html#textract] - Attribute numbers was not caugth when where inside of a "with" clause e.g.: "a spider with 8 legs is nice"; spider HAVE leg / --> spider HAVE leg 8 - Under certain scenarios when a numbered attribute question was formulated an Unknown may is responded. Only Yes/No responses are defined for this kind of questions, even if the filters are active. - The server fails when you ask for a lexicon data [@l] higher than the existent number of stored words. e.g.: @l 2000 when in the lexicon memory there are only 1589 concepts Also the number of maximum words send limition has been raised from 500 to 1000 to reduce the number of comunications, improving a little bit the times of loading a large dictionary. In fact the order has been modified to provide the content via file, to avoid call this command repeatdly times when the lexicon is large, then achieving loading the lexicon at once reducing the time of processing from minutes to seconds. [http://aseryla.16mb.com/Interface.html#olexicon] - Phrases with adverbial references failed when the token is not identified as "RB" E.g.: You can learn more about how to delete or control cookies how --> WRB (Wh adverb) more --> RBR (comparative adverb) so it wasn't save in the lexicon but advmod ( learn-3 , more-4 ) advmod ( delete-8 , how-6 ) so, in the relations can create mentions in the extra person can learn more 1 1 person can delete how 1 1 then, if you load these ilc, their correspondent extra has no lexicon reference and then fails This scenario also has been solved for the conjunctions (CC) and for multiple adverbial references - Solved error when processing incomplete "WT prepositions" E.g.: "Many challenges in involve NP = (JJ Many) (NNS challenges) (PP (IN in)) VP = (VBP involve) - Interface: the language stats extension didn't show the list of elements correctly [http://aseryla.16mb.com/GUIinterface.html#explore] - Parser analisys failed when there are "duplicates" in the "of clause" sentences E.g.: "You modified a copy or copies of that document" objects --> document%copy and document%copy(lemma of copies) therefore to extract numbers or identify the rest of the sentence not analyzed, it got confused where the elements are into the constituent tree - Do not create any attribute relation if the subject of the "with clause" is not noun E.g.: As life(N) were I(N) have full(J) with horrors(N) full have horror <-- error full is not a noun, so it hasn't have frame, so no slot where to save this relation person have full%horror - Avoided that numbers identified as nouns makes relations E.g.: "Saved in parser cache with key 0(CD) en 4(CD) and timestamp(JJ) -473956352(NN) and revision id 94322816(CD)" --> WORD N -473956352 -473956352 + -473956352 IS timestamp / - The contractions "wasn't" and "weren't" are not converted to "was not" and "were not" just before of send to the NLP server, then it was discarded, so not identified as a negative relation E.g.: "She can't run" --> "She run" --> "person CAN run" ==> instead of "person CAN run -1" - The server didn't save correctly the memory content in ILC format The memory_clean.txt (minimum language required) has been modified to convert the "it, some, any" from null lexicon to adverb treatment - In interaction question, it didn't filtered those results that are attributes with the indicated relation but has any negative skill relation up to its main concept e.g.: cat have paw cat can fly -1 cat%paw have nail cat%paw can scratch -1 cat%paw%nail can scratch animal cat%paw%nail can fly mountain what can fly mountain? --> cat%paw%nail --> "cat" ==> but as "cat can fly -1" --> "None" what can scratch animal? --> cat%paw%nail --> "cat" ==> but as "cat%paw can scratch -1" --> "None" - The system was preventing to remove AFFECTED relations E.g.: into the memory: "cat canbe hit 1" user asks: "can cat be hit? Yes" --> "True? --> false the system ignores the "cat canbe hit -1" so the user asks again the same question, and it continues receiving the same response The model do not allow negative relations on the affected action list, but now, when a negative manually confirmation is performed, the relation moves to tendency = 0, that is the same as not having that relation ( the answer will be "Unknown", but never "No") ******************** version 1.6 28/11/15 ************************************************************************ ADDED: - New order [Tx] gets the ilcs from a sentence (in the same way as [Ts] does) but without using the dictionary, only the words identified during the analysis [http://aseryla.16mb.com/Interface.html#tilcsno] - Added attribute number ranges management "Jurisdictions have between two to four judges" --> jurisdiction HAVE judge 2-4 "series have 10, 11 or 12 episodes" --> serie HAVE episode 10-12 "parliament have about 30-31 members" --> "parliament HAVE members 30,312 - Removed the limitation of maximum value for written numbers for the attributes. Until now it was up to 1 million, now is unlimited, but remind the maximum value for a ULONG is 3400 million before overflow - Added management for mixed numbers (E.g.: I have 3 hundred friends) - Deal with "of clause" branches into the object part E.g.: "passwords have elements of 4 to 20 integers numbers and capital letters or symbols" password HAVE element password%element HAVE integer_number 4-20 password%element HAVE letter password%element HAVE symbol password%element%letter IS capital - Added numbered preposition clauses management over the object part E.g.: "passwords have elements from 4 to 20 integers or twelve symbols" before: password HAVE element now: password HAVE element password%element HAVE integer 4-20 password%element HAVE symbol 12 - Added minimum tendency filter to the searches Now "is cat a mammal?" only will be "Yes" if there is a parent relation between the concepts with positive tendency and higher than a user indicated threshold [http://aseryla.16mb.com/Orders.html#modetendfilter] and source filter to the searches, by confirmation and/or multiple origins Now "is cat a mammal?" only will be "Yes" if there is a parent relation between the concepts with positive tendency and 1 - in case filter confirmation is active, only if the source has been user confirmed (through confirmation mechanism) [http://aseryla.16mb.com/Orders.html#modeconffilter] 2 - in case filter multiple is active, only if the source has been mentioned for more than one origin [http://aseryla.16mb.com/Orders.html#modemultfilter] Adapted each question command from the interface free question formatted (?q) [http://aseryla.16mb.com/Interface.html#qfreeformat] free format direct search (?f) [http://aseryla.16mb.com/Interface.html#qfreeelem] frame direct search (?a) [http://aseryla.16mb.com/Interface.html#qaffelems] sets direct search (?s) [http://aseryla.16mb.com/Interface.html#qsetelems] numbered attribute direct search (?n) [http://aseryla.16mb.com/Interface.html#qnumelems] object guessing direct search (?g) [http://aseryla.16mb.com/Interface.html#qguesselems] - Passive sentence management "a cheese has been eaten by a mouse" --> subjects and objects must be swapped ==> "cheese can be eat" not "cheese can eat" other examples: "A beautiful dinner is going to be made by Sally tonight" --> sally can made [dinner] / sally isa person / dinner is beautiful "that bike was not sold" --> bike can sold -1 - Processing of the Reported Speech sentences A sentence is ONLY detected as reported speech if: 1. all the subjects has "person" NER (pronouns or propers) 2. there is only one verb, in past form, and their lemma is "say", "tell", "ask", "know" or "think" grammar: [person] say/tell/asked/knew/though (that/if) [personal pronoun] + sentence e.g. John said Mike was quick She asked us where I lived. Anne and Paul told they won the prize In case the sentence is a reported speech then process it as 2 separated sentences Paul said He is fat --> "Paul said He" + "He is fat" - The model has been modified to capture the interactions between concepts [http://aseryla.16mb.com/MD_considerations.html#interactions] 1 - the "interactions" table from database and schema has been removed 2 - added interaction question graph ("what [do/does | can] {not} ..." + "can/do concept action receiver" questions) [http://aseryla.16mb.com/MD_language.html#graph_ia] [http://aseryla.16mb.com/MD_language.html#graph_aia] and the explanation of how the search is made over this kind of question answering. [http://aseryla.16mb.com/MD_memory.html#iacq] 3 - Adapted the following interface commands to manage the interactions: free question formatted (?q) [http://aseryla.16mb.com/Interface.html#qfreeformat] free format direct search (?f) [http://aseryla.16mb.com/Interface.html#qfreeelem] show lexicon data (?e) [http://aseryla.16mb.com/Interface.html#oshowlex] Also added the correspondent commands to manage this feature from the interface: interaction direct search (?i) [http://aseryla.16mb.com/Interface.html#qinterselems] affirmative interaction direct search (?t) [http://aseryla.16mb.com/Interface.html#qaffinterselems] 4- Added "IACdata" structure to the frame structure to allow store (as "extra") in memory the interactions of any skill [http://aseryla.16mb.com/MD_memory.html#fra] 5- Included interactions on show term (@s) command skill list: --> skill1(tendency1)[interaction1(tend1)/interaction2(tend2)/...]{adverb1-advberb2-...} skill2(tendency2){adverb2} skill3(tendency3)[interaction1(tend1)] the interaction list is embraced between [] and won't be shown if not have interactions the interaction list is embraced between [] and won't be shown if not have interactions CONCEPT [54] cat noun [48] FRAME 86 parents: mammal(2) animal(1) pet(0) features: nice(2){very} attributes: leg(1){4} skills: jump(1)[field(1)/forest(-2)] fly(1)[field(1)]{gently-very} SETS neg parents: guardian [http://aseryla.16mb.com/Interface.html#oshowterm] 6- Updated the internal language processing [http://aseryla.16mb.com/internal_lang.html] and memory files [http://aseryla.16mb.com/APP_starting.html#bkp] to deal with the interactions - Update each interface to include the interactions and filters: the command line interface: [http://aseryla.16mb.com/Orders.html], the web interface: [http://aseryla.16mb.com/WebInterface.html], and the graphic interface: [http://aseryla.16mb.com/GUIinterface.html] In the graphic interaface, besides adding the boxes to ask about interactions and the filtering, it has been included an spell checker FIXED: - Removed duplicates nouns when specialization concepts to avoid "the ant ants is black" --> ant_ant isa ant / ant_ant is black - [@l] it returns some empty values at the end of the list where you asked for 500 element blocks (remind: there is a limitation of 8Mb buffer socket communication, therefore up to 500 words will be send) - Removed comprehension symbols numbers for the NormalizedNER provided by the Stanford Core NLPnumbers symbol for the NormalizedNER provided by the Stanford Core NLP about 3 --> %3 / greater than 4 --> >=4 /is 10 percent --> %10 /80 billion --> $80 Only affects the lemma when is shown the processing results, didn't affected the memory content - [@d] getting the latest X processed sentences didn't work properly The database schema has been modified to add a table that stores this scenario with a maximum capacity of 20 sentences - [Tc] [Tl] [Td] failed process a file with whitespaces in the folder or file name - Removed the specialization parent relation when it's a proper noun football_team ISA team (OK) michael_jackson ISA jackson (NO) - Negative particles without auxiliary verb "he told us not to smoke" --> (S (NP (PRP He)) (VP (VBD told) (S (NP (PRP us)) (RB not) (VP (TO to) (VP (VB smoke))))) --> (S (NP (PRP us)) (RB not) (VP (TO to) (VP (VB smoke))))) --> (NP (PRP us)) --> (VP (TO to) (VP (VB smoke))))) ==> person can tell person + person can smoke (instead of "person can smoke -1") - Unified multiple adverbs reference dependencies cat%leg, cat%paw @show attrformat main what is black? --> cat, cat (duplicated!!!) [http://aseryla.16mb.com/Orders.html#showattrformat] ******************** version 1.5 15/04/15 ************************************************************************ ADDED: - GRAPHICAL USER INTERFACE [http://aseryla.16mb.com/GUIInterface.html] - New order [?g] that performs a direct memory search (no graph parsing) based in group question with multiple conditions or object guessing (for the Graphical User Interface usage) [http://aseryla.16mb.com/Interface.html#qguesselems] - New order [@e] returns the type of word, frame content and sets relations in lexicon references format of a concept. [http://aseryla.16mb.com/Interface.html#oshowlex] - New order [@t] that checks if a term is the indicated type of word [http://aseryla.16mb.com/Interface.html#ochecktype] - New order [@n] checks the NLP service status [http://aseryla.16mb.com/Interface.html#checknlpstatus] - New order [@h] manage a heart beat signal (for the interfaces could check if the service is running properly) [http://aseryla.16mb.com/Interface.html#oheartbeat] - New order [@d] for retrieve processed sentences from the database under certains search criteria [http://aseryla.16mb.com/Interface.html#oprocsentences] - New order [Tp] get a text and clean, prepare and split in sentences (they are not processed) [http://aseryla.16mb.com/Interface.html#tparsing] - New order [Td] clean and split in sentences the content of a file [http://aseryla.16mb.com/Interface.html#tpfiles] - New order [Ts] returns the ilcs from a sentence [http://aseryla.16mb.com/Interface.html#textract] - New order [@j] saves the ilws into an indicated file [http://aseryla.16mb.com/Interface.html#osavewords] - Service order-response verbose option [http://aseryla.16mb.com/APP_starting.html#run] - Added a new parameter in the Stanford Core NLP service to set the verbose mode Check the StartNLP.cmd/.sh and note the last parameter, after the port number 1 prints the received input sentences and the 0 (by default) it doesn't print anything, an sligthly quicker and usefull when is running as background process FIXED: - NLPparser::getStr() only return information about only one verb "I had been running and jumping over the wall and the forest" subjects: I verb link: jump ("run" is missing) objects: wall, forest - Service arguments didn't managed errors - the constituent tree that is stored in the database (field "syn" from table "sentences") that is used to "highligth" the subjects, verbs and objects identified didn't mark multiple concepts [NLPparser::getStr()] subject = red cat / link = run / object = grass (ROOT (S (NP (DT the) (NN red) (NN cat)) (VP (MD can) (VP (VB run//VERBLINL//) (PP (IN in) (NP (DT the) (NN grass//OBJECT//)))))))" becouse there is not a tuple with "red cat" content also failed when the subject and object are the same, such as: "a cat is a cat" --> "a cat//OBJECT// is//VERBLINK// a cat//OBJECT//" * Note: this method change every literal that match with the identified objects so, in the sentence "the cat run in the field and it's a nice run" the second "run" also will be affected - The text splitter into sentences [Language::lexical()] gots confused when a sentences ends with number and dot "this is the sentence 1. this the 2." --> "this is the sentence 1", "this the 2" (2 sentences, not one --> "this is the sentence 1 this the 2" ) - Float numbers in sentences was replaced by the floor instead of rounding it, during the sentence splitting phase [Language::lexical()] "value -1.092, value 2.58585" --> "value 2, value 3" instead of "value 1, value 3" - the comunication with nlp server it had a timeout to wait the response too short when a large sentences are processed if you send a sentence that spends more than 5 secs, the server close the communication and it hangs The solution is to set a higher timeout value or limit the length of sentence (both measures has been applied) - Filtered those sentences that only has 1 word (currently only was filtered if the size of the input it has less than 3 letters) - The model don't allow negative affected actions from sentence analysis [http://aseryla.16mb.com/MD_considerations.html#negations] but the interfaces can send direct orders throuhg the confirmation mechanism (?c orders) [http://aseryla.16mb.com/Interface.html.html#qconfirmation] e.g.: "can cat be hit? Yes" --> "True? --> false ==> "cat canbe hit -1" - The sentence like "noun have not noun" was interpreted as positive relations. It's due to the not is after the verb. Anyway sentences like "a robot haven't wings" are incorrect. - The identifier of the sentences (md5 hashing) it was store badly into the database tables ULONG (4 bytes) type for store in "sentences" table INT (2 bytes) type for "ilcs" and "ilws" tables (so the ID was truncated by the overflow and the ID relation between tables it was lost) - In sentences like "George The Bear is a good guy" The "The" word is interpreted as Noun inside the specialization "George The Bear", then the reserved word "The" it was inserted as noun Added a mechanism to avoid insert into the dictionary/lexicon any reserved words (determiners: a, an, the, any, some, A, The,....) So "George The Bear is a good guy" --> george bear ISA guy (specialization filtered) --> george bear ISA person (NER filtered) - Due to the Buffer Sokect 8mb size limitation, the lexicon order [@l] will be limited up to 500 words. So the interfaces has to ask the @l order until receive the "-" (no more words) [http://aseryla.16mb.com/Interface.html#olexicon] It also affects the [Tp] order. [http://aseryla.16mb.com/Interface.html#tparsing] - When the server is starting could fail due to "memory corruption" (the memory file is not accesible or invalid) or "socket not accesible" (e.g.: you're trying to start a server when is other already running) In this situation, if the user press the X of closing the windows, instead of pressing any key to exit, the System Failure Mechanism is launched and then tries to save the memory content, in this case it doesn't have any sense. - Multiple attribute number capture In sentences like "A module has 2, 4 or 8 extensions" only capture the "4" as numbered attribute, this occurs because the only capture 1 governor Now the tree is parsed, and is capable for capture, all the numbers, even the multiple named ones E.g.: "A face has 1 nose, 2 eyes and two ears", "cubes have fourteen sides and 2 circles" If there is an "a/an" determiner, they are consider as "one". So, "I have a face" --> person have face 1 As the model is not prepared for large list of numbers, the ranges are ignored So, "the house has from 2 to 5 rooms" --> house have room 2/5 (not house have room 2/3/4/5) Imagine the case of "a car has between 100 to 40000 pieces" - Database model stored the tendency and the source at sentence level; this aproach has the problem of assiming that each ILC has the same tendency E.g.: "a nice cat don't have wings" --> cat is nice (POSITIVE tendency) / cat HAVE wing (NEGATIVE tendency) - Analysing sentences than has proper nouns that end with a determiner caused a critical exception that lead to fall the service E.g. George A loves Mary An --> george_determiner is a determiner ... Also avoided any association with a "non-semantic" word. Such as "Jessie B is a singer" --> jessie_b isa b ******************** version 1.4 04/12/14 ************************************************************************ ADDED: - sentence failed re-process mechanism also in @load batch files so you can combine @ orders with sentences processing e.g. setting the trust and source to some sentences or log some of them... @mode trust 1 cats are nice @mode trust 2 cats are mammal ... [http://aseryla.16mb.com/Orders.html#loadbatch] - disabling the autosave mechanism (maxilc2save set to 0 and saved when the process finishes) when ilcodes files are loaded [http://aseryla.16mb.com/Orders.html#loadilcodes] [http://aseryla.16mb.com/Interface.html] petition: "Tc" - added of clauses in the characteristic part of the affirmative question graph for asking about attribute relation, such as: "is a motor a part of a vehicle?" [http://aseryla.16mb.com/MD_language.html#graph_af] and also in the group questions [http://aseryla.16mb.com/MD_language.html#graph_gr] - The 4 memory files (dictionary.txt, lexicon.txt, frames.txt and sets.txt) has been unified into only one file (memory.txt), using a dot as a block separator. [http://aseryla.16mb.com/APP_starting.html#bkp] - New order [@a] that shows some stats about the processed sentences that have been stored into the memory. [http://aseryla.16mb.com/Interface.html#olangstats] - A web interface is created [http://aseryla.16mb.com/WebInterface.html] - The model has changed the way of the words with NER value are managed Now, the NER association is created as parent relation, not as lemma replacer E.g.: "Mark is tall" Old version WORD N Mark person person is tall New version WORD N Mark mark mark is person mark is tall [http://aseryla.16mb.com/MD_considerations.html#ner] - Self identity Do not create relations with BE verbs when the subject and the object is the same concept (E.g.: person ISA person) But automatically answer Yes in case asking about it (is person a person? Yes) - New order [@l] the returns the list of existent lemmas (with specs and attributes "natural" transformed) in the lexicon from an specific position (external word checks, proposals and synchronizing). [http://aseryla.16mb.com/Interface.html#olexicon] - New order [?a] that performs a direct memory search (no graph parsing) based in an affirmative question (for the Graphical User Interface usage) [http://aseryla.16mb.com/Interface.html#qaffelems] - New order [?s] that performs a direct memory search (no graph parsing) based in an group (with only one condition) question (for the Graphical User Interface usage) [http://aseryla.16mb.com/Interface.html#qsetelems] - New order [?n] that performs a direct memory search (no graph parsing) based in an numbered attribute question (for the Graphical User Interface usage) [http://aseryla.16mb.com/Interface.html#qnumelems] - New order [?f] free format question, but the response is the same that if you call direct search questions (?a, ?s, ?n) [http://aseryla.16mb.com/Interface.html#qfreeelems] FIXED: - Source management in the order @mode source The accepted values are 1 to 16, and it didn't allow to set the 16, there was also a confusion between the source number and the position of the SOURCES table reference [http://aseryla.16mb.com/Orders.html#modesource] - When the memory content is saved in Internal Language codes ( ./aseryla/data/ilc.txt) The extra of the "can" codes was left empty, then no consistent code. E.g. (tnd=1/scr=1) --> cat can run 1 1 [http://aseryla.16mb.com/Memory_files.html#ilc] - Numbers are stored in the memory E.g.: "11 Street is a good place" WORD N 11 11 1 <----- this implies to save a number as a noun, and create a frame, set... WORD N 11_Street 11_street 1 2 7 <----- but this has to be allowed 11_street ISA street / 1 1 11_street ISA place / 1 1 11_street IS good / 1 1 The question graphs allows the numbers if it exists in the dictionary E.g.: "Seven is a good film" --> WORD N Seven 7 so, [is 7 a film? Yes] / [what is a good? 7] - Extras has inconsistently assigned extras (numbered attributes or adverbs) only it can be assigned when numbers (CN) to attributes (HAVE) or adberbs (AD) if features, skills (IS, CAN) E.g: WORD J person person ... == 1977 John Watkinson designed Drifter ** PN/3/John_Watkinson ** SP/John_Watkinson ** CN/Watkinson/1977 ... person isa person 1977 1 64 <--- nor ISA nor CANBE relation can have extras person is person 1977 1 64 <--- numbers are only for HAVE relations == 12 episodes were also released on laserdisc ** VP/released/episodes/laserdisc ** CN/episodes/12 ** AD/released/also episode can release also 1 64 laserdisc canbe release also 1 64 <-- not adverbs on affected action relations - Intermediate Language code WITH has been renamed to WT only for the reason of symetry with the other codes [http://aseryla.16mb.com/Intemediate_Language.html] "Attribute associations" section - No more than one level of "OF CLAUSES" are managed "a fruit of tree of orange is tasty" tree have fruit tree%fruit is tasty Instead of orange have tree orange%tree have fruit orange%tree%fruit is tasty - No "OF CLAUSES" are managed in the objects "a motor is a piece of vehicle" vehicle have piece motor isa piece --> It should be "motor isa car%piece" - No multiple of clauses concepts has been correctly managed claw of tiger and claw of feline are large --> tiger have claw / lion have claw / tiger%claw is large / lion%claw is large or hands and feet of toddlers are little --> toddler have hand / toddler have foot / toddler%hand is little / toddler%foot is little - Allowing numbers in the names and lemmas "1816 Serfdom abolished in Estonia" WORD N 1816 1816 1 <--------- (but this is a problem) WORD N Serfdom serfdom 1 WORD V abolished abolish 1 WORD N Estonia location 1 WORD N 1816_Serfdom 1816_serfdom 1 1816_serfdom isa serfdom / 1 1 <-- now accepted numbers in the lemma and words 1816_serfdom can abolish / 1 1 * WORD N 1816 1816 !!! is storing numbers as Noun, and therefore creates a frame and a set and can produce relations using numbers "1102 was a Queen Consort of Hungary" 1102 isa queen_consort / 1 1 - Allowed standalone letters in the lemmas "the class a is good" class_a isa a <-- now is valid class_a is good - Avoid inserting into the dictionary NER words with type different than Noun it's OK WORD N Boston location WORD N 1 1 but not WORD J Boston location WORD J 1 1 - Change the database, the table sentence has been modified to avoid using text as primary key (too heavy and slow) Now the identifier is the number result of the hash function extracted from the sentence text, enhancing the performance up to 10 times. - Affirmative question graph didn't accept CAN BE questions E.g.: can a person be jumped? --> does not exist into the lexicon Also prepared for numbers and determiners WORD N An an is person an animal? --> does not exist into the lexicon WATCH OUT!!! to ask for "person an" = is person An an animal? ******************** version 1.3 25/10/14 ************************************************************************ ADDED: - "how many?" questions Now you can ask about the values of their attributes how many [attribute (noun(s))] [have/do] (a/an) [object (noun(s) {of ...})] (got){[have]}? e.g. how many legs does a cat have? how many natural hair has people got? how many claws have a leg of a tiger? (remind: by the inheritance attribute property, this question is the same as asking for "how many claw has a tiger?" Return: - None (if no relation) - Any (if positive relation, but no numbers known) - the list of numbers available The alternatives is ask for every number using the numbered affirmative questions [http://aseryla.16mb.com/MD_language.html#quest] e.g. does a cat have four legs? Yes have cats got 5 legs? No or check their frame content[http://aseryla.16mb.com/Orders.html#showterm] @show term cat%leg 1 - First search directly in the frame 2 - If not exists directly in the frame, then search in their attributes (all of them counts) 3 - Finally, in their parents cat ISA animal and feline cat HAVE leg and limb(1), arm cat%leg HAVE claw(3, 5) cat%leg HAVE limb(5) cat%limb HAVE claw(3) cat%arm HAVE claw cat%arm HAVE finger_nap cat%arm%finger_nap HAVE claw(8) cat%arm%finger_nap%nap HAVE claw(9) // never reach this value, always stops in the claw of the prior level cat%arm%finger_nap%nap HAVE arm(9) // same as above animal HAVE leg(2, 6) animal HAVE toe feline HAVE leg(2, 4) feline HAVE claw(2) feline ISA pet pet HAVE fur(100) 1 - cat HAVE leg (positive tendency) - how many leg has the cat? Any (directly in the frame, discard the number of legs of animal and feline) 2 - cat HAVE leg (tendency cero, or the relation does not exist) - how many leg has the cat? 2, 4, 6 (from and feline) [only if deep search is on] 3 - cat HAVE leg (negative tendency) - how many leg has the cat? None (it doesn't matter the properties of their parents) 4 - cat HAVE limb (positive tendency) - how many limbs has the cat? 1 5 - cat HAVE limb (neutral tendency, even with numbered values, it's like doesn't exist the relation) - how many limbs has the cat? None (the leg of cat relation was corrected above) 6 - cat HAVE leg (restore positive tendency) - how many limbs has the cat? 5 (from leg of cat) 7 - how many claw has the cat? 1, 3, 5, 9 (1 from arm of cat, 3 from limb of leg of cat and 5 from limb of cat (3 is not duplicated) and 9 from finger_nap of arm of cat (atrtribute of attribute using specialization), but not from feline) 8 - how many finger has the cat? Any (in this case, only one frame has the attrribute then no "1" is answered) 9 - how many toe has the cat? Any (same case as above but for the parents) [only if deep search is on] 10 - how many fur has the cat? 100 (from pet that is father of feline) [only if deep search is on] [http://aseryla.16mb.com/Orders.html#showterm] - Added the failure explanation in the questions graphs, instead of returning only "Misunderstand" E.g. ? ==> Misunderstand: empty question is? ==> Misunderstand: incomplete question is bla nice? ==> Misunderstand: does not exist in the dictionary is cat blo? ==> Misunderstand: does not exist in the dictionary is cat a bli blu? ==> Misunderstand: does not exist in the dictionary can bli blu jump? ==> Misunderstand: does not exist in the dictionary do cat nice? ==> Misunderstand: If the is declared the must be declared is leg of nice? ==> Misunderstand: Invalid is cat? ==> Misunderstand: No object declared can cat nice? ==> Misunderstand: If the key is the characteristic must be a verb, it isn't how? ==> Misunderstand: incomplete question how many? ==> Misunderstand: incomplete question how cat? ==> Misunderstand: the is mandatory how many cat? ==> Misunderstand: no concept declared how many cat have? ==> Misunderstand: no concept declared how many cat have a? ==> Misunderstand: no concept declared how legs has a cat? ==> Misunderstand: the is mandatory how many blo has a leg of cat? ==> Misunderstand: does not exist in the dictionary how many leg has a cat blu got? ==> Misunderstand: If the key is the question could finish with , found how many cat has a bli blu got? ==> Misunderstand: does not exist in the dictionary how many cat do a cat? ==> Misunderstand: If the key is the question must finish with how many cat of has a leg ? ==> Misunderstand: This position expects or , found how many cat has a leg of ? ==> Misunderstand: Invalid what? ==> Misunderstand: Incomplete question what is blu? ==> Misunderstand: does not exist in the dictionary what is cat blu? ==> Misunderstand: does not exist in the dictionary what blu is cat? ==> Misunderstand: is not a valid key (it must be , or ) what leg blu is cat? ==> Misunderstand: is not a valid key (it must be , or ) what leg of cat is nice? ==> Misunderstand: Attributes names (of) is not allowed in the concept what any cat? ==> Misunderstand: is not a valid key (it must be , or ) what is cat of blu? ==> Misunderstand: does not exist in the dictionary what have 4? ==> Misunderstand: No characteristic declared what is four legs? ==> Misunderstand: Numbers are only acepted in case of attribute (have) questions what is cat nor nice? ==> Misunderstand: does not exist in the dictionary what is cat or have? ==> Misunderstand: No characteristic declared what is cat or nice or have leg and blu ? ==> Misunderstand: does not exist in the dictionary what is be nice? ==> Misunderstand: only could be declared in case the key is what is an? ==> Misunderstand: No characteristic declared what have nice? ==> Misunderstand: If the key is the characteristic must be a noun, it isn't what can be nice? ==> Misunderstand: If the key is the characteristic must be a verb, it isn't what is nice and? ==> Misunderstand: No condition declared after an and/or operator what is not cat? ==> Misunderstand: Negative conditions only are allowed if the are multiple conditions or the concept is declared - Updated the Standford NLP core, from version 3.2 to 3.4.1 Also changed the service cycle of communication, from files to sockets, achieving a better performance (both initializing and analysing sentences) and simplifying the messaging protocol The default socket port is the 9902, but it can be changed when the service is call, passing as argument (check the "NLPstart.cmd" file) [http://aseryla.16mb.com/APP_starting.html#nlpkit] - The aseryla application has been transformed into a service, to allow more than one client at once, and also to permit implement several user interfaces (web, graphical, not only command line) Now the service is listening in a socket port (9901 by default) in the localhost machine and the clients (user interfaces) has to write the petitions and read the response on that port The service can receive some argument when is starting - working socket port (9901 by default) where the service will listen and reponse the petitions - nlp socket port (9902 by default) where the Stanford NLP Core will work - number (100 by default) with maximum of ilcodes processed before saves automatically the memory (autosave mechanism) for performance reasons, this number is dynamically modified without manual intervention when large text files are processed Each order is processed in a batch asynchronous FIFO list. The list of accepted command is: @x Order to shutdown the service. @w number Set the number of processed ilcodes to save automatically the memory. @v Saves the memory content. Even with the autosave mechanism disabled (@w 0) @s word Return a string (to directly print out) with all the memory information (lexicon, frame, sets) about the indicated term. ?q [deep_search][guessing_mode][threshold] [max_res] [show_percent] [translate_specializations] [translate_attributes] [question] Return the answer with the specified format to a question (affirmative, group,...) with the indicated ?q 1 0 0 0 0 0 0 0 is cat nice --> Yes ?q 1 1 40 10 1 1 1 what is nice and has paws --> cat 100%, dog 50% ?c [question ILcode] [trust] [source] [user response] Question confimation ?q 0 0 0 0 0 0 0 is cat nice ? Yes [2 10 23 0] ?c 2 10 23 0 1 1 0 (correcting) ?q 0 0 0 0 0 0 0 is cat nice ? No Tl [trust] [source] [text] Given the sentences of a text, performs a complet language process (parsing, lexical, gramatical semantical, learning) Tc [file] Loads an ILC file Ti [ilc] Process an IL code [http://aseryla.16mb.com/Interface.html] - Memory management won't be controled by the user removed the user orders test mode [http://aseryla.16mb.com/Orders.html#modetest] save inter [http://aseryla.16mb.com/Orders.html#modesaveinter] save proper [http://aseryla.16mb.com/Orders.html#modesaveproper] ILmemfile [http://aseryla.16mb.com/Orders.html#modeilmemfile] arrange [http://aseryla.16mb.com/Orders.html#memoryarrange] save [http://aseryla.16mb.com/Orders.html#memorysave] No more test mode option, no more manual saving When the service is shutdown, the memory will be arranged and also saved in ilc format The interactions and propers always will be saved The service will manage automatically when save or not based in performance reasons, for example when files are loaded the maxilc2save number will be set to 0 and saved when the process finish (the senteces will be saved in database, for recover and not reprocess in case of failures) Altough is allowed to adjust the autosave mechanism [http://aseryla.16mb.com/Orders.html#modeautosave] by application argument - Performance into saving memory Added a mechanism to avoid save the memory if no changes has been made since the last time the memory was saved - Added a database (SQLlite) for: manage a language processing cache avoiding reprocess sentences using the Stanford NLP core extra data storage for the memory content the internal language codes of every processed sentence (tables "ilws" and "ilcs") safety measure when a large number of sentences are processed, e.g. load file or book "./data/error_nlp_kit.txt" file has been replaced by the "failed" & "errors" tables store auxiliary data, such as propers, interelations [http://aseryla.16mb.com/Orders.html#modesaveproper] [http://aseryla.16mb.com/Orders.html#modesaveinter] check database.h/.cpp in the source code - Created an external command line interface "cmd_interface.exe" [http://aseryla.16mb.com/APP_download.html] The orders are the same as previous versions, but lots of them has been marked as obsolete [http://aseryla.16mb.com/Orders.html] The steps for running the application has been changed [http://aseryla.16mb.com/APP_starting.html#run] - As aseryla is service, several interfaces could be easily implemented, such as command line, web, graphical - Multiuser So aseryla is running as a server, it process petitions, those petitions are not necessary asked for the same user (e.g. running the "cmd_interface.exe" twice) FIXED: - The question confirmation mechanism was not properly called in the command line user interface - From the command line, question confirmation was asked when group questions - The Internal Language Code has been unified from [subject] [relation] [object] {tendendy} {source} {extra only if not ISA or CANBE} to [subject] [relation] [object] {extra (always can be added)} {tendendy} {source} old format new format a ISA b a ISA b a IS c -1 a IS c / -1 a HAVE d 1 1 4 a HAVE d 4 a CAN e 1 1 /very a CAN e /very a CANBE 2 a CANBE / 2 [http://aseryla.16mb.com/Internal_Language.html#code] - The guestion graph allowed input standalone "not" In case the "not" particle is declared in the question. It's mandatory declare the concept or at least more than one characteristic/condition. "What can NOT jump?" ? it's likely every concept that exist into the memory fits that condition. Defining more conditions the number of concepts to explore is considerably reduced. "what animal can't jump?" or "what hasn't wings and has plumes?" are valid questions. Negative contractions are allowed (can't, aren't, ...) [http://aseryla.16mb.com/MD_language.html#graph_gr] - The question graph failed when subjects are not provided after a key verb E.g. what is cat or have? [http://aseryla.16mb.com/MD_language.html#graph_gr] - Affirmative questions graph obligate to declared a "got" when the key is "have" Avoiding imputting questions as "has a cat (got) legs?" - Parsing process returns empty invalid sentences when an invalid text with dot appears e.g jkdsjkd1.3d3d/ ******************** version 1.2 08/08/14 ************************************************************************ ADDED: - Specializations (multiple word concepts) The system was designed based on the idea of one word, one concept. From now, the model allow to manage multiple words as unique concept, such as "football team" or "stock exchange". [http://aseryla.16mb.com/MD_considerations.html#multi] - Deleted Ambigous Adjectival Noun relations It has been replaced by the specializations "the animal dog is nice" before: dog IS nice + dog ADJNOUN animal now: animal_dog IS nice [http://aseryla.16mb.com/MD_memory.html#fra] And their correspondent internal language code ADJNOUN [http://aseryla.16mb.com/Internal_Language.html#code] - Adapted Noun Relations from Intermediate Language to allow multiple noun concept [http://aseryla.16mb.com/Intemediate_Language.html] And also create a new specific code to create their correspondent WORD codes [http://aseryla.16mb.com/Intemediate_Language.html#sp] - Added mechanism to manage and show the specializations [http://aseryla.16mb.com/Orders.html#modespecformat] [http://aseryla.16mb.com/Orders.html#showterm] - Modified questions graphs to allow multiple nouns [http://aseryla.16mb.com/MD_language.html#graph_af] [http://aseryla.16mb.com/MD_language.html#graph_gr] also negatives(even using contractions) are allowed in negative group questions (What animal is NOT nice?) and even multiple conditions using logical operators in group questions (what is nice and large or big and has four legs and can eat?) [http://aseryla.16mb.com/MD_language.html#graph_gr] - Object guessing After modify the question group graph to allow multiple conditions, the system allow made more complex searches, which leads to object guessing [http://aseryla.16mb.com/MD_memory.html#og] Also created the correspondent orders to control this mechanism and his behaviour [http://aseryla.16mb.com/Orders.html#modeguessing] [http://aseryla.16mb.com/Orders.html#showguessthres] [http://aseryla.16mb.com/Orders.html#showguessmax] - Removed OFCLAUSE ambiguous relations This association has been replaced by attribute relations [http://aseryla.16mb.com/MD_considerations.html#ofclause] - The format of the memory file "sets.txt" has been adapted to add the negative relations. Taking advantage, the format of the file has been improved to reduce their size and time of loading/saving. [http://aseryla.16mb.com/Memory_Files.html#sets] - Inheritance choice In deep searches, the process stop when a ode with the searched characteristic is found. This could produce some "not too realistic" results cat is animal, mammal animal is not big mammal is big is cat big? No, because the first node has the characteristic and return the results. Now the exploration of all the related nodes only stops if it found the characteristic with positive tendency. [http://aseryla.16mb.com/MD_considerations.html#inherchoice] - Skill inheritance of attributes Added also inheritance choice behaviour (described in the previous point) in the skill searches. When a skill is search, is also search in their attributes, and in their parents and attributes of that attributes a have b / a%b is b and have c can a s? --> s is searched in a, a%b, b and c [http://aseryla.16mb.com/MD_considerations.html#inherskills] - Added a mechanism to save the processed proper nouns, as 'New York isa location' or 'Jhon isa person" Using new Intermediate Language code to manage the proper nouns [http://aseryla.16mb.com/Intemediate_Language.html#pn] And even could be managed from @orders [http://aseryla.16mb.com/Orders.html#modesaveprover] - Added a mechanism to save the interactions between concepts people sold radios or computers memory --> people can sell radio canbe sell computer canbe sell interaction file --> people sell radio people sell computer [http://aseryla.16mb.com/Orders.html#modesaveinter] FIXED: - The application hadn't been processed correctly the sentences with the combination "can + be" when are not followed of a verb "a cat can be thrown" --> (VP (MD can) (VP (VB be) (VP (VBN thrown)) after the "can + be" combination there is a verb then it's a CANBE relation "a cat can be white" -->(VP (MD can) (VP (VB be) (ADJP (JJ white))) after the "can + be" combination there ISN'T a verb, therefore it CAN'T be a CANBE relation (it's a IS or ISA relation) - internal language WORD code errors 1. It was not accepting the symbol % simbol, therefore no way of create attribute references WORD N Man%hands man%hand 2. also it was accepting values with the comma or the dot - The negative relations was checked twice during the frame exploration in the deep search - In the deep search, it explored frames with the searched element in their parent list with negative tendency cat isa pet pet isa animal animal isa cat -1 animal is nice is cat nice? cat --> pet --> animal (nice) --> YES is cat nice? cat --> pet -x-> animal (- cat) --> UNKNOWN - Removed the Ambiguous Adjectival Nouns from the model It has been replaced using the specialization (more than one word concept) mechanism - When a verb has been referenced by more than one adverb, it wasn't stored correctly. - Group Question Graph failed when a word with lemma BE, HAVE o CAN is introduced into the dictionary with NOUN type the parser couldn't distinguish between a keyword + concept or multiple word concept(specialization) what is(noun & verb) animal(noun)? ==> key=be / concept=animal ? OR key=null / concept= be_animal ? - The "of" word didn't exists into the minimum list of word to be loaded (./data/origin), therefore questions about attributes of concepts failed (as "is leg of cat large? --> Misunderstand) - Cleaned the existent example dataset there were letters as words (e.g. WORD N A a) adapted relations from previous versions as OFCLAUSE or ADJNOUN - The application failed when an empty question are asked listening>? ==> application failure - When an @show term order is call from a batch file processing, and the term does not exist, no white space separation was left before --> @show term nn1Not Found now --> @show term nn1 Not Found [http://aseryla.16mb.com/Orders.html#loadbatch] [http://aseryla.16mb.com/Orders.html#showterm] ******************** version 1.1 03/03/14 ************************************************************************ ADDED: - BE + preposition exception When the language analyzer found a "verb BE following of an IN preposition" assumes the verb BE is indicating a location not a parent relation. This exception was only applied in case of "in" preposition, it's added also the other location prepositions (on, above, under,...) Then, for example, from "cat is on the shelf" the analyzer doesn't extract any relation for cat and shelf. [http://aseryla.16mb.com/MD_considerations.html#beprop] - Add mechanism to add multiple numbered attributes at once animals has two or four legs prior version: animal HAVE leg 1 1 2 animal HAVE leg 1 1 4 from now: animal HAVE leg 1 1 /2/4 [http://aseryla.16mb.com/Internal_Language.html#code] - Besides the memory files: /aseryla/data/xxxx.txt Option for save the memory content in natural language format (/aseryla/data/ilc.txt) [http://aseryla.16mb.com/MD_considerations.html#membackup] [http://aseryla.16mb.com/APP_starting.html#bkp] - Added new parameter to manage the option described above [http://aseryla.16mb.com/orders.html#modeilmemfile] - Added new parameter to manage the autosave memory mechanism [http://aseryla.16mb.com/orders.html#modeautosave] - Numbered search in group questions. As for example: what have 4 legs? [http://aseryla.16mb.com/MD_language.html#graph_gr] - Attributed numbered questions could be written in word format up to 1 million. It must be write in a unique - separated word, as for example: four sixteen twenty-two two-hundred-fifty-six twenty-seven-thousand nine-hundred-ninety-nine-thousand-nine-hundred-ninety-nine (999999 max accepted number) - Impersonal pronouns ("it") are filtered from the parsing phase because the impersonal pronoun can't be substituted by the concept "person", and then it can't be assigned any relation. [http://aseryla.16mb.com/MD_language.html#proc] - New order: @load ilc. For inputting knowledge directly to the memory without using the NLPkit. [http://aseryla.16mb.com/Orders.html#loadilc] - New mechanism to correcting the memory content (question confirmation) * force: change the tendency, removing the previous frequency. * invert: change the tendency sign, respecting the frequency. * detract: adds or subtract frequency. (the strategy of the version 1.0) [http://aseryla.16mb.com/MD_Others.html#conf] Modified also their correspondent @ order [http://aseryla.16mb.com/Orders.html#modeconfirmation] - New order: @memory arrange applies a memory content (frame characteristic lists) clean/tidy up for every list of every frame (that is not already tidy): - remove every element with neutral tendency --> shorter the searches - sort the elements by higher frequency (and then by more diversified source), setting the positives ones first --> improves the searches - updates the "firstNegative" pointer --> less time spent pruning explored nodes in deep search [http://aseryla.16mb.com/Orders.html#memoryarrange] - Added pointers to the first negative tendency relation in every frame list, optimization useful for determine which nodes don't be expanded in the deep searches - Dictionary saved ordered by the most used words first. It helps to identity which are the most used words, and to know which words are probably introduced by error The last ones will have 1 number times referenced, with only one source and no relations in the frames (unless it was attributed frames (%) it could be purged). First step to create statistics of the system. - Adverbs in the skills references (until now, there was only storing for the features) "cheetahs run incredibly quickly" CONCEPT: cheetah skills: run(1){incredibly-quickly} [http://aseryla.16mb.com/MD_considerations.html#gradations] - Sentences with more than one verb phrase or a sentence inside of a sentence John begins to write his book = (S (NP (NNP John)) (VP (VBZ begins) (S (VP (TO to) (VP (VB write) (NP (PRP$ his) (NN book)))))))) a sentence inside of another sentence, and multiple verb phrase (VP) it extract "person can write and also can begin" also: "I watched, looked and seeing the football match" (multiple verbs) --> person can watch / person can look / person can see "I have to pick up the child" (modals and phrasal verbs) --> person can pick "He would have been sliced and diced a decade ago" (auxiliary) --> person can slice / person can dice [http://aseryla.16mb.com/MD_considerations.html#complex] - Neither/nor Sentences like "stones neither(nor) eat nor drink" Are interpreted as: stone can write -1 / stone can drink -1 [http://aseryla.16mb.com/MD_considerations.html#complex] - New order: @load book process an text file chunking the data dot by dot, instead of line by line as "@load text" does file: one two. three @load text book process - one one two - two three - three [http://aseryla.16mb.com/Orders.html#loadbook] - Safety measure: if the process of loading the memory files fails, then the system will try to load the backup files. For example, the xxxx.txt are corrupted when the application is starting or when the test mode is disabled. [http://aseryla.16mb.com/APP_starting.html#bkp] - Linux redistributable [http://aseryla.16mb.com/APP_download.html] FIXED: - @show term for adverbs bug [http://aseryla.16mb.com/MD_considerations.html#bugs] - avoided known "input = getline()" bug in the source code, it has been replaced by "cin >> input" (main.cpp / readline()) if you compile using MSVC++6, the solution is upgrading to a newer version (e.g. Visual C++ 2008 is free) or following this steps: http://faculty.edcc.edu/paul.bladek/getline_fix.h - in the frame deep search, it was expanding parent nodes with non positive tendency [http://aseryla.16mb.com/MD_memory.html#ds] tiger(NOT mammal) --> feline --> mammal --> animal(large) is tiger large?: the path does not continue expanding in feline, as tiger has "not mammal" as parent relation - discarded the EXCEPTION parent-attribute link [http://aseryla.16mb.com/MD_considerations.html#bugs] CONCEPT yellow adjective/noun SETS parents: bird, tiger%yellow features: lion What is yellow? bird, lion / tiger is discarded although tiger%yellow has tiger as parent - numbered attribute searches has not been running when deep search mode is active. [http://aseryla.16mb.com/MD_memory.html#ret] - in frame deep searches, the search it stops when the characteristic is found in the frame concept or any of his parents, returning Yes in case of positive tendency or No if the tendency is negative. The problem was in case of neutral tendency (==0) returns Unknown instead of considering as not found and continue the search through the parents [http://aseryla.16mb.com/MD_memory.html#ds] - attributes in results of group questions as for example: what has leg? it returned cat%leg (leg of cat) instead of 'cat'. - The word "it" in the dictionary data [http://aseryla.16mb.com/memory_files.html] now is pointing to "no concept" instead of the "person" concept. [http://aseryla.16mb.com/MD_considerations.html#prp] - Added to the source code the correspondent #defines to allow cross-platform compilation. - Removed the fixed deployment folder (it had to decompressed in C:\aseryla). Now the application can be decompressed in any folder, nonetheless the directory structure inside of "/aseryla" remains intact. [http://aseryla.16mb.com/APP_starting.html] - Limited the maximum accepted value for the Trustworthy [http://aseryla.16mb.com/Orders.html#modetrust] - Solved the problem of correcting knowledge through the question confirmation, When you ask a question, it receives an answer based in the tendency ("Yes" if positive...), but not about the frequency. Then it was not easy to know how number you should set the Trust for change the tendency of the assertion. [http://aseryla.16mb.com/MD_considerations.html#corr] - Removed the testing suite code from the release executable. - Bad management of characteristic search in attribute frames with negative parent relation Having the following scenario: - clock have needle - needleof clock have paint - paint of needleof clock is black "paint of needleof clock" could be "black", only if: "needles of clocks" have "paint" and "clock" has "needles" - Possessives pronouns (My, yours, its, ...) was not discarded [http://aseryla.16mb.com/MD_considerations.html#prp] Then distransitve sentences are automaticaly well processed, "She is baking him a cake" ==> "She is baking a cake" (1 sentence, VP part with the link verb and the object NP) [http://aseryla.16mb.com/MD_considerations.html#complex] - "have to/ought to" are modal verbs, not action verbs the modals verbs are not take in count to create associations [http://aseryla.16mb.com/MD_language.html#cons] but the filter (lexical phase) is capable for catching only one word modals I have to write --> "person CAN write" not "person CAN have" [http://aseryla.16mb.com/MD_considerations.html#complex] - when it process a "@load file", before analyzing, it loads the entire content of the file into the RAM memory (too slow and problematic with large files), instead of reading and processing line by line - the tendency of "Negative Have" sentences was not setting correctly when appears modifiers stools does not have large backrest or lights --> stool HAVE backrest +1 / stool%backrest IS large -1 (this scenario was processed correctly, the negative affects the attribute not the relation) --> stool HAVE lights +1 (here the problem, the tendency must be negative, as this object has no modifiers the negative affects directly the object) [http://aseryla.16mb.com/MD_language.html#gr_points] point 3, "negative attribute relations" - simple CAN BE sentences was not been processed correctly the brick could was thrown to the window --> brick CANBE throw instead of "brick CAN throw" + "window CANBE throw" only applicable when are positive assertions a cat can't be a dog --> cat ISA dog -1 ******************** version 1.0 11/01/14 ************************************************************************ first release