Ejemplo n.º 1
0
        void RunPhase1()
        {
            MainIndex = new PositionalIndex();

            IndexEnglishFiles();
            //IndexPersianFiles();

            var tokenRepeats = MainIndex.GetAllTokensRepeats()
                               .OrderByDescending(x => x.repeatCount)
                               .ToList();

            Console.WriteLine(string.Join(",", tokenRepeats));
            Console.WriteLine("Unique Token count is: " + tokenRepeats.Count);


            WriteInFile(MainIndex, "MainIndex");
            GenerateBiword();

            while (true)
            {
                Console.WriteLine("Enter your command: [query|proximity(windowSize)|and|compress|decompress|info(word)]");
                var command      = Console.ReadLine();
                var commandWords = command.Split(' ');

                if (command == "and" || command == "a" || command == "q" || command == "query" || commandWords.First() == "p" || commandWords.First() == "proximity")
                {
                    Console.WriteLine("Enter your query: ");
                    var query = Console.ReadLine();

                    if (string.IsNullOrEmpty(query))
                    {
                        Console.WriteLine("Your query is empty.");
                        continue;
                    }

                    var queryExecuter = new QueryExecuter(query, MainIndex);

                    List <SearchResult> result = null;
                    if (command == "and" || command == "a")
                    {
                        result = queryExecuter.ExecuteAndSearch();
                    }
                    else
                    {
                        if (commandWords.First() == "p" || commandWords.First() == "proximity")
                        {
                            result = queryExecuter.ExecuteTfIdfSearch(Convert.ToInt32(commandWords[1]));
                        }
                        else
                        {
                            result = queryExecuter.ExecuteTfIdfSearch();
                        }
                    }



                    Console.WriteLine("Query after preprocess: " + JsonConvert.SerializeObject(queryExecuter.Query));
                    Console.WriteLine(string.Join(Environment.NewLine, result));
                    Console.WriteLine("---------------------------------" + Environment.NewLine);

                    Console.WriteLine("Enter classification filter: [1|2|3|4|no filter(Enter)]");
                    var  classFilterLine = Console.ReadLine();
                    byte classFilter     = Convert.ToByte(classFilterLine);

                    queryExecuter = new QueryExecuter(query, MainIndex);
                    result        = queryExecuter.ExecuteTfIdfSearch(null, classFilter);
                    Console.WriteLine(string.Join(Environment.NewLine, result));
                    Console.WriteLine("---------------------------------" + Environment.NewLine);
                }
                else if (command.StartsWith("info"))
                {
                    var word = command.Split(' ')[1];

                    Console.WriteLine(MainIndex.GetWordInfo(word));
                }
                else if (command.Contains("compress"))
                {
                    Console.WriteLine("Enter compress mode: [gamma|varbyte]");
                    var modeStr = Console.ReadLine();
                    CompressUtility.Mode = (CompressMode)Enum.Parse(typeof(CompressMode), modeStr);

                    if (command.StartsWith("de"))
                    {
                        Decompress();
                    }
                    else
                    {
                        Compress();
                    }
                }
            }
        }