public function edgeNGram($str_phrase, $int_min_length = 1)
    {
        $arr_tokens = [];

        // Clean-up unwanted characters (assume english for now)
        $str_phrase = preg_replace('#[^a-z0-9 ]#i', '', $str_phrase);

        // @todo move this to non-edge ngram function when we have one.
        // Do we need individual characters?
        // if($int_min_length < 2) {
        //     $arr_chars = str_split($str_phrase);
        //     $arr_tokens = array_merge($arr_tokens, $arr_chars);
        // }

        // Add the words
        $arr_words = explode(' ', $str_phrase);
        $arr_tokens = array_merge($arr_tokens, $arr_words);

        // OK, now split the words
        foreach($arr_words as $str_word) {
            $int_letters = strlen($str_word);
            $arr_ngrams = [];
            for($int_subs = $int_min_length; $int_subs <= ($int_letters - 1); $int_subs++) {
                $arr_ngrams[] = substr($str_word, 0, $int_subs);
            }
            $arr_tokens = array_merge($arr_tokens, $arr_ngrams);
        }

        // Clean up and return
        return str_replace('  ', ' ', implode(' ', $arr_tokens));
    }