public function getMorph($word, $pos = '')
    {
        if(mb_strlen($word) < 3) {
            return "";
        }
        
        $searchForFuncWithPos = function(ExceptionMap $exceptionMap) use($word, $pos)
        {
            return $exceptionMap->getPos() === $pos && in_array($word, $exceptionMap->getExceptionList());
        };
        
        $searchForFuncWithoutPos = function(ExceptionMap $exceptionMap) use($word)
        {
            return in_array($word, $exceptionMap->getExceptionList());
        };        

        $found = [];
        
        
        if(!empty($pos)) {
            $found = array_filter($this->getWordnetCorpus()->getExceptionsMap(), $searchForFuncWithPos);
        } else {
            $found = array_filter($this->getWordnetCorpus()->getExceptionsMap(), $searchForFuncWithoutPos);
        }
        
        // found a match in the exceptions data
        if(!empty($found)) { 
            return array_values($found)[0]->getTarget();
        }
        
        foreach($this->getMorphilogicalSubstitutions() as $keyPos => $keyValues)
        {            
            foreach($keyValues as $key => $value) 
            {
                if(Text::endsWith($word, $key)) {   
                    $morphedWord = substr($word, 0, -strlen($key)).$value;
                    $r = $this->getLemma($morphedWord, $keyPos);
                    if(!empty($r)) { 
                        $found += array_map(function($lemma){ return $lemma->getWord();}, $r);
                        return $found[0];
                    }
                }
            }
        }
        if(empty($found)) {
            return "";
        }
        
        return $found[0];
    }