示例#1
0
        public Task <bool> TryLoad()
        {
            AppSearchFrequency.Load();

            foreach (var file in LoadFileList())
            {
                var name = Path.GetFileName(file.ToLower());

                _trie.Add(name, file);

                if (!file.Contains(" "))
                {
                    continue;
                }

                // Support search for "Mozilla Firefox" through both "Mozilla" and "Firefox"
                var variations = name.Split(" ");
                foreach (var variation in variations)
                {
                    _trie.Add(variation, file);
                }

                // Support "Visual Studio Code" -> "VSC"
                if (variations.Length > 1)
                {
                    var fuzz = string.Join(',', variations.Select(part => part[0]).ToArray()).Replace(",", "");
                    _trie.Add(fuzz, file);
                }
            }

            IsLoaded = true;
            return(Task.FromResult(IsLoaded));
        }
示例#2
0
        public Task <bool> TryLoad()
        {
            // Load actual control panel items
            var items = LoadControlPanelItems();

            // Lookup registry details for each item
            var registryRoot = Registry.LocalMachine.OpenSubKey(ControlPanelRegistryPath);

            foreach (var subKeyName in registryRoot?.GetSubKeyNames())
            {
                // Get default value
                var value = registryRoot.OpenSubKey(subKeyName)?.GetValue("");

                // Ensure registry entry actually is a control panel item
                var item = items.FirstOrDefault(i => i.Name.ToLower().Equals(value?.ToString().ToLower()));
                if (item != null)
                {
                    item.RegistryKey = subKeyName;
                }
            }

            foreach (var controlPanelItem in items)
            {
                _controlPanelItems.Add(controlPanelItem.Name.ToLower(), controlPanelItem);
            }

            IsLoaded = true;
            return(Task.FromResult(IsLoaded));
        }
示例#3
0
        private void LoadFile(string fileName)
        {
            var word = File.ReadAllText(fileName);

            m_Trie.Add(word.AsMemory(), Path.GetFileName(fileName));
            m_WordCount += word.Split(delimiters, StringSplitOptions.RemoveEmptyEntries).Length;
            Debug.WriteLine($"Loaded {word.Length} characters.");
            Debug.WriteLine($"Trie size = {m_Trie.Size}");
        }
示例#4
0
文件: Deck.cs 项目: adelasm/FPlus
        public Card ClosestCard(string input)
        {
            var trie = new UkkonenTrie <int>();

            for (int i = 0; i < cards.Length; i++)
            {
                trie.Add(cards[i].name, i);
            }

            return(cards[trie.Retrieve(input).First()]);
        }
示例#5
0
        public bool TryLoad()
        {
            foreach (var browserType in Enum.GetValues(typeof(BrowserType)).Cast <BrowserType>())
            {
                var _bookmarkExtractor = MapBrowserTypeToExtractor(browserType);
                foreach (var bookmarkModel in _bookmarkExtractor.Extract())
                {
                    var tuple = new Tuple <BrowserType, AbstractBookmarkModel>(browserType, bookmarkModel);
                    _trie.Add(bookmarkModel.Name.ToLower(), tuple);
                }
            }

            return(true);
        }
示例#6
0
        public bool TryLoad()
        {
            AppSearchFrequency.Load();

            foreach (var file in LoadFileList())
            {
                var name = Path.GetFileName(file.ToLower());

                _trie.Add(name, file);

                // Support search for "Mozilla Firefox" through both "Mozilla" and "Firefox"
                if (file.Contains(" "))
                {
                    var variations = name.Split(" ");
                    foreach (var variation in variations)
                    {
                        _trie.Add(variation, file);
                    }
                }
            }

            return(true);
        }
示例#7
0
        public async Task <bool> TryLoad()
        {
            foreach (var browserType in Enum.GetValues(typeof(BrowserType)).Cast <BrowserType>())
            {
                var bookmarkExtractor = MapBrowserTypeToExtractor(browserType);
                foreach (var bookmarkModel in await bookmarkExtractor.Extract().ConfigureAwait(false))
                {
                    var tuple = new Tuple <BrowserType, AbstractBookmarkModel>(browserType, bookmarkModel);
                    _trie.Add(bookmarkModel.Name.ToLower(), tuple);
                }
            }

            IsLoaded = true;
            return(IsLoaded);
        }
示例#8
0
        public bool TryLoad()
        {
            _defaultBrowserType = DetectDefaultBrowser();

            if (_defaultBrowserType == BrowserType.Unknown)
            {
                return(false);
            }

            _bookmarkExtractor = MapBrowserTypeToExtractor(_defaultBrowserType);

            foreach (var bookmarkModel in _bookmarkExtractor.Extract())
            {
                _trie.Add(bookmarkModel.Name.ToLower(), bookmarkModel);
            }

            return(true);
        }
示例#9
0
        static void Main(string[] args)
        {
            var fileHelperEngine = new FileHelperEngine <GeoLocation>();
            var geoLocations     = fileHelperEngine.ReadFile(@"C:\Users\Gautham\Downloads\IN\IN.txt");

            Console.WriteLine($"Count={geoLocations.Length}");

            var indexer = new UkkonenTrie <GeoLocation>(geoLocations.Length);

            foreach (var geoLocation in geoLocations)
            {
                indexer.Add(geoLocation.AsciiName, geoLocation);
            }
            Console.WriteLine("Finished indexing");

            var result = indexer.Retrieve("Bangalore");

            foreach (var geoLocation in result)
            {
                Console.WriteLine($"Id={geoLocation.Id} Name={geoLocation.Name}");
            }
        }
示例#10
0
        //Load a frequency dictionary or create a frequency dictionary from a text corpus
        public static void Main(string[] args)
        {
            var path = AppDomain.CurrentDomain.BaseDirectory + @"all-suggests-cleaned.txt";

            Console.Write("Creating trie ...");
            long      memSize   = GC.GetTotalMemory(true);
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            var wordToIndex   = new Dictionary <string, int>();
            var wordFrequency = new Dictionary <string, int>();
            var phraseList    = new List <string>();
            int count         = 0;

            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    var s = sr.ReadLine();
                    phraseList.Add(s.Trim());

                    var tokens = s.Trim().Split(' ');

                    for (int i = 0; i < tokens.Length; ++i)
                    {
                        int index = 0, freq = 0;
                        if (!wordToIndex.TryGetValue(tokens[i], out index))
                        {
                            wordToIndex[tokens[i]] = count++;
                        }
                        if (!wordFrequency.TryGetValue(tokens[i], out freq))
                        {
                            wordFrequency[tokens[i]] = 1;
                        }
                        else
                        {
                            wordFrequency[tokens[i]] = freq + 1;
                        }
                    }
                }
            }

            long memDeltaForStoringValues = GC.GetTotalMemory(true) - memSize;

            Console.WriteLine("Memory for storing value: " + memDeltaForStoringValues + ". Going to add to trie");

            var trie  = new UkkonenTrie <int>(1);
            int value = 0;

            foreach (var phrase in phraseList)
            {
                trie.Add(phrase, value++);
            }

            //Load a frequency dictionary
            stopWatch.Stop();
            long memDelta = GC.GetTotalMemory(true) - memSize;

            Console.WriteLine("Done in " + stopWatch.Elapsed.TotalMilliseconds.ToString("0.0") + "ms "
                              + (memDelta / 1024 / 1024.0).ToString("N0") + " MB. Token count: " + wordToIndex.Count);

            // spell checker
            var spellChecker = new SymSpell(wordToIndex.Count, 2);

            foreach (var entry in wordFrequency)
            {
                spellChecker.CreateDictionaryEntry(entry.Key, entry.Value);
            }

            while (true)
            {
                Console.WriteLine("Input string to search:");
                var s = Console.ReadLine();
                if (s == "exit")
                {
                    return;
                }

                var normalized = s.ToLower();
                var suggests   = spellChecker.LookupCompound(normalized, 2);

                // lookup in trie
                var results = trie.Retrieve(normalized);

                var resultCount = 0;
                foreach (var result in results)
                {
                    Console.WriteLine("--> " + phraseList[result]);
                    resultCount++;
                }

                var suggest = suggests[0].term;
                foreach (var sug in suggests)
                {
                    Console.WriteLine("Can search for: " + sug.term);
                }
                if (suggest != normalized)
                {
                    Console.WriteLine("Did you mean: " + suggest + "?");
                }

                Console.WriteLine(String.Format("Found {0} result", resultCount));
            }
        }