Как разбить строку на слова.Пример: "stringintowords" -> "Строка в слова"? - PullRequest
21 голосов
/ 12 августа 2010

Как правильно разбить строку на слова? (строка не содержит пробелов или знаков пунктуации)

Например: "stringintowords" -> "Строка в слова"

Не могли бы вы порекомендовать, какой алгоритм следует использовать здесь?

! Обновление: для тех, кто считает этот вопрос просто ради любопытства. Этот алгоритм может использоваться для маскировки доменных имен ("sportandfishing .com" -> "SportAndFishing .com"), и этот алгоритм в настоящее время используется aboutus dot org для динамического преобразования.

Ответы [ 13 ]

0 голосов
/ 23 декабря 2012

Я смотрел на проблему и подумал, может быть, я мог бы поделиться, как я это сделал.Немного сложно объяснить мой алгоритм словами, поэтому, возможно, я смогу поделиться своим оптимизированным решением в псевдокоде:

string mainword = "stringintowords";
array substrings = get_all_substrings(mainword);

/** this way, one does not check the dictionary to check for word validity 
 *  on every substring; It would only be queried once and for all, 
 *  eliminating multiple travels to the data storage
 */
string query = "select word from dictionary where word in " + substrings;
array validwords = execute(query).getArray();

validwords = validwords.sort(length, desc);

array segments = [];
while(mainword != ""){
    for(x = 0; x < validwords.length; x++){
        if(mainword.startswith(validwords[x])) {
            segments.push(validwords[x]);
            mainword = mainword.remove(v);
            x = 0;
        }
    }

    /**
     * remove the first character if any of valid words do not match, then start again
     * you may need to add the first character to the result if you want to
     */
    mainword = mainword.substring(1);
}

string result = segments.join(" ");
0 голосов
/ 12 августа 2010

Единственный способ разделить эту строку на слова - это использовать словарь.Хотя это, вероятно, будет довольно ресурсоемким.

0 голосов
/ 12 августа 2010

Лучше всего будет сравнить подстроку из 0 со словарем, а когда вы найдете совпадение, извлечь это слово и начать новый поиск по словарю с этой точки ... но это будет очень подвержено ошибкам, иу вас будут проблемы с множественным числом и апострофами (раковинами, раковинами) и другими частями речи.

РЕДАКТИРОВАТЬ

станет "одиночной эмоцией" или станет "одной эмоцией" или"греховное движение"?

...