Как проверить, являются ли две строки приблизительно равными?

Я создаю ответчик чата для игры, и я хочу знать, есть ли способ сравнить две строки и посмотреть, являются ли они примерно одинаковыми друг для друга, например:

если кто-то набрал:    "Уровень прочности?" это сделало бы функцию. то если кто-то еще набрал:    "Уровень Str?" он будет делать ту же самую функцию, но я хочу, чтобы, если кто-то сделал опечатку или что-то в этом роде, она автоматически обнаружила бы то, что они пытаются напечатать, например:    "Силовой уровень?" также вызывало бы вызов функции.

вот что я прошу здесь что-то простое или потребует от меня сделать большую гигантскую раздражающую функцию, чтобы проверить строки?

если вы были озадачены моим объяснением (на самом деле это не одна из моих сильных сторон), то это в основном то, о чем я прошу.

Как проверить, являются ли две строки похожими друг на друга?

Ответы

Ответ 1

Посмотрите на этот вопрос и ответ: Получение ближайшего соответствия строк

Используя некоторые эвристики и алгоритм Levenshtein distance, вы можете вычислить сходство двух строк и угадать, равны ли они.

enter image description here

Ваш единственный вариант, кроме этого, будет словарем принятых слов, подобным тому, который вы ищете.

Ответ 3

Я считаю, что вы должны использовать один из Изменить алгоритмы расстояния, чтобы решить вашу проблему. Вот, например, Levenstein distance реализация алгоритма в java. Вы можете использовать его для сравнения слов в предложениях, и если сумма их расстояний для редактирования будет меньше, чем, например, 10% длины предложения считают их равными.

Ответ 4

Возможно, вам нужен большой словарь для подобных слов и общие орфографические ошибки, для которых вы должны использовать для каждого слова "перевод" на одну запись или ключ.

Это было бы полезно для пользовательских слов, поэтому вы могли бы добавить "str" в ту же клавишу, что и "сила".

Однако вы также можете сделать несколько автоматических методов, т.е. когда ваше слово не найдено в словаре, для рекурсивного цикла для разницы в 1 букву (либо отсутствует, либо заменено), и может записаться на более глубокие уровни, то есть две пропущенные буквы и др.

Ответ 6

Если вы хотите найти похожие начинания, вы можете использовать стволовых. Стэммеры сокращают слова до общего начала. Самый известный алгоритм, если Port Stemmer (http://tartarus.org/~martin/PorterStemmer).

Левенштейн, как указано выше, велик, но вычислительный тяжелый для расстояний больше одного или двух.