Я думаю, вам придется более четко указать свою проблему, чего именно вы пытаетесь достичь с помощью этого показателя?
Я говорю это, потому что Левенштейн работает, поскольку он отображает пары строк в метрику, которая может сохранить размерность пространства строк. Что произойдет, если вы попытаетесь сопоставить строки с числами, так это то, что существует большая потеря размерной информации. Например, скажем, у меня есть строка «кошка», я бы хотел, чтобы слова «летучая мышь», «шляпа», «крыса», «может», «детская кроватка» и т. Д. Были достаточно близки к этому. С большим количеством слов результат в том, что вы в конечном итоге сталкиваетесь с разными словами, например, рядом. «Летучая мышь» и «детская кроватка» могут быть близки, потому что оба они находятся на одинаковом расстоянии от «кошки» с положительной стороны. Это похоже на проблему того, что происходит, когда вы пытаетесь отобразить плоскость на линию, трудно соблюсти ограничение, которое указывает, что точки на плоскости остаются далеко на линии. Таким образом, результатом этого является то, что требование «Чем больше« разных »двух заданных строк, тем больше должно быть двух разных соответствующих значений» является трудным.
Итак, мое первое предложение: вам действительно нужно что-то, что делает это, будет ли достаточно простого хеш-кода, чтобы дать вам уникальные значения, или, возможно, вы все-таки сможете использовать Levenstein и игнорировать значения для отдельных строк? Если ничего из этого не достаточно, возможно, вы можете использовать многомерное значение функции, то есть отображать строки в пары, тройки или другой небольшой набор чисел. Предоставленная таким образом дополнительная размерность даст вам гораздо лучшие результаты.
Примером может быть кодирование строки как тройки: длина, сумма значений букв в строке, переменная сумма значений букв, например, f ("кошка") = (3, 3 + 1 + 20, 3 - 1 + 20) = (3, 24, 22). Это будет иметь некоторые свойства, которые вы хотите, но, вероятно, не является оптимальным. Попробуйте найти ортогональные свойства строки, чтобы выполнить эту кодировку, или даже лучше, если у вас большой набор тестовых строк, существуют существующие библиотеки для отображения данных такого типа в низкие измерения при сохранении метрик (например, метрики Левенштейна), и вы может тренировать вашу функцию на этом. Я помню, что язык S имел поддержку для такого рода вещей.