Русскоязычный Искусственный Интеллект Душка
For Artificial Intelligence Dushka

RuParser Russian Parser Module of

English and Russian bilingual ghost.pl AI in Perl


1. Diagram of the RuParser Russian Parser Mind-Module


   /^^^^^^^^^\ RuParser Determines Parts Of Speech /^^^^^^^^^\
  /   EYE     \  MINDCORE               _____     /   EAR     \
 /             \ CONCEPTS              /New- \   /             \
|   _______     |   | | |      _____  (Concept)-|-------------\ |
|  /old    \    |   | | |     /Old- \  \_____/  |  Audition   | |
| / image   \---|-----+ |    (Concept)------|---|-----------\ | |
| \ recog   /   |   | | |     \_____/-------|---|---------\ | | |
|  \_______/    |  a| | |          |________V   |         | | | |
|               |  b|C| |         / RuParser \  |         | | | |
|   visual      |  s|O|f|         \__________/  |         | | | |
|               |  t|N|i|              |noun?   |СТУДЕНТЫ-/ | | |
|   memory      |  r|C|b|              |verb?   |           | | |
|               |  a|E|e|              |adj.?   |ЧИТАЮТ-----/ | |
|   channel     |  c|P|r|              |adverb? |             | |
|               |  t|T|s|              |prep.?  |КНИГИ--------/ |
|   _______     |   | | |              |conj.?  |               |
|  /new    \    |   |_|_|        ______V____    |               |
| / percept \   |  /     \      /           \   |               |
| \ engram  /---|--\ Psy /-----( InStantiate )  |               |
|  \_______/    |   \___/       \___________/   |               |


2. Purpose of the RuParser AI Mind Module

RuParser serves the purpose of not only identifying a part of speech such as a noun, preposition or verb, but also of comprehending the part of speech in context by helping to assign associative tags among concepts in the Psy conceptual array. Thus RuParser and its English counterpart EnParser and its ancient Latin counterpart LaParser serve the purpose of Natural Language Understanding (NLU).


3. Function of RuParser

In contrast with the much simpler EnParser mind-module for English, the Russian RuParser module relies more on Russian inflectional endings than on word-order to determine the part of speech (POS) of a Russian word as part of comprehending the idea being conveyed. The dative inflectional ending overrides word-order in Russian to indicate that a Russian word is either the indirect object of a transitive verb or the object of a Russian preposition used with the dative case.

To parse and comprehend an indirect object, RuParser tentatively fills the time-of-indirect-object $tio flag with the input-time of the first noun being input after a verb. The $tio flag is set only once by requiring that it be at zero for it to be set. Simultaneously, the time-of-direct-object flag $tdo is filled with the same value as the $tio flag for an indirect object, because it is not yet known whether one noun or two nouns are being entered subsequent to the input of a transitive verb. If and when a second noun comes in, the value for the time-of-direct-object $tdo flag, originally filled with the same value as the indirect-object $tio flag, is replaced or overwritten with the new time of the second post-verb noun in the input stream.

If only one noun comes in after the verb, the identifier of the direct object is set only once. If two post-verb nouns come in, the first noun becomes the indirect object and the second noun becomes the direct object.


4. Code of RuParser() from ghost298.pl First Working AGI in Perl


sub RuParser() {  # http://ai.neocities.org/RuParser.html 
  $act = 48;  # 2016apr28: an arbitrary activation for InStantiate()
  $bias = 5;  # 2016feb24: Expect a noun until overruled. 
  if ($fyi > 2) {  # 2016feb24: if mode is Diagnostic 
  }  # 2016feb24: end of test for Diagnostic or Tutorial mode.
  if ($pos == 5) { $bias = 8 }  # 2016feb24: after noun, expect verb.
  if ($pos == 7) { $bias = 8 }  # 2016feb24: after pronoun, expect verb.
  if ($pos == 8) { $bias = 5 }  # 2016feb24: after verb, expect noun
  if ($pos == 6) { $prepcon = 1; $tpp = $tult }  # 2017-09-17: prepare for noun.
  if ($pos == 5 || $pos == 7) {  # 2017-09-17: if (pro)noun follows preposition...
    $tsj = ($t - 1);     # 2019-06-06: subject?
    if ($prepcon == 1) {  # 2017-09-17: if preposition-condition is on... 
      my @k=split(',',$psy[$tpp]);  # 2017-09-17: expose flag-panel of preposition;
      $pre = $k[1];  # 2017-09-17: Let $pre briefly be the preposition.
      $psy[$tpp]="$k[0],$k[1],$k[2],$k[3],$k[4],$k[5],$k[6],"
      . "$k[7],$k[8],$k[9],$k[10],$k[11],$psi,$k[13],$k[14]";  # 2017-09-17
      @k=split(',',$psy[$tult]);  # 2017-09-13: expose flag-panel of obj of prep.
      $psy[$tult]="$k[0],$k[1],$k[2],$k[3],$k[4],$k[5],$k[6],"
      . "4,$k[8],$k[9],$pre,$k[11],0,$k[13],$k[14]";            # 2017-09-17
      $prepcon = 0;  # 2017-09-17: Reset to prevent carry-over. 
    }  # 2017-09-17: end of test for a positive $prepcon.
  }  # 2017-09-17: end of test for a noun or pronoun.
  if ($pos == 8) {  # 2019-06-06: if part of speech is Russian 8=verb...
    $tvb = ($t - 1);  # 2019-06-06: hold onto time-of-verb for flag-insertions.
    $verbcon = 1;  # 2019-06-06: verb-condition is "on" for ind. & dir. objects.
    my @k=split(',',$psy[$tsj]);  # 2019-06-06: expose flag-panel of subject noun
    $subjpre = $k[1];  # 2019-06-06: Hold onto $subjpre for the pos=8 verb
    $psy[$tsj]="$k[0],$k[1],$k[2],$k[3],$k[4],$k[5],$k[6],"
   . "1,$k[8],$k[9],$k[10],$k[11],$psi,$tvb,$k[14]";  # 2019-06-06
    @k=split(',',$psy[$tult]);  # 2019-06-06: expose flag-panel of verb.
    $psy[$tult]="$k[0],$k[1],$k[2],$k[3],$k[4],$k[5],$k[6],"
    . "$k[7],$k[8],$k[9],$subjpre,$k[11],0,$k[13],$k[14]";  # 2019-06-06
    $subjpre = 0;  # 2019-06-06: Reset for safety. 
  }  # 2019-06-06: end of test for a pos=8 Russian verb.
  InStantiate(); # 2016feb24: for creating @psi concept-nodes
}  # 2016feb24: RuParser() returns to OldConcept() or NewConcept().


5. Variables for the RuParser Russian AI Mind Module

$pos -- (part of speech) 1=adj 2=adv 3=conj 4=interj 5=noun 6=prep 7=pron 8=verb


6. Troubleshooting and Debugging for AI Mind Maintainers

6.1.a. Symptom: (Something goes wrong.)
6.1.b. Solution: (AI Mind Maintainer devises solution.)

To debug the function of assigning indirect and direct objects, the AI Mind Maintainer enters a typical sentence such as the Russian for "Students show the teacher a robot" that contains both an indirect object and a direct object, and presses Escape to halt the AI after the input. Then the Maintainer examines the display of the conceptual array to see if $iob and $seq have been properly assigned. The AI coder may also insert diagnostic "print" messages into InStantiate() and RuParser() so as to observe the process of assigning a tag during the input and comprehension of a sentence.


7. Future Development

Roadmap to Artificial Intelligence


8. Resources for Artificial Intelligence in Russian Language

  • Artificial Intelligence in Ancient Latin

  • http://github.com/PriorArt/AGI/wiki/MindGrid


    9. AiTree of Mind-Modules for Natural Language Understanding



    "Look Inside" Kindle version to read initial chapters.


    Website Counter