StringSimilarity added
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user