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); }
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); }