public function modifFitsSlot($word, $keyslot) { $CI =& get_instance(); $CI->load->library('Mymatching'); $matching = new Mymatching(); $numclasses = count($word->classes); $matchscore = 1000; $matchindexclass = -1; $output = 0; // com que els quant poden omplir slots on tb hi pot haver ja un adv, només volem que l'ompli // si no hi ha cap adv, es a dir, si està buit if (!$this->full) { for ($i = 0; $i < $numclasses; $i++) { $classe = "modif"; if ($word->classes[$i] == "quant") { $classe = "quant"; } else { if ($word->classes[$i] == "numero") { $classe = "numero"; } } // comprovem que la classe del modificador existeixi i que el type de l'slot accepti adjectius if ($matching->isSetKeyModif($classe) && $matching->isSetKeyModif($this->type)) { $tipusx = $matching->modifFitKeys[$this->type]; // agafem l'index del tipus de l'slot $tipusy = $matching->modifFitKeys[$classe]; if ($matching->modifFit[$tipusx][$tipusy] < $matchscore) { $matchscore = $matching->modifFit[$tipusx][$tipusy]; $matchindexclass = $i; } } } } // els quant poden fer de complement d'advs, noms (si no són pronoms), adjs i modifs // els altres modificadors (possessius) de paraula i els números només van amb noms $potferdecmp = false; if ($this->full) { $tipusparaulafinal = $this->paraulafinal->tipus; if ($word->classes[0] == "quant") { if (($tipusparaulafinal == "name" || $tipusparaulafinal == "adv" || $tipusparaulafinal == "adj" || $tipusparaulafinal == "modifier") && !$this->paraulafinal->isClass("pronoun")) { $potferdecmp = true; } } else { if ($tipusparaulafinal == "name") { $potferdecmp = true; } } } if ($potferdecmp) { $numcomplements = count($this->cmpMod); $newslot = new Myslot(); $aux = array(); $aux[0] = $keyslot . " MOD " . $numcomplements; // la clau de l'slot on pot fer complement // nom - modificador $distance = $this->paraulafinal->inputorder - $word->inputorder; // com més lluny pitjor $newslot->puntsfinal = 7 - abs($distance); if ($distance == 1) { $newslot->puntsfinal += 1; } // Si el modficador va just abans de la paraula és la millor opció $aux[1] = $newslot->puntsfinal; // els punts d'aquest slot: és per desambiguar si un modif pot complementar a dues paraules, per escollir la millor $word->slotstemps[] = $keyslot . " MOD " . $numcomplements; $word->slotstempsext[] = $aux; // key de l'slot on el modif fa de complement [0] i punts [1] $newslot->category = $this->category . " MOD"; $newslot->grade = "opt"; $newslot->full = true; $newslot->paraulafinal = $word; $newslot->level = $this->level + 1; $newslot->parent = $keyslot; $newslot->indexclassfinalword = 0; $this->cmpMod[$keyslot . " MOD " . $numcomplements] = $newslot; $output = 1; } // si havia fet fit d'un slot (no de complement) if ($matchscore != 1000) { // POSEM LA PARAULA AL LLISTAT DE FILL TEMPORAL $this->fillSlotTemp($word, $matchscore, $matchindexclass, $keyslot); $output = 1; } return $output; }