Compute() публичный статический Метод

Compute the distance between two strings.
public static Compute ( string s, string t ) : int
s string
t string
Результат int
        private bool ValidateAndTryFix(WorkItem sourceWorkItem, WorkItem newWorkItem)
        {
            ArrayList array     = newWorkItem.Validate();
            bool      isInError = array.Count != 0;

            foreach (Field item in array)
            {
                if (!CorrectErrorsAbsolutely)
                {
                    logger.WarnFormat("Work item {0} Validation Error in field: {1}  : {2}", sourceWorkItem.Id,
                                      item.Name, newWorkItem.Fields[item.Name].Value);
                }
                else
                {
                    var initialValue = item.Value.ToString();
                    var allowedValueSortedByAcceptability =
                        item.AllowedValues.OfType <string>().OrderBy(e => LevenshteinDistance.Compute(initialValue, e));
                    var value = allowedValueSortedByAcceptability.First();
                    item.Value = value;
                    logger.WarnFormat("Work item {0} Validation Error in field: {1}  : {2}=> Replaced by value: {3}", sourceWorkItem.Id,
                                      item.Name, initialValue, value);
                }
            }

            if (isInError && CorrectErrorsAbsolutely)
            {
                array = newWorkItem.Validate();
            }

            return(array.Count == 0);
        }
Пример #2
0
        public async Task <IPlayable> SearchTrack(string artist, string title)
        {
            PlayableBase result = null;
            var          sw     = Stopwatch.StartNew();

            foreach (var track in Tracks.Tracks)
            {
                if (track.Title.IndexOf(title.Trim(), StringComparison.OrdinalIgnoreCase) > -1 && !string.IsNullOrEmpty(track.Artist?.Name) &&
                    LevenshteinDistance.Compute(artist.ToLower(), track.Artist.Name.ToLower()) <=
                    Math.Abs(artist.Length - track.Artist.Name.Length))
                {
                    result = track;
                    break;
                }
            }

            Debug.Print($"Search track in local collection: {sw.ElapsedMilliseconds} ms");

            if (result != null)
            {
                return(result);
            }

            return
                (await
                 MusicStreamingPluginManager.DefaultMusicStreaming.GetTrack(
                     $"{artist} - {title}"));
        }
        public static async Task <RetrieveEntityResult <string> > BestLevenshteinMatchAsync
        (
            [NotNull, ItemNotNull] this IQueryable <string> @this,
            [NotNull] string search,
            double tolerance = 0.25
        )
        {
            var candidates =
                from candidate in @this
                let distance = LevenshteinDistance.Compute
                               (
                    candidate.ToLowerInvariant(),
                    search.ToLowerInvariant()
                               )
                               let maxDistance = Math.Max(candidate.Length, search.Length)
                                                 let percentile = distance / (float)maxDistance
                                                                  select new Tuple <string, int, double>(candidate, distance, percentile);

            var hasAnyPassing = await candidates.Where(c => c.Item3 <= tolerance).AnyAsync();

            if (!hasAnyPassing)
            {
                return(RetrieveEntityResult <string> .FromError("No sufficiently close match found."));
            }

            var best = await candidates.OrderBy(x => x.Item2).FirstAsync();

            return(RetrieveEntityResult <string> .FromSuccess(best.Item1));
        }
Пример #4
0
        public GameInfoModel GetDataFromApi(string filename)
        {
            var platform = "?platformID[]=11";
            var name     = "&name=" + filename.Replace(" ", "+");

            var response = ScrapeArt.WebClient(BaseUrl,
                                               p => p.DownloadString("search.php" + platform + name)
                                               );

            var html = CQ.CreateDocument(response);

            if (html["div#display"].Children().Any() == false)
            {
                return(null);
            }


            var sanitizedSearchFilename = SanitizeSeach(filename);
            var resultRoot = html["div#display div > a[href]"];
            var results    = IterateResults(resultRoot).ToArray();

            // result is in the wrong order, so i attempt to find the most relevant of the results
            var orderedByRelevance = (
                from item in results
                let sanitizedSerachTitle = SanitizeSeach(item.Title)
                                           let levenshteinDistance = LevenshteinDistance.Compute(sanitizedSearchFilename, sanitizedSerachTitle)
                                                                     let lengthDifference = sanitizedSearchFilename.Length - sanitizedSerachTitle.Length
                                                                                            orderby lengthDifference
                                                                                            orderby levenshteinDistance
                                                                                            select item
                ).ToArray();

            return(orderedByRelevance.FirstOrDefault());
        }
        void CompareButtonClicked(object sender, EventArgs e)
        {
            var result = LevenshteinDistance.Compute(FirstWordTextField.Text,
                                                     SecondWordTextField.Text);

            ResultLabel.Text = result.ToString();
        }
        private void MapTeams(TeamSheetTeam team, int managerId)
        {
            var leagueTeams = db.Teams.ToList();

            foreach (var goalKeeper in team.GoalKeepers)
            {
                string matchText = goalKeeper.Team.Replace(" ", string.Empty).ToUpper();

                int bestDistance = -1;
                int bestTeamId   = -1;
                foreach (var leagueTeam in leagueTeams)
                {
                    var distance = LevenshteinDistance.Compute(matchText, leagueTeam.Alias.Replace(" ", string.Empty).ToUpper());
                    if (bestDistance == -1 || distance < bestDistance)
                    {
                        bestDistance = distance;
                        bestTeamId   = leagueTeam.TeamId;
                    }
                }

                if (bestTeamId != -1)
                {
                    db.ManagerGoalKeepers.Add(new ManagerGoalKeeper(bestTeamId, managerId, goalKeeper.Substitute));
                }
            }
        }
        public ICompareResult search(string sentence)
        {
            var    s           = removePunctuation(sentence);
            var    minDistance = 10000;
            Entity minE        = null;

            foreach (var entity in this.models)
            {
                foreach (var sent in entity.sentenses)
                {
                    var d = LevenshteinDistance.Compute(s, sent);
                    if (d == 0)
                    {
                        return new CompareResult {
                                   Success = true, BestResult = entity, Rank = 100
                        }
                    }
                    ;
                    if (d < minDistance)
                    {
                        minDistance = d;

                        minE = entity;
                    }
                }
            }
            if (s.Length < 5 && minDistance == 1)
            {
                return new CompareResult {
                           Success = true, BestResult = minE, Rank = 95
                }
            }
            ;
            if (s.Length < 8 && minDistance <= 2)
            {
                return new CompareResult {
                           Success = true, BestResult = minE, Rank = 95 - minDistance * 5
                }
            }
            ;
            if (s.Length < 12 && minDistance <= 3)
            {
                return new CompareResult {
                           Success = true, BestResult = minE, Rank = 90 - minDistance * 10
                }
            }
            ;

            var r = 60 - minDistance * 5;

            if (r < 0)
            {
                r = 0;
            }
            return(new CompareResult {
                Success = false, BestResult = minE, Rank = r
            });
        }
    }
}
Пример #8
0
        public static RetrieveEntityResult <string> BestLevenshteinMatch
        (
            this IEnumerable <string> @this,
            string search,
            double tolerance = 0.25
        )
        {
            var candidates = @this.Select
                             (
                s =>
            {
                var distance = LevenshteinDistance.Compute
                               (
                    s.ToLowerInvariant(),
                    search.ToLowerInvariant()
                               );

                var maxDistance = Math.Max(s.Length, search.Length);
                var percentile  = distance / (float)maxDistance;

                return(value: s, distance, percentile);
            }
                             );

            var passing = candidates.Where(c => c.percentile <= tolerance).ToList();

            if (!passing.Any())
            {
                return(RetrieveEntityResult <string> .FromError("No sufficiently close match found."));
            }

            var best = passing.MinBy(c => c.distance).First();

            return(RetrieveEntityResult <string> .FromSuccess(best.value));
        }
        private (string bestMatch, int levenshteinDistance) GetBestMatch(string value, ISet <string> setToMatch)
        {
            if (value == null)
            {
                return(null, 0);
            }
            value = value.ToLower();
            string bestMatch   = null;
            int    bestLevDist = int.MaxValue;
            int    currentLevDist;

            foreach (string setValue in setToMatch)
            {
                if (value == setValue.ToLower())
                {
                    return(setValue, 0);
                }
                currentLevDist = LevenshteinDistance.Compute(value, setValue.ToLower());
                if (setValue.ToLower().Contains(value))
                {
                    currentLevDist -= value.Length;
                }
                else if (value.Contains(setValue.ToLower()))
                {
                    currentLevDist -= setValue.Length;
                }
                if (currentLevDist < bestLevDist)
                {
                    bestLevDist = currentLevDist;
                    bestMatch   = setValue;
                }
            }
            return(bestMatch, bestLevDist);
        }
Пример #10
0
        public async Task Ship(SocketUser user1, SocketUser user2 = null)
        {
            try
            {
                user2 = user2 ?? Context.User;
                await GetAvatar(user1);
                await GetAvatar(user2);

                ProfileImageGeneration.GenerateShipping($"Shipping/{user1.Id}Avatar.png",
                                                        $"Shipping/{user2.Id}Avatar.png", $"Shipping/ship{user1.Id}{user2.Id}.png");

                int distance = LevenshteinDistance.Compute(Utility.GiveUsernameDiscrimComb(user1),
                                                           Utility.GiveUsernameDiscrimComb(user2));

                await Context.Channel.SendFileAsync($"Shipping/ship{user1.Id}{user2.Id}.png", $"💕 Probability: {Math.Round(Math.Min(100, distance*multiplier),2)}%");
            }
            catch (Exception e)
            {
                await SentryService.SendMessage(e.ToString());
            }
            if (File.Exists($"Shipping/{user1.Id}Avatar.png"))
            {
                File.Delete($"Shipping/{user1.Id}Avatar.png");
            }
            if (File.Exists($"Shipping/{user2.Id}Avatar.png"))
            {
                File.Delete($"Shipping/{user2.Id}Avatar.png");
            }
            if (File.Exists($"Shipping/ship{user1.Id}{user2.Id}.png"))
            {
                File.Delete($"Shipping/ship{user1.Id}{user2.Id}.png");
            }
        }
        internal static List <ListViewItem> FindDeveloperById(UnityOfWork unit, string id)
        {
            var developers = unit.Developer.GetAll();

            List <ListViewItem> developersItemList = new List <ListViewItem>();

            var SearcheDeveloper = new Developer()
            {
                Id = id
            };

            foreach (var developer in developers)
            {
                int Distance = LevenshteinDistance.Compute(SearcheDeveloper.Id, developer.Id);

                int moresimilar = 30;

                if (Distance <= 4)
                {
                    ListViewItem item = new ListViewItem(developer.Id);
                    developersItemList.Add(item);
                }
            }
            return(developersItemList);
        }
Пример #12
0
        private void MapPlayers(TeamSheetTeam team, int managerId)
        {
            var leaguePlayers = db.Players.ToList();

            foreach (var player in team.Players)
            {
                string matchText = player.Name.Replace(" ", string.Empty).ToUpper();

                int bestDistance = -1;
                int bestPlayerId = -1;
                foreach (var leaguePlayer in leaguePlayers.Where(x => x.Position == player.Position))
                {
                    var distance = LevenshteinDistance.Compute(matchText, string.Format("{0}-{1}", leaguePlayer.LastName, leaguePlayer.Team.Alias).Replace(" ", string.Empty).ToUpper());
                    if ((bestDistance == -1 || distance < bestDistance) || (distance == bestDistance && leaguePlayer.LastName.Contains(player.Name)))
                    {
                        bestDistance = distance;
                        bestPlayerId = leaguePlayer.PlayerId;
                    }
                }

                if (bestPlayerId != -1)
                {
                    db.ManagerPlayers.Add(new ManagerPlayer(bestPlayerId, managerId, player.Substitute));
                }
            }
        }
        internal static List <ListViewItem> GetProjectsByInput(UnityOfWork unit, string text, string client_Id)
        {
            var projects = unit.Project
                           .GetAll()
                           .Where(p => p.Client.Contains(
                                      unit.Client.GetAll().FirstOrDefault(c => c.Id == client_Id))
                                  );

            List <ListViewItem> ProjectsItemList = new List <ListViewItem>();

            var SearchedProject = new Project()
            {
                Project_ID = text
            };

            foreach (var project in projects)
            {
                int Distance = LevenshteinDistance.Compute(SearchedProject.Project_ID, project.Project_ID);
                if (Distance <= 4)
                {
                    ListViewItem item = new ListViewItem(project.Project_ID.ToString());
                    item.SubItems.Add(project.Description.ToString());
                    item.SubItems.Add(project.DeadLine.ToString());
                    item.SubItems.Add(project.Result.ToString());
                    if (project.Client.Count > 0)
                    {
                        item.SubItems.Add(project.Client.FirstOrDefault().Id);
                    }
                    ProjectsItemList.Add(item);
                }
            }
            return(ProjectsItemList);
        }
Пример #14
0
        static void Analyze()
        {
            Settings settings = Settings.Instance;

            Console.WriteLine("Please enter the directory path to analyze : ");
            var path = PathUtils.Normalize(Console.ReadLine());

            if (string.IsNullOrEmpty(path) || !Directory.Exists(path))
            {
                throw new Exception("Not found path");
            }

            var files = new MusicFileDaoDetector().Search(new List <string>()
            {
                path
            });

            foreach (var i in files)
            {
                IEnumerable <MusicDao> tag = null;
                try
                {
                    tag = new MusicTagDetector(settings.ApiHost, settings.ApiKey, settings.SecretKey).Recognize(i.Path);
                }
                catch (Exception e)
                {
                    Console.WriteLine("File audio error : " + i.Path);
                    Console.WriteLine(e.Message);
                    continue;
                }
                if (tag == null || tag.Count() <= 0)
                {
                    Console.WriteLine("File not recognized : " + i.Path);
                    continue;
                }
                Console.WriteLine("File recognized : " + i.Path);

                if (tag.Count() == 1)
                {
                    i.Map(tag.First());
                }
                else
                {
                    int      nbMin  = int.MaxValue;
                    MusicDao tagMin = null;
                    foreach (var j in tag)
                    {
                        var nb = LevenshteinDistance.Compute(i.FileName, string.Format("{0} - {1}", j.Artist, j.Title));
                        if (nb < nbMin)
                        {
                            nbMin  = nb;
                            tagMin = j;
                        }
                    }
                    i.Map(tagMin);
                }
                i.Save();
            }
        }
Пример #15
0
        public void LevenshteinDistance_ComputeWithValidStrings_ShouldWork(string string1, string string2, int distance)
        {
            // Act
            var result = LevenshteinDistance.Compute(string1, string2);

            // Assert
            Assert.AreEqual(distance, result);
        }
Пример #16
0
        public Task <List <LiteTag> > FindTagsAsync(ulong guildId, string name, int stop)
        {
            int tolerance = LiteConfiguration.Load().RelatedTagsLimit;
            var tags      = Tags.Where(x => x.GuildId == guildId && x.Aliases.Any(y => LevenshteinDistance.Compute(name, y) <= tolerance));
            var selected  = tags.OrderBy(x => x.Aliases.Sum(y => LevenshteinDistance.Compute(name, y))).Take(stop);

            return(Task.FromResult(selected.ToList()));
        }
Пример #17
0
 /// <summary>
 /// Return the Levenshtein distance (edit distance) between the given PersonResponsibility's commentary and function fields.
 ///
 /// Of temporary use during cleanup of PersonResponsibility.Commentary field when virtual function field introduced.
 /// </summary>
 /// <returns></returns>
 public virtual int GetEditDistanceBetweenCommentaryAndFunction()
 {
     if (!string.IsNullOrEmpty(this.Commentary) && !string.IsNullOrEmpty(this.GetPersonFunctionUnitSummary()))
     {
         return(LevenshteinDistance.Compute(this.Commentary, this.GetPersonFunctionUnitSummary()));
     }
     return(int.MaxValue);
 }
Пример #18
0
        public void LevenshteinDistance_Compute_IsCommutative(string leftString, string rightString)
        {
            // Act
            var distanceLeft  = LevenshteinDistance.Compute(leftString, rightString);
            var distanceRight = LevenshteinDistance.Compute(rightString, leftString);

            // Assert
            Assert.AreEqual(distanceLeft, distanceRight);
        }
        public void LevenshteinDistance_Compute_IsCommutative(string string1, string string2)
        {
            // Act
            var distanceLeft  = LevenshteinDistance.Compute(string1, string2);
            var distanceRight = LevenshteinDistance.Compute(string2, string1);

            // Assert
            Assert.AreEqual(distanceLeft, distanceRight);
        }
Пример #20
0
        public ActionResult Search()
        {
            string tag = Request["tag"];

            if (string.IsNullOrWhiteSpace(tag))
            {
                return(RedirectToAction("Index"));
            }
            tag = tag.Trim();
            var onePlayer = db.Players.Where(p => p.Tag == tag).FirstOrDefault();

            if (onePlayer != null)
            {
                return(RedirectToAction("Detail", new { tag = onePlayer.URL }));
            }
            tag = tag.ToUpperInvariant();
            char[] tagArray   = tag.ToCharArray();
            var    allPlayers = from p in db.Players
                                select p;
            int           maxDistance  = Math.Max((int)((double)tagArray.Length / 5.0), 1); //fool with this if it sux
            List <Player> foundPlayers = new List <Player>();

            foreach (Player player in allPlayers)
            {
                string playerTag = player.Tag.ToUpperInvariant();
                int    distance  = LevenshteinDistance.Compute(playerTag, tag);
                if (distance <= maxDistance)
                {
                    var computeArray = playerTag.ToCharArray();
                    int union        = tagArray.Union(computeArray).Count();     //total chars
                    int intersect    = tagArray.Intersect(computeArray).Count(); //shared chars
                    if ((union * 1.0 - intersect) / union <= .5)
                    {                                                            //non-shared chars. should be close to 0
                        foundPlayers.Add(player);
                    }
                }
            }
            int players = foundPlayers.Count();

            if (players == 0)
            {
                db.Dispose();
                return(RedirectToAction("Index"));
            }
            else if (players == 1)
            {
                String playerURL = foundPlayers.First().URL;
                db.Dispose();
                return(RedirectToAction("Detail", new { tag = playerURL }));
            }
            else
            {
                var viewPlayers = foundPlayers.AsQueryable <Player>();
                db.Dispose();
                return(View("SearchFoundMultiple", viewPlayers));
            }
        }
Пример #21
0
        public IEnumerable <PlayerScore> Run(IEnumerable <Player> players, IEnumerable <string> alreadyPlayed)
        {
            var path       = @"..\..\..\ESPNStatImporter\bin\Debug";
            var files      = Directory.GetFiles(path, "*.json");
            var newestWeek = files.Select(f => int.Parse(Path.GetFileNameWithoutExtension(f).Substring(4))).OrderByDescending(f => f).First();
            var file       = File.ReadAllText(Path.Combine(path, $"week{newestWeek}.json"));
            var results    = JsonConvert.DeserializeObject <PlayerResult[]>(file);

            var misses = new List <PlayerResult>();

            foreach (var result in results)
            {
                if (alreadyPlayed.Contains(result.Team, StringComparer.CurrentCultureIgnoreCase))
                {
                    continue;
                }

                var team = MapTeam(result.Team);

                var hits = players
                           .Where(p => string.Equals(p.Team, team, StringComparison.CurrentCultureIgnoreCase) &&
                                  string.Equals(p.Position, result.Position, StringComparison.CurrentCultureIgnoreCase))
                           .Select(p =>
                                   new
                {
                    Player   = p,
                    Distance = LevenshteinDistance.Compute(p.Name, result.Name),
                })
                           .OrderBy(x => x.Distance)
                           .ToArray();

                if (hits.Any(h => h.Distance <= 4 && h.Player.Name == "Matt Ryan"))
                {
                    var x = 1;
                }

                if (!hits.Any() || hits.First().Distance > 4)
                {
                    misses.Add(result);
                    var score = PlayerScore.CalcScore(result);
                    if (result.Team == "FA" || score == 0)
                    {
                        continue;
                    }
                    //yield return new PlayerScore(new Player { Name = $"MISS - {result.Name}", Team = team }, result);
                }
                else
                {
                    var hit = hits.First().Player;
                    if (result.Team == "FA" || hit.Salary == 0)
                    {
                        continue;
                    }
                    yield return(new PlayerScore(hit, result));
                }
            }
        }
Пример #22
0
        public Task <ClizerPostAction> Intercept(CommandContext context, CancellationToken cancellationToken)
        {
            if (context.Command is not null)
            {
                return(Task.FromResult(ClizerPostAction.CONTINUE));
            }

            Console.WriteLine($"Unknown command for {context.Execute}. See '--help'");

            // list similar commands
            if (context.RootCommand is null)
            {
                return(Task.FromResult(ClizerPostAction.CONTINUE));
            }

            var similarCommands = context.RootCommand
                                  .GetAll()
                                  .Select(x => x.Name.ToLower())
                                  .Where(x => LevenshteinDistance.Compute(x, context.Execute) <= 3);

            if (similarCommands.Any())
            {
                Console.WriteLine("Most similar commands:");
                foreach (var similar in similarCommands)
                {
                    Console.WriteLine($" - {similar}");
                }
            }

            // list similar aliases
            var aliasesResolver = _services.GetService <AliasesResolver>();

            if (aliasesResolver is null)
            {
                return(Task.FromResult(ClizerPostAction.EXIT));
            }

            var similarAliases = aliasesResolver
                                 .Aliases
                                 .Select(x => x.Name.ToLower())
                                 .Where(x => LevenshteinDistance.Compute(context.Execute, x) <= 2);

            if (!similarAliases.Any())
            {
                return(Task.FromResult(ClizerPostAction.EXIT));
            }

            Console.WriteLine(string.Empty);
            Console.WriteLine("Most similar aliases:");
            foreach (var similar in similarAliases)
            {
                Console.WriteLine($" - {similar}");
            }

            return(Task.FromResult(ClizerPostAction.EXIT));
        }
Пример #23
0
        public void ShouldReturnCostOfSeventeen()
        {
            string validOpt      = "anthropomorphology";
            string optToValidate = "addddddddddddddddd";
            int    expectedCost  = 17;

            LevenshteinCost result = LevenshteinDistance.Compute(optToValidate, validOpt);

            Assert.AreEqual(expectedCost, result.Cost);
        }
Пример #24
0
        public Dictionary <Faq, int> GetSimilar(IConfigurationRoot config, ulong guildId, string name)
        {
            var faqs          = GetAll(guildId);
            var faqDictionary = faqs.ToDictionary(faq => faq, faq => LevenshteinDistance.Compute(name, faq.Name));

            return(faqDictionary
                   .Where(pair => pair.Value <= Convert.ToInt32(config["MaxLevenshteinDistance"]))
                   .OrderBy(pair => pair.Value)
                   .ToDictionary());
        }
Пример #25
0
        public static IDictionary <string, int> WordDistanceToWordsInSentence(string word, string sentence)
        {
            IDictionary <string, int> wordDistanceToWordsInSentence = new Dictionary <string, int>();

            foreach (string wordInSentence in sentence.Split(' '))
            {
                wordDistanceToWordsInSentence.Add(wordInSentence, LevenshteinDistance.Compute(word, wordInSentence));
            }
            return(wordDistanceToWordsInSentence);
        }
Пример #26
0
        internal async Task <GlobalFaqEntry> FuzzyGetGlobalEntryAsync(string name)
        {
            var guildEntries = await _mongo.GetCollection <GlobalFaqEntry>(_client).GetGlobalFaqsAsync();

            var entryDictionary = guildEntries.ToDictionary(globalEntry => globalEntry,
                                                            globalEntry => LevenshteinDistance.Compute(name, globalEntry.Name));
            var entry = entryDictionary.MinBy(pair => pair.Value);

            return(entry.Value <= _config.MaxLevenshteinDistance ? entry.Key : null);
        }
Пример #27
0
        internal async Task <Dictionary <GlobalFaqEntry, int> > GetSimilarGlobalEntries(string name)
        {
            var guildEntries = await _mongo.GetCollection <GlobalFaqEntry>(_client).GetGlobalFaqsAsync();

            var entryDictionary = guildEntries.ToDictionary(globalEntry => globalEntry,
                                                            globalEntry => LevenshteinDistance.Compute(name, globalEntry.Name));

            return(entryDictionary.Where(pair => pair.Value <= _config.MaxLevenshteinDistance).OrderBy(pair => pair.Value)
                   .ToDictionary());
        }
Пример #28
0
        public void ShouldReturnKeyAndCostOfOne()
        {
            string validOpt      = "Cheese";
            string optToValidate = "Chaese";
            var    expected      = (validOpt, 1);

            LevenshteinCost result = LevenshteinDistance.Compute(optToValidate, validOpt);

            Assert.AreEqual(expected.Item2, result.Cost);
            Assert.AreEqual(expected.validOpt, result.Key);
        }
Пример #29
0
 public static bool CurrentListComparer(string line)
 {
     foreach (var item in itemList)
     {
         if (LevenshteinDistance.Compute(line, item.Name) < 8)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #30
0
        private void uninstalled_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            int limit = 6;

            if (e.Action == NotifyCollectionChangedAction.Add)
            {
                // scroll the new item into view
                //listView.ScrollIntoView(e.NewItems[0]);
                //Console.WriteLine(((INSTALLED)e.NewItems[0]).name);
                INSTALLED lv_uninstalled_item = ((INSTALLED)e.NewItems[0]);
                INSTALLEDS.Remove(lv_uninstalled_item);
                foreach (SHORTCUT item in lv_alllnk.Items)
                {
                    int diff = LevenshteinDistance.Compute(item.name, lv_uninstalled_item.name);
                    if (diff <= limit)
                    {
                        lv_dellnk.Items.Add(item);
                        break;
                    }
                }
                foreach (SHORTCUT item in lv_allstartmenu.Items)
                {
                    int diff = LevenshteinDistance.Compute(item.name, lv_uninstalled_item.name);
                    if (diff <= limit)
                    {
                        lv_delstartmenu.Items.Add(item);
                        break;
                    }
                }
            }
            else if (e.Action == NotifyCollectionChangedAction.Remove)
            {
                INSTALLED lv_uninstalled_item = ((INSTALLED)e.OldItems[0]);
                INSTALLEDS.Add(lv_uninstalled_item);
                foreach (SHORTCUT item in lv_dellnk.Items)
                {
                    int diff = LevenshteinDistance.Compute(item.name, lv_uninstalled_item.name);
                    if (diff < limit)
                    {
                        lv_dellnk.Items.Remove(item);
                        break;
                    }
                }
                foreach (SHORTCUT item in lv_delstartmenu.Items)
                {
                    int diff = LevenshteinDistance.Compute(item.name, lv_uninstalled_item.name);
                    if (diff < limit)
                    {
                        lv_delstartmenu.Items.Remove(item);
                        break;
                    }
                }
            }
        }