/**
  *  Funkce pro spočítání velikostí u všech vektorů
  */
 private function generateSizes($ngramsArr)
 {
     $outputArr = array();
     foreach ($ngramsArr as $key => $ngram) {
         $outputArr[$key] = StringClass::getVectorSize($ngram);
     }
     return $outputArr;
 }
 /**
  *  Funkce, která projde finalArr a pokud jsou uvedené hodnoty pro A i B, tak mezi nimi najde identické a ty přesune do mappedValues
  */
 private function mapValues($finalArr)
 {
     if (count($finalArr) > 0) {
         foreach ($finalArr as $key => $arr) {
             //projdeme cele finalArr
             if (isset($arr['valuesA']) && isset($arr['valuesB'])) {
                 if (!count($arr['valuesA'] > 0) && count($arr['valuesB'] > 0)) {
                     continue;
                 }
                 //máme definované hodnoty pro A i B => můžeme je porovnávat
                 foreach ($arr['valuesA'] as $keyA => $valueA) {
                     $maxSimilarityValue = -1;
                     $maxSimilarityKey = '';
                     foreach ($arr['valuesB'] as $keyB => $valueB) {
                         $similarity = StringClass::similarity($this->valuesMapArr[$valueA], $this->valuesMapArr[$valueB]);
                         if ($similarity > $maxSimilarityValue) {
                             $maxSimilarityValue = $similarity;
                             $maxSimilarityKey = $keyB;
                         }
                     }
                     if ($maxSimilarityValue > 0) {
                         $valueA = $arr["valuesA"][$keyA];
                         $valueB = $arr["valuesB"][$maxSimilarityKey];
                         if (!@in_array($valueA, $finalArr[$key]['mappedValues'][$valueA])) {
                             //budeme to resit jen v okamziku, kdy nemame dany par v uzivatelem namapovanych hodnotach
                             if (!isset($finalArr[$key]['autoMappedValues'])) {
                                 $finalArr[$key]['mappedValues'] = array();
                             }
                             $finalArr[$key]['autoMappedValues'][$valueA] = array($valueB);
                         }
                     }
                 }
                 /**/
             }
         }
     }
     return $finalArr;
 }
Example #3
0
 /**
  *  Funkce pro zjištení podobnosti výčtových sloupců na základě trigramů
  */
 private function matchTrigrams($column1, $column2, $coverage = false)
 {
     $colATrigramsArr = StringClass::getTrigramsArr($this->getValues($column1));
     $col2name = (string) $column2->name . (isset($column2->formatName) ? '###' . (string) $column2->formatName : '');
     if (!isset($this->xml2trigramsArr[$col2name])) {
         //zatím nemáme určené trigramy pro sloupec ze druhého souboru
         $this->xml2trigramsArr[$col2name] = StringClass::getTrigramsArr($this->getValues($column2));
         $this->xml2trigramsSizeArr[$col2name] = StringClass::getVectorSize($this->xml2trigramsArr[$col2name]);
     }
     if ($coverage) {
         return StringClass::getTrigramsCoverage($colATrigramsArr, StringClass::getVectorSize($colATrigramsArr), $this->xml2trigramsArr[$col2name], $this->xml2trigramsSizeArr[$col2name]);
     } else {
         return StringClass::getTrigramsSimilarity($colATrigramsArr, StringClass::getVectorSize($colATrigramsArr), $this->xml2trigramsArr[$col2name], $this->xml2trigramsSizeArr[$col2name]);
     }
 }
Example #4
0
 /**
  *  Funkce vracející hodnotu kosínovy míry podobnosti vektorů - pro pokrytí vektoru z PMML vektorem v BKEF
  */
 public static function getTrigramsCoverage($arr1, $size1, $arr2, $size2)
 {
     if ($size1 == 0 || $size2 == 0) {
         return 0;
     }
     return StringClass::getScalarProduct($arr1, $arr2) / ($size1 * $size1);
     //NERESIT!
 }