Предполагая, что эти две строки:
string s1="control"; string s2="conrol"; (or "ocntrol", "onrtol", "lcontro" etc.)
Как программно обнаружить, что s2 похож на s1, и заменить строку s2 на строку s1?
Спасибо.
Jeff
Вы можете попытаться проверить расстояние Левенштейна между двумя вашими словами, и если расстояние превышает пороговое значение, замените слово.
Трудная часть - это определение порога, в ваших примерах порог 2 может сработать.
( Реализация расстояния Левенштейна в C # )
Вы можете использовать Расстояние Левенштейна , которое даст вам оценку того, насколько близко эти два слова.Вам нужно решить, на каком звании вы делаете замену.
Я предложу более простой ответ.Сравните длину двух строк, а также сравните сумму значений ASCII обеих строк.
Linq Method: попробуйте сохранить символы в обеих строках в двух List<chars> или List<String> и сравнить (SequenceEqual или Except) более маленький с большим.
Linq Method
List<chars>
List<String>
SequenceEqual
Except
Я бы использовал matlab для запуска некоторых тестов по этому вопросу.Я сделал бы следующеевторой случай и три 1 в третьем.Вы можете сказать, что 70% приемлемо, и если 70% соответствуют, я буду использовать это слово.OCNTROL будет принят, но ONRCTOL не будет.
Я говорю Matlab, потому что вы можете легко загрузить много данных в векторы и выполнить сравнение векторов.