private Set<String> keywordsFromUrlString(String urlChunk) {
        Set<String> keywords = new HashSet<>();
        if (urlChunk.length() < MIN_KEYWORD_LENGTH) {
            return keywords; // enforce a minimum keyword length.
        }
        if (dictionary.isStringInDictionary(urlChunk)) {
            keywords.add(urlChunk); // recursive base case of sorts.
            return keywords;
        }
        for (int i = 1; i < urlChunk.length(); i++) {
            String substringA = urlChunk.substring(0, i);
            String substringB = urlChunk.substring(i, urlChunk.length());
            if (dictionary.isStringInDictionary(substringA)) {
                if (substringA.length() >= MIN_KEYWORD_LENGTH) {
                    keywords.add(substringA);
                }
                keywords.addAll(keywordsFromUrlString(substringB));
            } else if (dictionary.isStringInDictionary(substringB)) {
                if (substringB.length() >= MIN_KEYWORD_LENGTH) {
                    keywords.add(substringB);
                }
                keywords.addAll(keywordsFromUrlString(substringA));
            }
        }
        return keywords;
    }