Exemplo n.º 1
0
 public function ordenarSlot($subjmasc, $subjpl)
 {
     $nucli = $this->paraulafinal;
     $elementaux = array();
     if ($nucli != null) {
         switch ($nucli->tipus) {
             case "name":
                 $numeros = array();
                 $quantifieradj = array();
                 // stores the quantifiers that complement the adj instead of the nucleus
                 $hasquantifieradj = false;
                 $hasnumorquant = false;
                 $haspossessive = 0;
                 // al nostre sistema només els nuclis poden tenir possessius
                 // també l'activarem si té ordinals o altres elements que van
                 // entre l'article i el nom
                 // calculem els valors per la concordància general
                 $masc = true;
                 $plural = false;
                 // si el nom és femení
                 if ($nucli->propietats->mf == "fem") {
                     $masc = false;
                 }
                 // si el nom és plural
                 if ($nucli->propietats->singpl == "pl") {
                     $plural = true;
                 }
                 // si té modificadors de femení i l'accepta
                 if ($nucli->propietats->femeni != "NULL" && $nucli->fem) {
                     $masc = false;
                 }
                 // si té modificador de plural
                 if ($nucli->plural) {
                     $plural = true;
                 }
                 // PREPOSICIÓ
                 // posem la preposició, si n'hi ha
                 if ($this->prep != null) {
                     $elementaux[0] = $this->prep;
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                 }
                 // Posem, si cal, la preposició "a", davant dels slots de temps
                 if ($this->category == "Time") {
                     $CI =& get_instance();
                     $CI->load->library('Mymatching');
                     $matching = new Mymatching();
                     if ($matching->isTimePrep($nucli->text)) {
                         $elementaux[0] = $matching->tempsPrep[$nucli->text];
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 // QUANTIFICADOR O POSSESSIUS
                 // si el nom té un modificador, que només pot ser un quantificador o possessiu
                 if ($this->CModassigned) {
                     for ($i = 0; $i < count($this->CModassignedkey); $i++) {
                         $quantifierslot = $this->cmpMod[$this->CModassignedkey[$i]];
                         // si és un número
                         if ($quantifierslot->paraulafinal->isClass("numero")) {
                             $numeros[] = $quantifierslot;
                             // si és un número diferent d'1, tot passarà a ser plural
                             if ($quantifierslot->paraulafinal->text != "un") {
                                 $plural = true;
                             }
                         } else {
                             // si el nucli també té un adjectiu assignat, mirem si va millor amb l'adjectiu
                             if ($this->CAdjassigned) {
                                 // si és quantifier i anava just davant de l'adjectiu, el guardem per després
                                 if ($quantifierslot->paraulafinal->inputorder - $this->cmpAdjs[$this->CAdjassignedkey]->paraulafinal->inputorder == -1 && $quantifierslot->paraulafinal->classes[0] == "quant") {
                                     $quantifieradj[] = $quantifierslot;
                                     $hasquantifieradj = true;
                                 } else {
                                     if ($masc && !$plural) {
                                         $elementaux[0] = $quantifierslot->paraulafinal->propietats->masc;
                                     } else {
                                         if ($masc && $plural) {
                                             $elementaux[0] = $quantifierslot->paraulafinal->propietats->mascpl;
                                         } else {
                                             if (!$masc && !$plural) {
                                                 $elementaux[0] = $quantifierslot->paraulafinal->propietats->fem;
                                             } else {
                                                 $elementaux[0] = $quantifierslot->paraulafinal->propietats->fempl;
                                             }
                                         }
                                     }
                                     $elementaux[1] = $quantifierslot->paraulafinal;
                                     $this->slotstring[] = $elementaux;
                                     $hasnumorquant = true;
                                     if (strpos($quantifierslot->paraulafinal->classes[0], "pos") === 0) {
                                         $haspossessive++;
                                         $hasnumorquant = false;
                                     }
                                 }
                             } else {
                                 if ($masc && !$plural) {
                                     $elementaux[0] = $quantifierslot->paraulafinal->propietats->masc;
                                 } else {
                                     if ($masc && $plural) {
                                         $elementaux[0] = $quantifierslot->paraulafinal->propietats->mascpl;
                                     } else {
                                         if (!$masc && !$plural) {
                                             $elementaux[0] = $quantifierslot->paraulafinal->propietats->fem;
                                         } else {
                                             $elementaux[0] = $quantifierslot->paraulafinal->propietats->fempl;
                                         }
                                     }
                                 }
                                 $elementaux[1] = $quantifierslot->paraulafinal;
                                 $this->slotstring[] = $elementaux;
                                 $hasnumorquant = true;
                                 if (strpos($quantifierslot->paraulafinal->classes[0], "pos") === 0) {
                                     $haspossessive++;
                                     $hasnumorquant = false;
                                 }
                             }
                         }
                     }
                 }
                 // ADVERBI DE LLOC
                 if ($this->CAdvassigned) {
                     $adverbistring = $this->cmpAdvs[$this->CAdvassignedkey]->paraulafinal;
                     // dividir-lo en cada una de les paraules que formen l'adverbi
                     $auxstring = explode(" ", $adverbistring->text);
                     // afegir cada paraula en ordre a slotstring
                     for ($i = 0; $i < count($auxstring); $i++) {
                         $elementaux[0] = $auxstring[$i];
                         $elementaux[1] = $adverbistring;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 // NUMEROS
                 for ($i = 0; $i < count($numeros); $i++) {
                     if ($masc) {
                         $elementaux[0] = $numeros[$i]->paraulafinal->propietats->masc;
                     } else {
                         $elementaux[0] = $numeros[$i]->paraulafinal->propietats->fem;
                     }
                     $elementaux[1] = $numeros[$i]->paraulafinal;
                     $this->slotstring[] = $elementaux;
                     $hasnumorquant = true;
                 }
                 // ORDINALS
                 if ($this->CAdjassigned) {
                     $adjectiu = $this->cmpAdjs[$this->CAdjassignedkey]->paraulafinal;
                     if ($adjectiu->isClass("ordinal")) {
                         if ($masc && !$plural) {
                             $elementaux[0] = $adjectiu->propietats->masc;
                         } else {
                             if ($masc && $plural) {
                                 $elementaux[0] = $adjectiu->propietats->mascpl;
                             } else {
                                 if (!$masc && !$plural) {
                                     $elementaux[0] = $adjectiu->propietats->fem;
                                 } else {
                                     $elementaux[0] = $adjectiu->propietats->fempl;
                                 }
                             }
                         }
                         $elementaux[1] = $adjectiu;
                         $this->slotstring[] = $elementaux;
                         $haspossessive++;
                         $this->CAdjassigned = false;
                         // indiquem que ja s'ha vist l'adjectiu
                     }
                 }
                 // NOM + COORDINACIÓ
                 if ($plural) {
                     if ($nucli->propietats->mf != "fem" && !$masc) {
                         $elementaux[0] = $nucli->propietats->fempl;
                     } else {
                         $elementaux[0] = $nucli->propietats->plural;
                     }
                 } else {
                     if ($masc && !$plural) {
                         $elementaux[0] = $nucli->propietats->nomtext;
                     } else {
                         if ($nucli->propietats->mf == "fem") {
                             $elementaux[0] = $nucli->propietats->nomtext;
                         } else {
                             $elementaux[0] = $nucli->propietats->femeni;
                         }
                     }
                 }
                 $elementaux[1] = $nucli;
                 // com que el nucli és un nom, afegim la informació extra
                 $elementaux[2] = true;
                 $elementaux[3] = $masc;
                 $elementaux[4] = $plural;
                 $elementaux[5] = $hasnumorquant;
                 $elementaux[6] = false;
                 $elementaux[7] = $haspossessive;
                 $this->slotstring[] = $elementaux;
                 // si té element coordinat
                 if ($nucli->paraulacoord != null) {
                     $paraulacoord = $nucli->paraulacoord;
                     // afegim la "i"
                     $elementaux[0] = "i";
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                     // afegim la paraula coordinada, el plural es passa, però el femení
                     // s'ha de mirar si la paraula ho era o no el tenia el modificador
                     $masccoord = true;
                     $pluralcoord = $plural;
                     if ($paraulacoord->propietats->mf == "fem" || $paraulacoord->fem) {
                         $masccoord = false;
                     }
                     // el plural només pot canviar si plural era false i la paraulacoord sempre és plural
                     // que aleshores ha de passar a true o si volíem que la paraulacoord fos plural
                     if ($paraulacoord->propietats->singpl == "pl" || $paraulacoord->plural) {
                         $plural = true;
                     }
                     if ($pluralcoord) {
                         $elementaux[0] = $paraulacoord->propietats->plural;
                     } else {
                         if ($masccoord && !$pluralcoord) {
                             $elementaux[0] = $paraulacoord->propietats->nomtext;
                         } else {
                             if ($paraulacoord->propietats->mf == "fem") {
                                 $elementaux[0] = $paraulacoord->propietats->nomtext;
                             } else {
                                 $elementaux[0] = $paraulacoord->propietats->femeni;
                             }
                         }
                     }
                     $elementaux[1] = $paraulacoord;
                     // com que la paraula coordinada ha de ser un nom, afegim la info extra
                     $elementaux[2] = true;
                     $elementaux[3] = $masccoord;
                     $elementaux[4] = $pluralcoord;
                     $elementaux[5] = $hasnumorquant;
                     $elementaux[6] = false;
                     $elementaux[7] = $haspossessive;
                     $this->slotstring[] = $elementaux;
                 }
                 // ADJECTIUS I COMPLEMENTS DE NOM
                 // si té un adjectiu i no un complement de nom
                 if ($this->CAdjassigned && !$this->NCassigned) {
                     // si l'adjectiu tenia un quantificador l'afegim
                     if ($hasquantifieradj) {
                         for ($i = 0; $i < count($quantifieradj); $i++) {
                             // aquí els quantificadors tenen forma invariable
                             $elementaux[0] = $quantifieradj[$i]->paraulafinal->propietats->masc;
                             $elementaux[1] = $quantifieradj[$i]->paraulafinal;
                             $this->slotstring[] = $elementaux;
                         }
                     }
                     // tant si tenia quantificador com si no, posem l'adjectiu
                     $adjectiu = $this->cmpAdjs[$this->CAdjassignedkey]->paraulafinal;
                     if ($masc && !$plural) {
                         $elementaux[0] = $adjectiu->propietats->masc;
                     } else {
                         if ($masc && $plural) {
                             $elementaux[0] = $adjectiu->propietats->mascpl;
                         } else {
                             if (!$masc && !$plural) {
                                 $elementaux[0] = $adjectiu->propietats->fem;
                             } else {
                                 $elementaux[0] = $adjectiu->propietats->fempl;
                             }
                         }
                     }
                     $elementaux[1] = $adjectiu;
                     $this->slotstring[] = $elementaux;
                     // si té element adjectiu coordinat
                     if ($adjectiu->paraulacoord != null) {
                         $paraulacoord = $adjectiu->paraulacoord;
                         // afegim la "i"
                         $elementaux[0] = "i";
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                         // afegim la paraula coordinada amb la mateixa concordància
                         if ($masc && !$plural) {
                             $elementaux[0] = $paraulacoord->propietats->masc;
                         } else {
                             if ($masc && $plural) {
                                 $elementaux[0] = $paraulacoord->propietats->mascpl;
                             } else {
                                 if (!$masc && !$plural) {
                                     $elementaux[0] = $paraulacoord->propietats->fem;
                                 } else {
                                     $elementaux[0] = $paraulacoord->propietats->fempl;
                                 }
                             }
                         }
                         $elementaux[1] = $paraulacoord;
                         $this->slotstring[] = $elementaux;
                     }
                 } else {
                     if ($this->NCassigned && !$this->CAdjassigned) {
                         $nouncmpslot = $this->complements[$this->NCassignedkey];
                         $nouncmp = $nouncmpslot->paraulafinal;
                         // afegim la preposició "de"
                         $elementaux[0] = $nouncmpslot->prep;
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                         // afegim el nom
                         $masccmp = true;
                         $pluralcmp = false;
                         // si el nom és femení
                         if ($nouncmp->propietats->mf == "fem") {
                             $masccmp = false;
                         }
                         // si el nom és plural
                         if ($nouncmp->propietats->singpl == "pl") {
                             $pluralcmp = true;
                         }
                         // si té modificadors de femení i l'accepta
                         if ($nouncmp->propietats->femeni != "NULL" && $nouncmp->fem) {
                             $masccmp = false;
                         }
                         // si té modificador de plural
                         if ($nouncmp->plural) {
                             $pluralcmp = true;
                         }
                         if ($pluralcmp) {
                             $elementaux[0] = $nouncmp->propietats->plural;
                         } else {
                             if ($masccmp && !$pluralcmp) {
                                 $elementaux[0] = $nouncmp->propietats->nomtext;
                             } else {
                                 if ($nouncmp->propietats->mf == "fem") {
                                     $elementaux[0] = $nouncmp->propietats->nomtext;
                                 } else {
                                     $elementaux[0] = $nouncmp->propietats->femeni;
                                 }
                             }
                         }
                         $elementaux[1] = $nouncmp;
                         // com que el nucli és un nom, afegim la informació extra
                         $elementaux[2] = true;
                         $elementaux[3] = $masccmp;
                         $elementaux[4] = $pluralcmp;
                         $elementaux[5] = false;
                         $elementaux[6] = true;
                         $elementaux[7] = $haspossessive;
                         $this->slotstring[] = $elementaux;
                         // si té element coordinat
                         if ($nouncmp->paraulacoord != null) {
                             $paraulacoord = $nouncmp->paraulacoord;
                             // afegim la "i"
                             $elementaux[0] = "i";
                             $elementaux[1] = null;
                             $this->slotstring[] = $elementaux;
                             // afegim la paraula coordinada amb la seva concordància
                             $masccmp = true;
                             $pluralcmp = false;
                             // si el nom és femení
                             if ($paraulacoord->propietats->mf == "fem") {
                                 $masccmp = false;
                             }
                             // si el nom és plural
                             if ($paraulacoord->propietats->singpl == "pl") {
                                 $pluralcmp = true;
                             }
                             // si té modificadors de femení i l'accepta
                             if ($paraulacoord->propietats->femeni != "NULL" && $paraulacoord->fem) {
                                 $masccmp = false;
                             }
                             // si té modificador de plural
                             if ($paraulacoord->plural) {
                                 $pluralcmp = true;
                             }
                             if ($pluralcmp) {
                                 $elementaux[0] = $paraulacoord->propietats->plural;
                             } else {
                                 if ($masccmp && !$pluralcmp) {
                                     $elementaux[0] = $paraulacoord->propietats->nomtext;
                                 } else {
                                     if ($paraulacoord->propietats->mf == "fem") {
                                         $elementaux[0] = $paraulacoord->propietats->nomtext;
                                     } else {
                                         $elementaux[0] = $paraulacoord->propietats->femeni;
                                     }
                                 }
                             }
                             $elementaux[1] = $paraulacoord;
                             // com que el nucli és un nom, afegim la informació extra
                             $elementaux[2] = true;
                             $elementaux[3] = $masccmp;
                             $elementaux[4] = $pluralcmp;
                             $elementaux[5] = false;
                             $elementaux[6] = true;
                             $elementaux[7] = $haspossessive;
                             $this->slotstring[] = $elementaux;
                         }
                     } else {
                         if ($this->NCassigned && $this->CAdjassigned) {
                             $nouncmpslot = $this->complements[$this->NCassignedkey];
                             $adjectiuslot = $this->cmpAdjs[$this->CAdjassignedkey];
                             $puntsFitAdjWithNucli = $adjectiuslot->puntsfinal;
                             // calculem els punts que tindria fent fit al complement
                             $CI =& get_instance();
                             $CI->load->library('Mymatching');
                             $matching = new Mymatching();
                             $classeadj = $adjectiuslot->paraulafinal->classes[$adjectiuslot->indexclassfinalword];
                             $numclassesnomcmp = count($nouncmpslot->paraulafinal->classes);
                             $puntsFitAdjWithCMP = 1000;
                             for ($j = 0; $j < $numclassesnomcmp; $j++) {
                                 $classenomaux = $nouncmpslot->paraulafinal->classes[$j];
                                 if ($matching->isSetKeyAdjNoun($classeadj) && $matching->isSetKeyNoun($classenomaux)) {
                                     $tipusx = $matching->adjNounFitKeys[$classeadj];
                                     $tipusy = $matching->nounsFitKeys[$classenomaux];
                                     if ($matching->adjNounFit[$tipusx][$tipusy] < $puntsFitAdjWithCMP) {
                                         $puntsFitAdjWithCMP = $matching->adjNounFit[$tipusx][$tipusy];
                                     }
                                 }
                             }
                             // nom - adjectiu
                             $distance = $nouncmpslot->paraulafinal->inputorder - $adjectiuslot->paraulafinal->inputorder;
                             // com més lluny i com menys fit facin, pitjor
                             $puntsFitAdjWithCMP = 7 - $puntsFitAdjWithCMP - abs($distance);
                             if ($distance == -1) {
                                 $puntsFitAdjWithCMP += 1;
                             }
                             // si fa millor fit al NUCLI
                             if ($puntsFitAdjWithNucli >= $puntsFitAdjWithCMP) {
                                 // insertem primer l'adjectiu
                                 // si l'adjectiu tenia un quantificador l'afegim
                                 if ($hasquantifieradj) {
                                     for ($i = 0; $i < count($quantifieradj); $i++) {
                                         // aquí els quantificadors tenen forma invariable
                                         $elementaux[0] = $quantifieradj[$i]->paraulafinal->propietats->masc;
                                         $elementaux[1] = $quantifieradj[$i]->paraulafinal;
                                         $this->slotstring[] = $elementaux;
                                     }
                                 }
                                 // tant si tenia quantificador com si no, posem l'adjectiu
                                 $adjectiu = $adjectiuslot->paraulafinal;
                                 if ($masc && !$plural) {
                                     $elementaux[0] = $adjectiu->propietats->masc;
                                 } else {
                                     if ($masc && $plural) {
                                         $elementaux[0] = $adjectiu->propietats->mascpl;
                                     } else {
                                         if (!$masc && !$plural) {
                                             $elementaux[0] = $adjectiu->propietats->fem;
                                         } else {
                                             $elementaux[0] = $adjectiu->propietats->fempl;
                                         }
                                     }
                                 }
                                 $elementaux[1] = $adjectiu;
                                 $this->slotstring[] = $elementaux;
                                 // si té element adjectiu coordinat l'afegim
                                 if ($adjectiu->paraulacoord != null) {
                                     $paraulacoord = $adjectiu->paraulacoord;
                                     // afegim la "i"
                                     $elementaux[0] = "i";
                                     $elementaux[1] = null;
                                     $this->slotstring[] = $elementaux;
                                     // afegim la paraula coordinada amb la mateixa concordància
                                     if ($masc && !$plural) {
                                         $elementaux[0] = $paraulacoord->propietats->masc;
                                     } else {
                                         if ($masc && $plural) {
                                             $elementaux[0] = $paraulacoord->propietats->mascpl;
                                         } else {
                                             if (!$masc && !$plural) {
                                                 $elementaux[0] = $paraulacoord->propietats->fem;
                                             } else {
                                                 $elementaux[0] = $paraulacoord->propietats->fempl;
                                             }
                                         }
                                     }
                                     $elementaux[1] = $paraulacoord;
                                     $this->slotstring[] = $elementaux;
                                 }
                                 // després insertem el nom que fa de complement
                                 $nouncmp = $nouncmpslot->paraulafinal;
                                 // afegim la preposició "de"
                                 $elementaux[0] = $nouncmpslot->prep;
                                 $elementaux[1] = null;
                                 $this->slotstring[] = $elementaux;
                                 // afegim el nom
                                 $masccmp = true;
                                 $pluralcmp = false;
                                 // si el nom és femení
                                 if ($nouncmp->propietats->mf == "fem") {
                                     $masccmp = false;
                                 }
                                 // si el nom és plural
                                 if ($nouncmp->propietats->singpl == "pl") {
                                     $pluralcmp = true;
                                 }
                                 // si té modificadors de femení i l'accepta
                                 if ($nouncmp->propietats->femeni != "NULL" && $nucli->fem) {
                                     $masccmp = false;
                                 }
                                 // si té modificador de plural
                                 if ($nouncmp->plural) {
                                     $pluralcmp = true;
                                 }
                                 if ($pluralcmp) {
                                     $elementaux[0] = $nouncmp->propietats->plural;
                                 } else {
                                     if ($masccmp && !$pluralcmp) {
                                         $elementaux[0] = $nouncmp->propietats->nomtext;
                                     } else {
                                         if ($nouncmp->propietats->mf == "fem") {
                                             $elementaux[0] = $nouncmp->propietats->nomtext;
                                         } else {
                                             $elementaux[0] = $nouncmp->propietats->femeni;
                                         }
                                     }
                                 }
                                 $elementaux[1] = $nouncmp;
                                 // com que el nucli és un nom, afegim la informació extra
                                 $elementaux[2] = true;
                                 $elementaux[3] = $masccmp;
                                 $elementaux[4] = $pluralcmp;
                                 $elementaux[5] = false;
                                 $elementaux[6] = true;
                                 $elementaux[7] = $haspossessive;
                                 $this->slotstring[] = $elementaux;
                                 // si té element coordinat
                                 if ($nouncmp->paraulacoord != null) {
                                     $paraulacoord = $nouncmp->paraulacoord;
                                     // afegim la "i"
                                     $elementaux[0] = "i";
                                     $elementaux[1] = null;
                                     $this->slotstring[] = $elementaux;
                                     // afegim la paraula coordinada amb la seva concordància
                                     $masccmp = true;
                                     $pluralcmp = false;
                                     // si el nom és femení
                                     if ($paraulacoord->propietats->mf == "fem") {
                                         $masccmp = false;
                                     }
                                     // si el nom és plural
                                     if ($paraulacoord->propietats->singpl == "pl") {
                                         $pluralcmp = true;
                                     }
                                     // si té modificadors de femení i l'accepta
                                     if ($paraulacoord->propietats->femeni != "NULL" && $paraulacoord->fem) {
                                         $masccmp = false;
                                     }
                                     // si té modificador de plural
                                     if ($paraulacoord->plural) {
                                         $pluralcmp = true;
                                     }
                                     if ($pluralcmp) {
                                         $elementaux[0] = $paraulacoord->propietats->plural;
                                     } else {
                                         if ($masccmp && !$pluralcmp) {
                                             $elementaux[0] = $paraulacoord->propietats->nomtext;
                                         } else {
                                             if ($paraulacoord->propietats->mf == "fem") {
                                                 $elementaux[0] = $paraulacoord->propietats->nomtext;
                                             } else {
                                                 $elementaux[0] = $paraulacoord->propietats->femeni;
                                             }
                                         }
                                     }
                                     $elementaux[1] = $paraulacoord;
                                     // com que el nucli és un nom, afegim la informació extra
                                     $elementaux[2] = true;
                                     $elementaux[3] = $masccmp;
                                     $elementaux[4] = $pluralcmp;
                                     $elementaux[5] = false;
                                     $elementaux[6] = true;
                                     $elementaux[7] = $haspossessive;
                                     $this->slotstring[] = $elementaux;
                                 }
                             } else {
                                 // primer insertem el nom que fa de complement
                                 $nouncmp = $nouncmpslot->paraulafinal;
                                 // afegim la preposició "de"
                                 $elementaux[0] = $nouncmpslot->prep;
                                 $elementaux[1] = null;
                                 $this->slotstring[] = $elementaux;
                                 // afegim el nom
                                 $masccmp = true;
                                 $pluralcmp = false;
                                 // si el nom és femení
                                 if ($nouncmp->propietats->mf == "fem") {
                                     $masccmp = false;
                                 }
                                 // si el nom és plural
                                 if ($nouncmp->propietats->singpl == "pl") {
                                     $pluralcmp = true;
                                 }
                                 // si té modificadors de femení i l'accepta
                                 if ($nouncmp->propietats->femeni != "NULL" && $nucli->fem) {
                                     $masccmp = false;
                                 }
                                 // si té modificador de plural
                                 if ($nouncmp->plural) {
                                     $pluralcmp = true;
                                 }
                                 if ($pluralcmp) {
                                     $elementaux[0] = $nouncmp->propietats->plural;
                                 } else {
                                     if ($masccmp && !$pluralcmp) {
                                         $elementaux[0] = $nouncmp->propietats->nomtext;
                                     } else {
                                         if ($nouncmp->propietats->mf == "fem") {
                                             $elementaux[0] = $nouncmp->propietats->nomtext;
                                         } else {
                                             $elementaux[0] = $nouncmp->propietats->femeni;
                                         }
                                     }
                                 }
                                 $elementaux[1] = $nouncmp;
                                 // com que el nucli és un nom, afegim la informació extra
                                 $elementaux[2] = true;
                                 $elementaux[3] = $masccmp;
                                 $elementaux[4] = $pluralcmp;
                                 $elementaux[5] = false;
                                 $elementaux[6] = true;
                                 $elementaux[7] = $haspossessive;
                                 $this->slotstring[] = $elementaux;
                                 // si té element coordinat
                                 if ($nouncmp->paraulacoord != null) {
                                     $paraulacoord = $nouncmp->paraulacoord;
                                     // afegim la "i"
                                     $elementaux[0] = "i";
                                     $elementaux[1] = null;
                                     $this->slotstring[] = $elementaux;
                                     // afegim la paraula coordinada amb la seva concordància
                                     $masccmp = true;
                                     $pluralcmp = false;
                                     // si el nom és femení
                                     if ($paraulacoord->propietats->mf == "fem") {
                                         $masccmp = false;
                                     }
                                     // si el nom és plural
                                     if ($paraulacoord->propietats->singpl == "pl") {
                                         $pluralcmp = true;
                                     }
                                     // si té modificadors de femení i l'accepta
                                     if ($paraulacoord->propietats->femeni != "NULL" && $paraulacoord->fem) {
                                         $masccmp = false;
                                     }
                                     // si té modificador de plural
                                     if ($paraulacoord->plural) {
                                         $pluralcmp = true;
                                     }
                                     if ($pluralcmp) {
                                         $elementaux[0] = $paraulacoord->propietats->plural;
                                     } else {
                                         if ($masccmp && !$pluralcmp) {
                                             $elementaux[0] = $paraulacoord->propietats->nomtext;
                                         } else {
                                             if ($paraulacoord->propietats->mf == "fem") {
                                                 $elementaux[0] = $paraulacoord->propietats->nomtext;
                                             } else {
                                                 $elementaux[0] = $paraulacoord->propietats->femeni;
                                             }
                                         }
                                     }
                                     $elementaux[1] = $paraulacoord;
                                     // com que el nucli és un nom, afegim la informació extra
                                     $elementaux[2] = true;
                                     $elementaux[3] = $masccmp;
                                     $elementaux[4] = $pluralcmp;
                                     $elementaux[5] = false;
                                     $elementaux[6] = true;
                                     $elementaux[7] = $haspossessive;
                                     $this->slotstring[] = $elementaux;
                                 }
                                 // després afegim l'adjectiu
                                 // si l'adjectiu tenia un quantificador l'afegim
                                 if ($hasquantifieradj) {
                                     for ($i = 0; $i < count($quantifieradj); $i++) {
                                         // aquí els quantificadors tenen forma invariable
                                         $elementaux[0] = $quantifieradj[$i]->paraulafinal->propietats->masc;
                                         $elementaux[1] = $quantifieradj[$i]->paraulafinal;
                                         $this->slotstring[] = $elementaux;
                                     }
                                 }
                                 // tant si tenia quantificador com si no, posem l'adjectiu que concorda amb el complement
                                 $adjectiu = $adjectiuslot->paraulafinal;
                                 if ($masccmp && !$pluralcmp) {
                                     $elementaux[0] = $adjectiu->propietats->masc;
                                 } else {
                                     if ($masccmp && $pluralcmp) {
                                         $elementaux[0] = $adjectiu->propietats->mascpl;
                                     } else {
                                         if (!$masccmp && !$pluralcmp) {
                                             $elementaux[0] = $adjectiu->propietats->fem;
                                         } else {
                                             $elementaux[0] = $adjectiu->propietats->fempl;
                                         }
                                     }
                                 }
                                 $elementaux[1] = $adjectiu;
                                 $this->slotstring[] = $elementaux;
                                 // si té element adjectiu coordinat l'afegim
                                 if ($adjectiu->paraulacoord != null) {
                                     $paraulacoord = $adjectiu->paraulacoord;
                                     // afegim la "i"
                                     $elementaux[0] = "i";
                                     $elementaux[1] = null;
                                     $this->slotstring[] = $elementaux;
                                     // afegim la paraula coordinada amb la mateixa concordància
                                     if ($masccmp && !$pluralcmp) {
                                         $elementaux[0] = $paraulacoord->propietats->masc;
                                     } else {
                                         if ($masccmp && $pluralcmp) {
                                             $elementaux[0] = $paraulacoord->propietats->mascpl;
                                         } else {
                                             if (!$masccmp && !$pluralcmp) {
                                                 $elementaux[0] = $paraulacoord->propietats->fem;
                                             } else {
                                                 $elementaux[0] = $paraulacoord->propietats->fempl;
                                             }
                                         }
                                     }
                                     $elementaux[1] = $paraulacoord;
                                     $this->slotstring[] = $elementaux;
                                 }
                             }
                         }
                     }
                 }
                 // Fi si té complement de nom i adjectiu
                 break;
             case "adj":
                 // PREPOSICIÓ
                 // posem la preposició, si n'hi ha
                 if ($this->prep != null) {
                     $elementaux[0] = $this->prep;
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                 }
                 // QUANTIFICADOR
                 // si l'adjectiu té un modificador, que només pot ser un quantificador
                 if ($this->CModassigned) {
                     for ($i = 0; $i < count($this->CModassignedkey); $i++) {
                         $quantifierslot = $this->cmpMod[$this->CModassignedkey[$i]];
                         // el quantificador és invariable
                         $elementaux[0] = $quantifierslot->paraulafinal->propietats->masc;
                         $elementaux[1] = $quantifierslot->paraulafinal;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 // POSEM L'ADJECTIU, HA DE CONCORDAR AMB EL SUBJECTE, ja que l'adjectiu
                 // només té slots per fer de nucli en verbs copulatius o verbless patterns
                 // tenint en compte els modificadors de subjecte
                 // si estan definits, tenen preferència els modificadors de l'adjectiu
                 // Si és d'un slot de MANNER no ha de concordar
                 // si és de manera posem l'adjectiu en masculí
                 if ($this->category == "Manner") {
                     $elementaux[0] = $nucli->text;
                     $elementaux[1] = $nucli;
                     $elementaux[2] = false;
                     $this->slotstring[] = $elementaux;
                     // si té element adjectiu coordinat
                     if ($nucli->paraulacoord != null) {
                         $paraulacoord = $nucli->paraulacoord;
                         // afegim la "i"
                         $elementaux[0] = "i";
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                         // afegim la paraula coordinada amb la mateixa concordància
                         $elementaux[0] = $paraulacoord->text;
                         $elementaux[1] = $paraulacoord;
                         $this->slotstring[] = $elementaux;
                     }
                 } else {
                     // posem l'adjectiu que concordi
                     if (!$subjmasc && $subjpl) {
                         $elementaux[0] = $nucli->propietats->fempl;
                     } else {
                         if (!$subjmasc && !$subjpl) {
                             $elementaux[0] = $nucli->propietats->fem;
                         } else {
                             if ($subjmasc && $subjpl) {
                                 $elementaux[0] = $nucli->propietats->mascpl;
                             } else {
                                 $elementaux[0] = $nucli->propietats->masc;
                             }
                         }
                     }
                     // sobreescrivim si l'adjectiu tenia modificadors activats
                     // ho fem perquè si és verbless no té subjecte
                     if ($nucli->fem && $nucli->plural) {
                         $elementaux[0] = $nucli->propietats->fempl;
                     } else {
                         if ($nucli->fem) {
                             $elementaux[0] = $nucli->propietats->fem;
                         } else {
                             if ($nucli->plural) {
                                 $elementaux[0] = $nucli->propietats->mascpl;
                             }
                         }
                     }
                     $elementaux[1] = $nucli;
                     $elementaux[2] = false;
                     $this->slotstring[] = $elementaux;
                     // si té element adjectiu coordinat
                     if ($nucli->paraulacoord != null) {
                         $paraulacoord = $nucli->paraulacoord;
                         // afegim la "i"
                         $elementaux[0] = "i";
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                         // afegim la paraula coordinada amb la mateixa concordància
                         if (!$subjmasc && $subjpl) {
                             $elementaux[0] = $paraulacoord->propietats->fempl;
                         } else {
                             if (!$subjmasc && !$subjpl) {
                                 $elementaux[0] = $paraulacoord->propietats->fem;
                             } else {
                                 if ($subjmasc && $subjpl) {
                                     $elementaux[0] = $paraulacoord->propietats->mascpl;
                                 } else {
                                     $elementaux[0] = $paraulacoord->propietats->masc;
                                 }
                             }
                         }
                         // sobreescrivim si l'adjectiu tenia modificadors activats
                         // ho fem perquè si és verbless no té subjecte
                         if ($nucli->fem && $nucli->plural) {
                             $elementaux[0] = $paraulacoord->propietats->fempl;
                         } else {
                             if ($nucli->fem) {
                                 $elementaux[0] = $paraulacoord->propietats->fem;
                             } else {
                                 if ($nucli->plural) {
                                     $elementaux[0] = $paraulacoord->propietats->mascpl;
                                 }
                             }
                         }
                         $elementaux[1] = $paraulacoord;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 break;
             case "verb":
                 // MODIFICADOR, NOMÉS ELS QUE NO VAN A L'INICI DE LA FRASE
                 // més endavant, si hi ha pronoms febles amb el verb, l'ordre potser es canviarà
                 // NO FEM RES: HO FARAN EL CONJUGADOR I EL CLEANER POSARÀ ELS MODIFICADORS QUE FALTIN
                 // A ON CALGUI DE LA FRASE
                 /* if ($this->CModassigned) {
                                         
                                         $CI = &get_instance();
                                         $CI->load->library('Mymatching');
                                         
                                         $matching = new Mymatching();
                                         
                                         for ($i=0; $i<count($this->CModassignedkey); $i++) {
                                             
                                             $quantifier = $this->cmpMod[$this->CModassignedkey[$i]]->paraulafinal;
                                             
                                             // si és dels que va entre subjecte i verb
                                             if ($matching->isModAfterSubj($quantifier->text)) {
                                                 $elementaux[0] = $quantifier->text;
                                                 $elementaux[1] = $quantifier;
                 
                                                 $this->slotstring[] = $elementaux;
                                             }
                                         }                        
                                     }
                                     
                                     // POSEM EL VERB, de moment en infinitiu
                                     $elementaux[0] = $nucli->text;
                                     $elementaux[1] = $nucli;
                                     $elementaux[2] = false;
                                     
                                     $this->slotstring[] = $elementaux; */
                 break;
             case "modifier":
                 // PREPOSICIÓ
                 // posem la preposició, si n'hi ha
                 if ($this->prep != null) {
                     $elementaux[0] = $this->prep;
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                 }
                 // NUCLI -> que és un modificador
                 $elementaux[0] = $nucli->text;
                 $elementaux[1] = $nucli;
                 $elementaux[2] = false;
                 $this->slotstring[] = $elementaux;
                 // QUANTIFICADORS, si n'hi ha
                 if ($this->CModassigned) {
                     for ($i = 0; $i < count($this->CModassignedkey); $i++) {
                         $quantifier = $this->cmpMod[$this->CModassignedkey[$i]]->paraulafinal;
                         $elementaux[0] = $quantifier->text;
                         $elementaux[1] = $quantifier;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 break;
             case "adv":
                 // PREPOSICIÓ
                 // posem la preposició, si n'hi ha
                 if ($this->prep != null) {
                     $elementaux[0] = $this->prep;
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                 }
                 // QUANTIFICADORS, si n'hi ha
                 if ($this->CModassigned) {
                     for ($i = 0; $i < count($this->CModassignedkey); $i++) {
                         $quantifier = $this->cmpMod[$this->CModassignedkey[$i]]->paraulafinal;
                         $elementaux[0] = $quantifier->text;
                         $elementaux[1] = $quantifier;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 // NUCLI -> que és un adverbi
                 $elementaux[0] = $nucli->text;
                 $elementaux[1] = $nucli;
                 $elementaux[2] = false;
                 $this->slotstring[] = $elementaux;
                 break;
             case "questpart":
                 // Va sense preposició
                 // NUCLI -> que és una partícula de pregunta
                 $elementaux[0] = $nucli->text;
                 $elementaux[1] = $nucli;
                 $elementaux[2] = false;
                 $this->slotstring[] = $elementaux;
                 break;
                 // Per qualsevol altra mena de nucli
                 // posar primer la preposició, si n'hi ha, i després el valor per defecte
             // Per qualsevol altra mena de nucli
             // posar primer la preposició, si n'hi ha, i després el valor per defecte
             default:
                 // PREPOSICIÓ
                 // posem la preposició, si n'hi ha
                 if ($this->prep != null) {
                     $elementaux[0] = $this->prep;
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                 }
                 // NUCLI
                 $elementaux[0] = $nucli->text;
                 $elementaux[1] = $nucli;
                 $elementaux[2] = false;
                 $this->slotstring[] = $elementaux;
                 // si té element element coordinat
                 if ($nucli->paraulacoord != null) {
                     $paraulacoord = $nucli->paraulacoord;
                     // afegim la "i"
                     $elementaux[0] = "i";
                     $elementaux[1] = null;
                     $this->slotstring[] = $elementaux;
                     // afegim la paraula coordinada
                     $elementaux[0] = $paraulacoord->text;
                     $elementaux[1] = $paraulacoord;
                     $this->slotstring[] = $elementaux;
                 }
                 break;
         }
     } else {
         // PREPOSICIÓ
         // posem la preposició, si n'hi ha
         if ($this->prep != null) {
             $elementaux[0] = $this->prep;
             $elementaux[1] = null;
             $this->slotstring[] = $elementaux;
         }
         $elementaux[0] = $this->defvalue;
         $elementaux[1] = null;
         $elementaux[2] = false;
         $this->slotstring[] = $elementaux;
     }
     // print_r($this->slotstring); echo "<br /><br />";
 }