public void DifrentInsertionCosts2() { var removalCalculator = A.Fake <IInsertionCalculator <string> >(); var correlater = new LevenshteinCorrelater <string>(new BasicDistanceCalculator <string>(10), new BasicRemovalCalculator <string>(10), removalCalculator); A.CallTo(() => removalCalculator.InsertionCost(A <string> ._)).ReturnsLazily( (string s) => { if (s == "A") { return(1); } if (s == "B") { return(2); } return((uint)3); }); var array1 = new string[0]; var array2 = new[] { "A", "B" }; var expectedResult = new CorrelaterResult <string>(3, new string[] { null, null }, array2); correlater.AssertComparision(array1, array2, expectedResult); }
[DataRow("1234", "5678", 0)] // Diff eveywhere public void IContinuousCorrelaterTest_InnerCorrelaterIsContinuous(string string1, string string2, int extraTimesToCallOrResultUpdate) { var levenshteinCorrelater = new LevenshteinCorrelater <char>(missmatchCost, removalInsertionCost, removalInsertionCost); var splitToChunksCorrelater = new SplitToChunksCorrelaterWrapper <char>(levenshteinCorrelater, 2); var correlater = new IgnoreIdenticalBeginningAndEndCorrelaterWrapper <char>(splitToChunksCorrelater); var match1 = new List <char>(); var match2 = new List <char>(); var totalDistance = 0L; var totalUpdates = 0; var innerUpdates = 0; correlater.OnResultUpdate += result => { match1.AddRange(result.BestMatch1); match2.AddRange(result.BestMatch2); totalDistance += result.Distance; totalUpdates++; }; splitToChunksCorrelater.OnResultUpdate += _ => innerUpdates++; var actualResult = correlater.Correlate(string1, string2); var resultFromEvent = new CorrelaterResult <char>(totalDistance, match1.ToArray(), match2.ToArray()); Assertions.AssertResultIsAsExpected(actualResult, resultFromEvent); Assert.AreEqual(extraTimesToCallOrResultUpdate + innerUpdates, totalUpdates, $"Got wrong number of {nameof(totalUpdates)}"); }
public void DifrentDistnaceCosts() { var distanceCalculator = A.Fake <IDistanceCalculator <string> >(); var correlater = new LevenshteinCorrelater <string>(distanceCalculator, 2, 2); A.CallTo(() => distanceCalculator.Distance(A <string> ._, A <string> ._)).ReturnsLazily( (string s1, string s2) => { if (s1 == s2) { return(0); } if (s2 == "A" && s1 == "E") { return(1); } return((uint)10); }); var array1 = new[] { "V", "E" }; var array2 = new[] { "T", "A" }; var expectedResult = new CorrelaterResult <string>(5, new[] { null, "V", "E" }, new[] { "T", null, "A" }); correlater.AssertComparision(array1, array2, expectedResult); }
public CorrelaterResult <char> StringCorrelaterExsample() { uint removalCost = 1, insertionCost = 1; // You'll need to implement your own IDistanceCalculator<char>. // IDistanceCalculator defines the "distance" between any two elements. IDistanceCalculator <char> distanceCalculator = new MyDistanceCalculator <char>(); // The library contains a number of ICorrelaters. // LevenshteinCorrelater uses dynamic programing to find the Levenshtein-distance between the two collections. // Since a string is actually an IEnumerable<char>, we need to use an ICorrelater<char>. ICorrelater <char> correlater = new LevenshteinCorrelater <char>(distanceCalculator, removalCost, insertionCost); string string1 = "ABC"; string string2 = "ADC"; // Correlate the strings. CorrelaterResult <char> result = correlater.Correlate(string1, string2); // Print some of the result Console.WriteLine(result.Distance); Console.WriteLine(result.BestMatch1); Console.WriteLine(result.BestMatch2); return(result); }
private void SetCorrelator() { ICorrelater <char> correlator; switch (selectCorrelatorComboBox.Text) { case nameof(DamerauLevenshteinCorrelater <char>): correlator = new DamerauLevenshteinCorrelater <char>(10, 12, 7, 7); break; case nameof(DynamicLcsCorrelater <char>): correlator = new DynamicLcsCorrelater <char>(); break; case nameof(MyersAlgorithmCorrelater <char>): correlator = new MyersAlgorithmCorrelater <char>(); break; case nameof(PatienceDiffCorrelater <char>): correlator = new PatienceDiffCorrelater <char>(); break; case nameof(HuntSzymanskiCorrelater <char>): correlator = new HuntSzymanskiCorrelater <char>(); break; case nameof(NullCorrelator <char>): correlator = new NullCorrelator <char>(); break; case nameof(LevenshteinCorrelater <char>): default: correlator = new LevenshteinCorrelater <char>(10, 7, 7); break; } if (slowCompareCheclCheckBox.Checked) { correlator = new SlowCorrelater <char>(correlator, 500); } if (splitToChunksCheckBox.Checked) { correlator = new SplitToChunksCorrelaterWrapper <char>(correlator, 10); } if (IgnoreIdenticalBeginningAndEndCorrelaterWrapperCheckBox.Checked) { correlator = new IgnoreIdenticalBeginningAndEndCorrelaterWrapper <char>(correlator); } if (SplitByPatienceWrapperCheckBox.Checked) { correlator = new SplitByPatienceAlgorithmWrapper <char>(correlator); } stringCorrelatorUserControl1.Correlater = correlator; }
public void CorrelateString() { var string1 = "abc"; var string2 = "ac"; var expectedResult = new CorrelaterResult <char>(removalCost, string1.ToCharArray(), "a\0c".ToCharArray()); var stringCorrelater = new LevenshteinCorrelater <char>(missmatchCost, removalCost, insertionCost); stringCorrelater.AssertComparision(string1, string2, expectedResult); }
public void OnProgressUpdate() { ICorrelater <string> correlater = new LevenshteinCorrelater <string>(10, 7, 7); correlater.OnProgressUpdate += (int currentProgress, int totalProgress) => { // Do something with the progress update here myUi.UpdateProgress(currentProgress, totalProgress); }; CorrelaterResult <string> result = correlater.Correlate(collection1, collection2); }
public void DifrentInsertionCosts1() { var removalCalculator = A.Fake <IInsertionCalculator <string> >(); var correlater = new LevenshteinCorrelater <string>(new BasicDistanceCalculator <string>(10), new BasicRemovalCalculator <string>(10), removalCalculator); A.CallTo(() => removalCalculator.InsertionCost(A <string> ._)).ReturnsLazily( (string s) => s == "A" ? (uint)1 : 40); var array1 = new[] { "C" }; var array2 = new[] { "A", "E" }; var expectedResult = new CorrelaterResult <string>(11, new[] { null, "C" }, array2); correlater.AssertComparision(array1, array2, expectedResult); }
public CorrelaterResult <char> SplitToChunksCorrelaterWrapper() { uint removalCost = 7; uint insertionCost = 7; uint missmatchCost = 10; int chunkSize = 200; // Bigger chunks will result in a slower, albeit more accurate, correlations ICorrelater <char> innerCorrelater = new LevenshteinCorrelater <char>(missmatchCost, removalCost, insertionCost); // The SplitToChunksCorrelaterWrapper wraps an inner ICorrelater ICorrelater <char> splitToChunksCorrelaterWrapper = new SplitToChunksCorrelaterWrapper <char>(innerCorrelater, chunkSize); CorrelaterResult <char> result = splitToChunksCorrelaterWrapper.Correlate(collection1, collection2); return(result); }
public void OnProgressUpdatesHappensRightNumberOfTimes() { var correlater = new LevenshteinCorrelater <string>(missmatchCost, removalCost, insertionCost); correlater.AssertProgressUpdateWasCalledRightNumberOfTimes(); }