Ejemplo n.º 1
0
 public function ordenarSlotES($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, excepte si el nom és el nucli d'un slot de LocAt i
                 // el complementa un adverbi de lloc. Per evitar ex: "Está en debajo la mesa."
                 if ($this->prep != null) {
                     if (!($this->category == "LocAt" && $this->CAdvassigned && $this->cmpAdvs[$this->CAdvassignedkey]->paraulafinal->isClass("lloc"))) {
                         $elementaux[0] = $this->prep;
                         $elementaux[1] = null;
                         $this->slotstring[] = $elementaux;
                     }
                 }
                 // Posem, si cal, la preposició "en" o "por", davant dels slots de temps
                 if ($this->category == "Time") {
                     $CI =& get_instance();
                     $CI->load->library('Mymatching');
                     $matching = new Mymatching();
                     if ($matching->isTimePrepES($nucli->text)) {
                         $elementaux[0] = $matching->tempsPrepES[$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->isClass("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) {
                             // excepció per ex: El primer coche llega tarde.
                             if ($adjectiu->propietats->masc == "primero") {
                                 $elementaux[0] = "primer";
                             } else {
                                 $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] = "y";
                     $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
                             // excepte "mucho" que pasa a ser "muy"
                             if ($quantifieradj[$i]->paraulafinal->propietats->masc == "mucho") {
                                 $elementaux[0] = "muy";
                             } else {
                                 $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] = "y";
                         $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] = "y";
                             $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
                                         // excepte "mucho" que pasa a ser "muy"
                                         if ($quantifieradj[$i]->paraulafinal->propietats->masc == "mucho") {
                                             $elementaux[0] = "muy";
                                         } else {
                                             $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] = "y";
                                     $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] = "y";
                                     $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
                                         // excepte "mucho" que pasa a ser "muy"
                                         if ($quantifieradj[$i]->paraulafinal->propietats->masc == "mucho") {
                                             $elementaux[0] = "muy";
                                         } else {
                                             $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] = "y";
                                     $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
                         // excepte "mucho" que pasa a ser "muy"
                         if ($quantifierslot->paraulafinal->propietats->masc == "mucho") {
                             $elementaux[0] = "muy";
                         } else {
                             $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] = "y";
                         $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] = "y";
                         $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;
                         // Excepció: Ex: "Muy arriba".
                         if ($quantifier->text == "mucho") {
                             $elementaux[0] = "muy";
                         } else {
                             $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] = "y";
                     $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 />";
 }
Ejemplo n.º 2
0
 public function launchCleanerES($tipusfrase)
 {
     $CI =& get_instance();
     $CI->load->library('Mymatching');
     $CI->load->library('Myslot');
     $matching = new Mymatching();
     // TREURE ELS "YO" I "TÚ" i agafar info dels verbs per després
     $keymainverb = null;
     $indexmainverb = -1;
     $indexsecondaryverb = -1;
     $indextheme1 = -1;
     $indextheme2 = -1;
     $indexdesire = -1;
     $indexpermission = -1;
     $mainverbinf = false;
     $secondaryverbinf = false;
     $numslots = count($this->ordrefrase);
     for ($i = 0; $i < $numslots; $i++) {
         $slotaux = $this->slotarray[$this->ordrefrase[$i]];
         if ($slotaux->category == "Main Verb") {
             $indexmainverb = $i;
             if ($slotaux->isInfinitive) {
                 $mainverbinf = true;
             }
             $keymainverb = $this->ordrefrase[$i];
             // agafem el key del main verb pel pas dels modificadors
         } else {
             if ($slotaux->category == "Secondary Verb") {
                 $indexsecondaryverb = $i;
                 if ($slotaux->isInfinitive) {
                     $secondaryverbinf = true;
                 }
             } else {
                 if ($slotaux->category == "Theme") {
                     if ($slotaux->level == 1 && $slotaux->defvalueused && $slotaux->defvalue == "lo") {
                         $indextheme1 = $i;
                     } else {
                         if ($slotaux->level == 2 && $slotaux->defvalueused && $slotaux->defvalue == "lo") {
                             $indextheme2 = $i;
                         }
                     }
                 } else {
                     if ($slotaux->category == "Desire") {
                         $indexdesire = $i;
                     } else {
                         if ($slotaux->category == "Permission") {
                             $indexpermission = $i;
                         } else {
                             if ($slotaux->category == "Subject") {
                                 if ($slotaux->defvalueused) {
                                     // esborrem el tú o yo
                                     if ($slotaux->defvalue == '1' || $slotaux->defvalue == '2') {
                                         $slotaux->slotstring = array();
                                     }
                                 } else {
                                     // esborrem el tú o el yo
                                     if ($slotaux->paraulafinal->text == "yo" || $slotaux->paraulafinal->text == "tú") {
                                         $slotaux->slotstring = array();
                                     }
                                     // esborrem el subjecte del verb secundari, si és el mateix que el del principal
                                     if ($slotaux->level == 2 && $this->subjsiguals) {
                                         $slotaux->slotstring = array();
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $indexreceiver1 = -1;
     $indexreceiver2 = -1;
     $receiver1pron = false;
     $receiver2pron = false;
     // si és una ordre els pronoms aniran darrere el verb i tindran una altra forma
     $ordre = $tipusfrase == "ordre";
     $elementaux = array();
     // TRANSFORMAR ELS PRONOMS A FEBLES DEL RECEIVER
     for ($i = 0; $i < $numslots; $i++) {
         $slotaux = $this->slotarray[$this->ordrefrase[$i]];
         if ($slotaux->category == "Receiver") {
             // si hi ha valors per defecte
             if ($slotaux->defvalueused) {
                 if ($slotaux->defvalue == "mí") {
                     // posar "me" en tots els casos
                     if ($slotaux->level == 1) {
                         $slotaux->slotstring = array();
                         $elementaux[0] = "me";
                         $elementaux[1] = null;
                         $slotaux->slotstring[] = $elementaux;
                         $indexreceiver1 = $i;
                         $receiver1pron = true;
                     } else {
                         if ($slotaux->level == 2) {
                             $slotaux->slotstring = array();
                             $elementaux[0] = "me";
                             $elementaux[1] = null;
                             $slotaux->slotstring[] = $elementaux;
                             $indexreceiver2 = $i;
                             $receiver2pron = true;
                         }
                     }
                 } else {
                     if ($slotaux->defvalue == "tú") {
                         // posar "te"
                         if ($slotaux->level == 1) {
                             $slotaux->slotstring = array();
                             $elementaux[0] = "te";
                             $elementaux[1] = null;
                             $slotaux->slotstring[] = $elementaux;
                             $indexreceiver1 = $i;
                             $receiver1pron = true;
                         } else {
                             if ($slotaux->level == 2) {
                                 $slotaux->slotstring = array();
                                 $elementaux[0] = "te";
                                 $elementaux[1] = null;
                                 $slotaux->slotstring[] = $elementaux;
                                 $indexreceiver2 = $i;
                                 $receiver2pron = true;
                             }
                         }
                     }
                 }
             } else {
                 if ($slotaux->level == 1 && $mainverbinf || $slotaux->level == 1 && $ordre && !$this->frasenegativa) {
                     // si són pronoms personals, posem la forma correcta pels receivers de darrere el verb
                     if ($matching->isPronomPersES($slotaux->paraulafinal->text)) {
                         $slotaux->slotstring = array();
                         $elementaux[0] = $matching->pronomsPersonalsReceiverES[$slotaux->paraulafinal->text];
                         $elementaux[1] = null;
                         $slotaux->slotstring[] = $elementaux;
                         $indexreceiver1 = $i;
                         $receiver1pron = true;
                     }
                 } else {
                     if ($slotaux->level == 1) {
                         // si són pronoms personals, posem la forma correcta pels receivers d'abans del verb
                         if ($matching->isPronomPersES($slotaux->paraulafinal->text)) {
                             $slotaux->slotstring = array();
                             $elementaux[0] = $matching->pronomsPersonalsReceiverES[$slotaux->paraulafinal->text];
                             $elementaux[1] = null;
                             $slotaux->slotstring[] = $elementaux;
                             $indexreceiver1 = $i;
                             $receiver1pron = true;
                         }
                     } else {
                         if ($slotaux->level == 2 && $secondaryverbinf) {
                             // si són pronoms personals, posem la forma correcta pels receivers de darrere el verb
                             if ($matching->isPronomPersES($slotaux->paraulafinal->text)) {
                                 $slotaux->slotstring = array();
                                 $elementaux[0] = $matching->pronomsPersonalsReceiverES[$slotaux->paraulafinal->text];
                                 $elementaux[1] = null;
                                 $slotaux->slotstring[] = $elementaux;
                                 $indexreceiver2 = $i;
                                 $receiver2pron = true;
                             }
                         } else {
                             if ($slotaux->level == 2) {
                                 // si són pronoms personals, posem la forma correcta pels receivers d'abans del verb
                                 if ($matching->isPronomPersES($slotaux->paraulafinal->text)) {
                                     $slotaux->slotstring = array();
                                     $elementaux[0] = $matching->pronomsPersonalsReceiverES[$slotaux->paraulafinal->text];
                                     $elementaux[1] = null;
                                     $slotaux->slotstring[] = $elementaux;
                                     $indexreceiver2 = $i;
                                     $receiver2pron = true;
                                 }
                             }
                         }
                     }
                 }
             }
         }
         // Fi if slotaux = receiver
     }
     // Fi for transformar pronoms
     /*
      * ESTIC AQUÍ DEL CLEANER EN CASTELLÀ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      */
     // ORDRE DELS PRONOMS
     // amb tota la info recollida, movem els pronoms de lloc si cal
     // pel main verb si és infinitiu (els d'ordre ja són a darrere)
     if ($mainverbinf) {
         // el theme 1
         if ($indextheme1 != -1) {
             $temp = $this->ordrefrase[$indextheme1];
             // esborrem el theme 1 per moure'l de lloc
             array_splice($this->ordrefrase, $indextheme1, 1);
             // l'insertem just després del main verb
             array_splice($this->ordrefrase, $indexmainverb, 0, $temp);
             $indextheme1 = $indexmainverb;
             $indexmainverb -= 1;
         }
         // el receiver 1
         if ($indexreceiver1 != -1) {
             $temp = $this->ordrefrase[$indexreceiver1];
             // esborrem el receiver 1 per moure'l de lloc
             array_splice($this->ordrefrase, $indexreceiver1, 1);
             // l'insertem just després del main verb
             array_splice($this->ordrefrase, $indexmainverb, 0, $temp);
             $indexreceiver1 = $indexmainverb;
             $indexmainverb -= 1;
         }
     }
     // pel verb secundari si és infinitiu
     if ($secondaryverbinf) {
         // el theme 2
         if ($indextheme2 != -1) {
             $temp = $this->ordrefrase[$indextheme2];
             // esborrem el theme 2 per moure'l de lloc
             array_splice($this->ordrefrase, $indextheme2, 1);
             // l'insertem just després del main verb
             array_splice($this->ordrefrase, $indexsecondaryverb, 0, $temp);
             $indextheme2 = $indexsecondaryverb;
             $indexsecondaryverb -= 1;
         }
         // el receiver 2
         if ($indexreceiver2 != -1) {
             $temp = $this->ordrefrase[$indexreceiver2];
             // esborrem el receiver 2 per moure'l de lloc
             array_splice($this->ordrefrase, $indexreceiver2, 1);
             // l'insertem just després del main verb
             array_splice($this->ordrefrase, $indexsecondaryverb, 0, $temp);
             $indexreceiver2 = $indexsecondaryverb;
             $indexsecondaryverb -= 1;
         }
     }
     // ORDRE MODIFICADORS DE FRASE QUE NO VAN AL PRINCIPI: "NO", "TAMBÉ"
     // agafem els modificadors, si n'hi ha
     $slotmainverb = $this->slotarray[$keymainverb];
     $counter = 0;
     $indexsmodifs = array();
     $janegatiu = false;
     if ($slotmainverb->CModassigned) {
         for ($i = 0; $i < count($slotmainverb->cmpMod); $i++) {
             $keymodifaux = $slotmainverb->CModassignedkey[$i];
             $slotmodifaux = $slotmainverb->cmpMod[$keymodifaux];
             // si és del grup que va darrere el subjecte (ex: no, también)
             if ($matching->isModAfterSubjES($slotmodifaux->paraulafinal->text)) {
                 // indiquem, que si la frase era negativa, ja no caldrà afegir el no
                 if ($slotmodifaux->paraulafinal->text == "no") {
                     $janegatiu = true;
                 }
                 // Creem un slot, el posem a slotarray i de moment al final d'ordrefrase
                 $counter += 1;
                 $newslotmodif = new Myslot();
                 $newslotmodif->category = "Modifier " . $counter;
                 $newslotmodif->grade = "opt";
                 $newslotmodif->type = "modif";
                 $newslotmodif->full = true;
                 $newslotmodif->paraulafinal = $slotmodifaux->paraulafinal;
                 $elementaux = array();
                 $elementaux[0] = $slotmodifaux->paraulafinal->text;
                 $elementaux[1] = $slotmodifaux->paraulafinal;
                 $newslotmodif->slotstring[] = $elementaux;
                 $newslotmodif->puntsfinal = 7;
                 $this->slotarray["Modifier " . $counter] = $newslotmodif;
                 $this->ordrefrase[] = "Modifier " . $counter;
                 $indexsmodifs[] = $numslots;
             }
         }
     }
     // afegim un slot amb el no si la frase era negativa i no l'hem afegit ja
     if ($this->frasenegativa && !$janegatiu) {
         // Creem un slot, el posem a slotarray i de moment al final d'ordrefrase
         $counter += 1;
         $newslotmodif = new Myslot();
         $newslotmodif->category = "Modifier " . $counter;
         $newslotmodif->grade = "opt";
         $newslotmodif->type = "modif";
         $newslotmodif->full = true;
         $elementaux = array();
         $elementaux[0] = "no";
         $elementaux[1] = null;
         $newslotmodif->slotstring[] = $elementaux;
         $newslotmodif->puntsfinal = 7;
         $this->slotarray["Modifier " . $counter] = $newslotmodif;
         $this->ordrefrase[] = "Modifier " . $counter;
         $indexsmodifs[] = $numslots;
     }
     // si hem trobat algun d'aquests slots, els col·loquem al lloc on toqui
     if ($counter > 0) {
         for ($i = 0; $i < count($indexsmodifs); $i++) {
             $indexmodifaux = $indexsmodifs[$i];
             // si hi ha un verb de desig, posar-los abans, amb els de permís van darrere del permís
             if ($indexdesire != -1) {
                 $indexaux = $indexdesire;
                 $temp = $this->ordrefrase[$indexmodifaux];
                 // esborrem el modif per moure'l de lloc
                 array_splice($this->ordrefrase, $indexmodifaux, 1);
                 // l'insertem just abans del desig
                 array_splice($this->ordrefrase, $indexaux, 0, $temp);
             } else {
                 if (!$mainverbinf && (!$ordre || $this->frasenegativa)) {
                     // si hi ha receiver, que sempre va abans del theme en versió pronominal
                     // el posem abans del receiver
                     if ($receiver1pron) {
                         $temp = $this->ordrefrase[$indexmodifaux];
                         // esborrem el modif per moure'l de lloc
                         array_splice($this->ordrefrase, $indexmodifaux, 1);
                         // l'insertem just abans del receiver
                         array_splice($this->ordrefrase, $indexreceiver1, 0, $temp);
                     } else {
                         if ($indextheme1 != -1) {
                             $temp = $this->ordrefrase[$indexmodifaux];
                             // esborrem el modif per moure'l de lloc
                             array_splice($this->ordrefrase, $indexmodifaux, 1);
                             // l'insertem just abans del theme
                             array_splice($this->ordrefrase, $indextheme1, 0, $temp);
                         } else {
                             $temp = $this->ordrefrase[$indexmodifaux];
                             // esborrem el modif per moure'l de lloc
                             array_splice($this->ordrefrase, $indexmodifaux, 1);
                             // l'insertem just abans del mainverb
                             array_splice($this->ordrefrase, $indexmainverb, 0, $temp);
                         }
                     }
                 } else {
                     $temp = $this->ordrefrase[$indexmodifaux];
                     // esborrem el modif per moure'l de lloc
                     array_splice($this->ordrefrase, $indexmodifaux, 1);
                     // l'insertem just abans del mainverb
                     array_splice($this->ordrefrase, $indexmainverb, 0, $temp);
                 }
             }
         }
     }
     // Fi si hi ha algun slot de modificador d'aquesta mena
     // AJUNTAR PREPS+ARTS / PRONOMS FEBLES I APÒSTROFS
     $frasebruta = $this->frasefinal . $this->printFraseFinalSlotString();
     // perps + arts
     $patterns[0] = '/[[:space:]][d][e][[:space:]][e][l][[:space:]]/u';
     $patterns[1] = '/[[:space:]][a][[:space:]][e][l][[:space:]]/u';
     // verb + pronoms de theme a darrere
     $patterns[2] = '/(?<=@VERBUM)[[:space:]]lo[[:space:]]/u';
     // verb + pronoms de receiver a darrere
     $patterns[3] = '/(?<=@VERBUM)[[:space:]]me[[:space:]]/u';
     $patterns[4] = '/(?<=@VERBUM)[[:space:]]te[[:space:]]/u';
     $patterns[5] = '/(?<=@VERBUM)[[:space:]]se[[:space:]]/u';
     $patterns[6] = '/(?<=@VERBUM)[[:space:]]nos[[:space:]]/u';
     $patterns[7] = '/(?<=@VERBUM)[[:space:]]os[[:space:]]/u';
     // verb+pronom feble de receiver ja enganxat, seguit de "lo"
     $patterns[8] = "/(?<=@VERBUM)me[[:space:]]lo[[:space:]]/u";
     $patterns[9] = "/(?<=@VERBUM)te[[:space:]]lo[[:space:]]/u";
     $patterns[10] = "/(?<=@VERBUM)se[[:space:]]lo[[:space:]]/u";
     $patterns[11] = "/(?<=@VERBUM)nos[[:space:]]lo[[:space:]]/u";
     $patterns[12] = "/(?<=@VERBUM)os[[:space:]]lo[[:space:]]/u";
     // netejar @VERBUM
     $patterns[13] = "/@VERBUM/u";
     $replacements[0] = ' del ';
     $replacements[1] = ' al ';
     $replacements[2] = "lo";
     $replacements[3] = "me ";
     $replacements[4] = "te ";
     $replacements[5] = "se ";
     $replacements[6] = "nos ";
     $replacements[7] = "os ";
     $replacements[8] = "melo ";
     $replacements[9] = "telo ";
     $replacements[10] = "selo ";
     $replacements[11] = "noslo ";
     $replacements[12] = "roslo ";
     $replacements[13] = "";
     $frasebruta = preg_replace($patterns, $replacements, $frasebruta);
     // fem una assignació prèvia
     $this->frasefinal = $frasebruta;
     // afegim les expressions de temps que van a darrere, si n'hi havia
     for ($i = 0; $i < count($this->timeexpr); $i++) {
         $wordaux = $this->timeexpr[$i];
         if (!$matching->isFrontAdvTempsES($wordaux->text)) {
             // el posem darrere de la frase
             $frasebruta .= $wordaux->text . " ";
         }
     }
     // afegim les expressions a darrere de la frase, si la frase no era buida,
     // afegim una coma abans
     $numexprs = count($this->exprsarray);
     if ($numexprs > 0 && $this->frasefinal != " ") {
         $frasebruta .= ", ";
         $frasebruta = preg_replace("/[[:space:]],/u", ",", $frasebruta);
     }
     for ($i = 0; $i < $numexprs; $i++) {
         // l'hola sempre va a davant
         if ($this->exprsarray[$i] == "hola") {
             $fraseaux = $frasebruta;
             $frasebruta = " " . $this->exprsarray[$i];
             // si la frase no era buida, afegim una coma
             if ($this->frasefinal != " ") {
                 $frasebruta = $frasebruta . ", " . $fraseaux;
             }
         } else {
             $frasebruta .= $this->exprsarray[$i] . " ";
         }
     }
     // POSAR ELS PUNTS O EXCLAMACIONS O INTERROGANTS
     // esborrar l'últim espai i una coma al final si hi és. També l'espai del principi
     $frasebruta = preg_replace("/[[:space:]]\$/u", "", $frasebruta);
     $frasebruta = preg_replace("/,\$/u", "", $frasebruta);
     $frasebruta = substr($frasebruta, 1);
     $frasebruta[0] = strtoupper($frasebruta[0]);
     $llargfrase = strlen($frasebruta);
     $lastcharacter = $frasebruta[$llargfrase - 1];
     if ($lastcharacter != "?") {
         if ($tipusfrase == "exclamacio") {
             $frasebruta .= "!";
             $frasebruta = "¡" . $frasebruta;
         } else {
             if ($tipusfrase == "pregunta" || $tipusfrase == "permis") {
                 $frasebruta .= "?";
                 $frasebruta = "¿" . $frasebruta;
             } else {
                 $frasebruta .= ".";
             }
         }
     }
     $this->frasefinal = $frasebruta;
     // DEBUG
     // echo $frasebruta.'<br /><br />';
 }