Напоследък възниква проблем, който трябва да се реши, а именно да се сравни низа, въведен от потребителя, и низа, получена от системата; ако грешката не е много голяма, системата ще я прецени за отговаряща на изискванията и е най-добре да се зададе праг. Когато се занимавате с CAPTCHA разпознаване, трябва да сравните сходството между кодовете на знаците и да използвате алгоритъма "edit distance algorithm", за да направите запис на принципа и реализацията на C#.
Според енциклопедията Baidu:
Edit distance, известно още като Levenshtyin distance (известно още като edit distance), е минималният брой редакции, необходими за превключване от една на друга между две струни, и колкото по-голямо е разстоянието, толкова по-различни са те. Разрешените операции по редактиране включват замяна на един символ с друг, вмъкване на знак и премахване на символ.
Например, превърнете думата котенце в седнало:
Ситън (К→с)
Ситин (E→i)
седящ (→g)
Руският учен Владимир Левенщайн предлага тази концепция през 1965 г. Оттук идва и името Левенщайнска дистанция.
Например
Ако str1="ivan", str2="ivan", тогава се изчислява да е равно на 0. Не е конвертиран. сходство=1-0/Math.Max(str1.length,str2.length)=1 Ако str1="ivan1", str2="ivan2", тогава се изчислява да е равно на 1. "1" на str1 се преобразува в "2", преобразува символ, така че разстоянието е 1, сходство = 1-1/Math.Max(str1.length, str2.length) = 0.8
Приложение:
- ДНК анализ
- Проверка на правописа
- Разпознаване на реч
- Откриване на плагиатство
Алгоритъмът е реализиран на C#:
Тестов код:
От резултатите от тестовете се заключава, чепросторилиПунктуация、Позиция на струнатаРазлични градовеРезултати, които влияят на сходствотоЗатова при сравняване на разпознаването на низове се препоръчва да се премахнат всички интервали и специални символи в низа преди да се извикне алгоритъмът。
Ресурси:Входът към хиперлинк е видим.
В GitHub има и библиотека за сравнения на сходство на низове в C#
FuzzyString е библиотека, разработена за моята ежедневна работа, за да координирам конвенциите за именуване между различни мрежови модели. Премахнах кода, специфичен за захранващата система, и съставих това, което може ефективно да се използва като удължаване на струна, за да определя приблизителното равенство между двете струни. Всички алгоритми, използвани тук, са извлечени от онлайн източници, конвертирани в C# и компилирани в тази библиотека. Открих няколко други подобни реализации с отворен код, които не са налични за . NET / C#。 Добавянето на *.dll към проекта ви дава достъп до това разширение и до отделните разширения под разширението ApproximatelyEquals().
Адрес:Входът към хиперлинк е видим.
Инсталация на NUGET:
Алгоритми, включени в този проект:
- Хамингова дистанция
- Разстояние Жакар
- Разстоянието Джаро
- Разстоянието Яро-Уинклер
- Дистанция Левенщайн
- Най-дългият публик
- Най-дългата обща подлиния на подпоследователността
- Коефициент на припокриване
- Прилика между Ратклиф-Обершелп
- Дистанцията на Соренсен-Дайс
- Коефициент на Танимото
Използване:
Резултат:
(Край)
|