private void compute_Click(object sender, EventArgs e) { var string1 = string1txtBox.Text.ToString(); var string2 = string2txtBox.Text.ToString(); var levenstainResult = LevenstainDistance.CalculateSimilarity(string1, string2); var jaroWinklerResult = JaroWinclerDistance.GetDistance(string1, string2); var triGramResult = NGramsComparision.CompareStringsWithTriGram(string1, string2); var diceResult = DiceCoefficient.DiceCoefficientCount(string1, string2); levenstainTxtBox.Text = (Math.Round(levenstainResult, 2) * 100).ToString(); levenstainTxtBox.Text += '%'; jaroWinklerTxtBox.Text = (Math.Round(jaroWinklerResult, 2) * 100).ToString(); jaroWinklerTxtBox.Text += '%'; nGramTxtBox.Text = (Math.Round(triGramResult, 2) * 100).ToString(); nGramTxtBox.Text += '%'; diceCoefficientTxtBox.Text = (Math.Round(diceResult, 2) * 100).ToString(); diceCoefficientTxtBox.Text += '%'; }
public IActionResult SearchRecipes([FromQuery] string recipe_name = "") { if (string.IsNullOrEmpty(recipe_name)) { return(BadRequest()); } var requiredRecipe = recipe_name.Split(' '); var recipes = new { Recipes = db.Recipes .ToList() .Where(recipe => requiredRecipe .All(requiredRecipeName => recipe.Name.Replace(" ", new Regex(@"\W")).Split(' ') .Where(e => !string.IsNullOrEmpty(e) && e.Length >= 3) .Any(recipeName => DamerauLevenshtein.DamerauLevenshteinDistance(requiredRecipeName, recipeName) <= 3 && DiceCoefficient.FindDiceCoefficient(requiredRecipeName, recipeName) > 0.4))) .Select(r => new { r.Name, id_recipe = r.Id, id_image = r.ImageId, r.Rating, total_time = r.TimeCook }) }; return(Ok(recipes)); }
public void DiceCoefficientForEqualStrings() { var string1 = "system under test"; var string2 = string1; Assert.True(DiceCoefficient.DiceCoefficientCount(string1, string2) == 1); }
public void DiceCoefficientForVariousStrings(string source, string target) { var result = DiceCoefficient.DiceCoefficientCount(source, target); var expected = (2.0 * 6) / (source.Length + target.Length); Assert.True(Math.Round(result, 1) == Math.Round(expected, 1)); }
public void Initializate() { _diceCoefUnigram = new DiceCoefficient <Unigram>(); _diceCoefBigram = new DiceCoefficient <Bigram>(); _diceCoefTrigram = new DiceCoefficient <Trigram>(); }
private static void Main(string[] args) { /****************************************************/ /* BagOfTokensSimilarity */ /****************************************************/ // the recommend method for complex similarity on more words var bagOfTokens = new BagOfWordsSimilarity(); const string pattern = "John Smith"; const string targetText = "Mr. John Smith, Jr."; // using normalized string and tokenizer returns score 1.0 var resultingSim = bagOfTokens.GetSimilarity(new Tokenizer(new NormalizedString(pattern)), new Tokenizer(new NormalizedString(targetText))); /****************************************************/ /* Levenshtein */ /****************************************************/ const string nameCorrect = "martha"; const string nameError = "marhta"; // Levenshtein distance (implements interface IDistance) // & similarity (implements interface ISimilarity) var lev = new Levenshtein(); // returns edit distance 2 var distLev = lev.GetDistance(nameCorrect, nameError); // normalized string removes special symbols, diacritics and make case insensitivity // returns score 0.67 var simLev = lev.GetSimilarity(new NormalizedString(nameCorrect), new NormalizedString(nameError)); /****************************************************/ /* Damerau-Levenshtein */ /****************************************************/ // DamerauLevenshtein implements IDistance and ISimilarity var damLev = new DamerauLevenshtein(); // returns edit distance 1 var distDamLev = damLev.GetDistance(nameCorrect, nameError); // returns score 0.83 var simDamLev = damLev.GetSimilarity(nameCorrect, nameError); /****************************************************/ /* Jaro, Jaro-Winler */ /****************************************************/ // Jaro, Jaro-Winkler implements only ISimilarity var nameFirst = new Token("dwayne"); var nameSecond = new Token("duane"); var jaro = new Jaro(); var jaroWinkler = new JaroWinkler(); jaroWinkler.GetSimilarity(nameFirst, nameSecond); /****************************************************/ /* Q-grams coefficient */ /****************************************************/ // q-grams similarity coefficient - Dice, Jaccard, Overlap // with different q-grams type var diceUnigrams = new DiceCoefficient <Bigram>(); var jaccardBigrams = new JaccardCoefficient <Bigram>(); var overlapTrigrams = new OverlapCoefficient <Bigram>(); // returns score 0.5 var jaccardSim = jaccardBigrams.GetSimilarity(pattern, targetText); // returns score 0.67 var diceSim = diceUnigrams.GetSimilarity(pattern, targetText); // returns score 1.0 var overlapSim = overlapTrigrams.GetSimilarity(pattern, targetText); Console.ReadKey(); }