コード例 #1
0
ファイル: Myslot.php プロジェクト: narum/jocomunicoLAB
 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;
 }