StringSimilarity added

This commit is contained in:
clodan
2025-01-29 15:29:29 +00:00
parent ff6ac6dab2
commit f2589da828
@@ -0,0 +1,37 @@
namespace Core.Helpers.Dialogue.Commando.SptCommands.GiveCommand;
public static class StringSimilarity
{
/**
* Converted from: https://github.com/stephenjjbrown/string-similarity-js/blob/master/src/string-similarity.ts
*/
public static double Match(string str1, string str2, int substringLength = 2, bool caseSensitive = false)
{
if (!caseSensitive) {
str1 = str1.ToLower();
str2 = str2.ToLower();
}
if (str1.Length < substringLength || str2.Length < substringLength)
return 0;
var map = new Dictionary<string, int>();
for (var i = 0; i < str1.Length - (substringLength - 1); i++) {
var substr1 = str1.Substring(i, substringLength);
map.Add(substr1, map.TryGetValue(substr1, out var value) ? value + 1 : 1);
}
var match = 0;
for (var j = 0; j < str2.Length - (substringLength - 1); j++) {
var substr2 = str2.Substring(j, substringLength);
var count = map.GetValueOrDefault(substr2, 0);
if (count > 0) {
map.Add(substr2, count - 1);
match++;
}
}
return match * 2D / (str1.Length + str2.Length - ((substringLength - 1D) * 2D));
}
}