Exemple #1
0
        public List <String> regularSearch(String query, String relevant, string[] cityCheckedByUser)
        {
            Dictionary <String, double> rankedDocuments;
            Document      queryInSidDoc = new Document("", "", "", "", query, "");
            List <String> max50Docs     = new List <String>();

            // false in parser min that it is query (not document)
            Token[]  tokens = parser.processDoc(queryInSidDoc);
            Document queryInSidDocRelevant = new Document("", "", "", "", relevant, "");

            Token[] tokensRelevant = parser.processDoc(queryInSidDocRelevant);
            if (stemmed)
            {
                tokens = stemming.StemTokens(tokens);
            }
            if (cityCheckedByUser != null)
            {
                rankedDocuments = ranker.processQueryWithCities(tokens, tokensRelevant, cityCheckedByUser);
            }
            else
            {
                rankedDocuments = ranker.processQuery(tokens, tokensRelevant);
            }
            List <KeyValuePair <string, double> > sorted = (from kv in rankedDocuments orderby kv.Value select kv).ToList();

            // we return only 50 docs to query
            sorted.Reverse();
            for (int i = 0; i < 50 && i < sorted.Count; i++)
            {
                max50Docs.Add(sorted[i].Key.ToString());
                Console.WriteLine(max50Docs[i]);
            }

            return(max50Docs);
        }
Exemple #2
0
        public static void Main()
        {
            Parser           parser = new Parser(@"stop_words.txt", false);
            VariablesAjuster va     = new VariablesAjuster(@"qrel.txt");
            //QueryMutator qm = new QueryMutator(@"X:\Junk\glove.6B.100dc.vec", 1);
            Ranker ranker  = new Ranker(@"D:\Posting", false, @"C:\a\glove.6B.100dc.vec");
            double b       = 0.00;
            double k       = 1.2;
            double maxB    = 0;
            double maxK    = 0;
            int    max     = 0;
            String queries = File.ReadAllText(@"queries.txt");

            String[]  q        = queries.Split(new string[] { "\r\n\r\n\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            Token[][] arr      = new Token[15][];
            Token[][] relevant = new Token[15][];
            //Token[][] irrelevant = new Token[15][];
            Query[] col = new Query[15];
            for (int i = 0; i < 15; i++)
            {
                col[i]      = new Query(q[i]);
                arr[i]      = parser.processDoc(new Document(null, null, null, null, col[i].getQuery(), null));
                relevant[i] = parser.processDoc(new Document(null, null, null, null, col[i].getRelevant(), null));
                //irrelevant[i] = parser.processDoc(new Document(null, null, null, null, col[i].getNonRelevant(), null));
            }

            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 20; j++)
                {
                    ranker.b = b;
                    ranker.k = k;
                    int score = 0;
                    //calculate query and compare
                    for (int ki = 0; ki < 15; ki++)
                    {
                        //Token[][] mutated = qm.getPermutations(arr[k]);
                        Dictionary <string, double> queryResult = ranker.processQuery(arr[ki], relevant[ki]);
                        //Dictionary<string, double> queryResult = ranker.processQuerySemantically(arr[k], relevant[k]);

                        //Dictionary<string, double> irrelevantResults = ranker.processQuery(irrelevant[k]);
                        //queryResult = va.manipulateResults(queryResult, irrelevantResults, "substract");
                        score += va.compareResults(col[ki], queryResult);
                    }
                    Console.WriteLine("k=" + Math.Round(k, 2) + " b=" + Math.Round(b, 2) + " Score: " + score);
                    //compare with max if larger - update
                    if (score > max)
                    {
                        max  = score;
                        maxB = b;
                        maxK = k;
                    }
                    b += 0.05;
                }
                k += 0.05;
                b  = 0.00;
            }
            Console.WriteLine("MAX: B=" + Math.Round(maxB, 2) + " K=" + Math.Round(maxK, 2) + " Score: " + max);
        }