Ejemplo n.º 1
0
        public void DamerauLevenshteinTest()
        {
            var first  = "fкул";
            var second = "кит";
            var result = DamerauLevenshteinDistance.GetDistance(first, second);

            Assert.AreEqual(3, result);
        }
Ejemplo n.º 2
0
        public async Task <List <DocumentModel> > ExecuteSearch(IndexModel indexModel, SearchModel searchModel)
        {
            var ids    = new List <Guid>();
            var tokens = await _analyzer.Anal(searchModel.Term);

            var keys = new List <string>();
            var idxs = await DatabaseService.GetIndexes(indexModel, searchModel.Key);

            foreach (var dict in idxs)
            {
                var keys1 = dict.Keys.Where(x => tokens
                                            .Any(y => DamerauLevenshteinDistance
                                                 .GetDistance(x, y) < 2))
                            .ToList();

                foreach (var k in keys1)
                {
                    if (!keys.Contains(k))
                    {
                        keys.Add(k);
                    }
                }
            }

            foreach (var dict in idxs)
            {
                if (dict.Keys.Count(x => keys.Contains(x)) >= keys.Count - 2)
                {
                    foreach (var key in keys)
                    {
                        if (dict.ContainsKey(key))
                        {
                            ids.Add(dict[key]);
                        }
                    }
                }
            }

            var result = new List <DocumentModel>();

            foreach (var id in ids.Distinct())
            {
                result.Add(await DatabaseService.FindById(indexModel, id));
            }
            return(result);
        }