Recentemente, há um problema que precisa ser resolvido, ou seja, comparar a cadeia inserida pelo usuário com a cadeia obtida pelo sistema; se o erro não for muito grande, o sistema considerará que ela atende aos requisitos, e é melhor estabelecer um limiar. Ao realizar o reconhecimento CAPTCHA, é necessário comparar a similaridade dos códigos de caracteres e usar o "algoritmo de distância de edição" para registrar o princípio e a implementação em C#.
De acordo com a Enciclopédia Baidu:
A distância de edição, também conhecida como distância de Levenshtein (também chamada de distância de edição), é o número mínimo de edições necessárias para alternar entre duas cadeias, e quanto maior a distância, mais diferentes elas são. Operações de edição com permissão incluem substituir um caractere por outro, inserir um caractere e remover um caractere.
Por exemplo, converta a palavra gatinho para sentar:
Sentado (K→s)
Sittin (E→I)
sentado (→G)
O cientista russo Vladimir Levenshtein propôs esse conceito em 1965. Daí o nome Distância de Levenshtein.
Por exemplo
Se str1="ivan", str2="ivan", então é calculado como igual a 0. Não convertido. similaridade=1-0/Math.Max(str1.length,str2.length)=1 Se str1="ivan1", str2="ivan2", então ele é calculado como igual a 1. O "1" de str1 converte em "2", converte um caractere, então a distância é 1, similaridade = 1-1/Math.Max(str1.length, str2.length) = 0,8
Aplicação:
- Análise de DNA
- Corretor ortográfico
- Reconhecimento de fala
- Detecção de plágio
O algoritmo é implementado em C#:
Código de teste:
A partir dos resultados dos testes, conclui-se queespaçoouPontuação、Posição das cordasCidades diferentesResultados que afetam a similaridadePortanto, ao comparar o reconhecimento de strings, recomenda-se remover todos os espaços e símbolos especiais na string antes de chamar o algoritmo。
Recursos:O login do hiperlink está visível.
No GitHub, também existe uma biblioteca para comparações de similaridade de strings em C#
FuzzyString é uma biblioteca desenvolvida para meu trabalho diário para coordenar convenções de nomenclatura entre diferentes modelos de grade. Retirei o código específico do sistema de energia e montei o que pode ser usado efetivamente como uma extensão de string para determinar a igualdade aproximada entre as duas strings. Todos os algoritmos usados aqui foram extraídos de fontes online, convertidos para C# e compilados nesta biblioteca. Encontrei várias outras implementações open source similares que não estão disponíveis para . NET / C#。 Adicionar *.dll ao seu projeto dará acesso a essa extensão e às extensões individuais sob a extensão ApproximatelyEquals().
Endereço:O login do hiperlink está visível.
Instalação Nuget:
Algoritmos incluídos neste projeto:
- Distância de Hamming
- Distância de Jaccard
- Distância de Jaro
- Distância Jaro-Winkler
- Distância de Levenshtein
- O público mais longo
- A substring comum mais longa da subsequência
- Coeficiente de sobreposição
- Semelhança Ratcliff-Obershelp
- Distância de Sorensen-Dice
- Coeficiente de Tanimoto
Uso:
Resultado:
(Fim)
|