Используя C #, как я могу заменить похожие слова? - PullRequest
7 голосов
/ 12 октября 2010

Предполагая, что эти две строки:

string s1="control";
string s2="conrol"; (or "ocntrol", "onrtol", "lcontro" etc.)

Как программно обнаружить, что s2 похож на s1, и заменить строку s2 на строку s1?

Спасибо.

Jeff

Ответы [ 5 ]

12 голосов
/ 12 октября 2010

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

Трудная часть - это определение порога, в ваших примерах порог 2 может сработать.

( Реализация расстояния Левенштейна в C # )

3 голосов
/ 12 октября 2010

Вы можете использовать Расстояние Левенштейна , которое даст вам оценку того, насколько близко эти два слова.Вам нужно решить, на каком звании вы делаете замену.

1 голос
/ 12 октября 2010

Я предложу более простой ответ.Сравните длину двух строк, а также сравните сумму значений ASCII обеих строк.

0 голосов
/ 12 октября 2010

Linq Method: попробуйте сохранить символы в обеих строках в двух List<chars> или List<String> и сравнить (SequenceEqual или Except) более маленький с большим.

0 голосов
/ 12 октября 2010

Я бы использовал matlab для запуска некоторых тестов по этому вопросу.Я сделал бы следующеевторой случай и три 1 в третьем.Вы можете сказать, что 70% приемлемо, и если 70% соответствуют, я буду использовать это слово.OCNTROL будет принят, но ONRCTOL не будет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...