// start the run in a separate thread private void Start_Click(object sender, RoutedEventArgs e) { reset.IsEnabled = true; readfile = new ReadFile(); Start.IsEnabled = false; stem = checkBox.IsChecked.Value; Start.Content = "Running..."; Thread readFromFolderThread = new Thread(delegate() { DoEverything(); }); readFromFolderThread.Start(); stem = checkBox.IsChecked.Value; }
private void reset_button(object sender, RoutedEventArgs e) { resetPressed = true; if (readfile != null) { readfile.resetReadFile(); } if (indexer != null) { indexer.resetIndexer(); } Start.Content = "START"; StatsTextBlock.Items.Clear(); readfile = new ReadFile(); indexer = null; if (File.Exists(PostingsPath + @"\DocPostings.txt")) { File.Delete(PostingsPath + @"\DocPostings.txt"); } if (File.Exists(PostingsPath + @"\TermPostings.txt")) { File.Delete(PostingsPath + @"\TermPostings.txt"); } if (File.Exists(PostingsPath + @"\DocPostingsStemming.txt")) { File.Delete(PostingsPath + @"\DocPostingsStemming.txt"); } if (File.Exists(PostingsPath + @"\TermPostingsStemming.txt")) { File.Delete(PostingsPath + @"\TermPostingsStemming.txt"); } stop(); if (postingsPathOn && dataPathOn) { selectQueryFile.IsEnabled = false; QueryEntry.IsEnabled = false; Start.IsEnabled = true; save_result_button.IsEnabled = false; } }
// the function that runs readfile, parser, indexer and postings private void DoEverything() { this.Dispatcher.Invoke((Action)(() => { Start.Content = "Parsing..."; })); Stopwatch mainwatch = new Stopwatch(); mainwatch.Start(); readfile.readFilesFromFolder(DataSetPath, stem);// read the files and parse if (resetPressed) { stop(); return; } indexer = new Indexer(); TimeSpan readfileTime = readfile.stopwatch.Elapsed; int docCount = readfile.documents.Count; this.Dispatcher.Invoke((Action)(() => { Start.Content = "Indexing Terms..."; StatsTextBlock.Items.Clear(); StatsTextBlock.Items.Add("Read file + Parse Time : " + readfileTime); StatsTextBlock.Items.Add("Number of documents parsed: " + docCount); StatsTextBlock.Items.Add("Total Time so far: " + readfileTime); })); indexer.createTermAndDictionaries(readfile.documents);//creates the dictionaries (inverted index) TimeSpan indexerTime = indexer.stopwatch1.Elapsed; readfile = null; int termsCount = indexer.sortedTermDictionary.Count; if (resetPressed) { stop(); return; } this.Dispatcher.Invoke((Action)(() => { Start.Content = "Creating postings..."; StatsTextBlock.Items.Clear(); StatsTextBlock.Items.Add("Read file + Parse Time : " + readfileTime); StatsTextBlock.Items.Add("Number of documents parsed: " + docCount); StatsTextBlock.Items.Add("inverted Index Creation Time : " + indexerTime); StatsTextBlock.Items.Add("Number of terms indexed : " + termsCount); StatsTextBlock.Items.Add("Total Time so far: " + (readfileTime + indexerTime)); })); Stopwatch lastmainwatch = new Stopwatch(); lastmainwatch.Start(); // writes the documents postings file string Stemming = ""; if (stem) { Stemming = "Stemming"; } using (StreamWriter sw = File.AppendText(@PostingsPath + @"\DocPostings" + Stemming + ".txt")) { string json = JsonConvert.SerializeObject(indexer.docDictionary, Formatting.Indented); sw.Write(json); } this.Dispatcher.Invoke((Action)(() => { Start.Content = "Creating postings..."; StatsTextBlock.Items.Clear(); StatsTextBlock.Items.Add("Read file + Parse Time : " + readfileTime); StatsTextBlock.Items.Add("Number of documents parsed: " + docCount); StatsTextBlock.Items.Add("inverted Index Creation Time : " + indexerTime); StatsTextBlock.Items.Add("Number of terms indexed : " + termsCount); StatsTextBlock.Items.Add("Documents postings created."); StatsTextBlock.Items.Add("Total Time so far : " + (readfileTime + indexerTime + lastmainwatch.Elapsed)); })); indexer.docDictionary.Clear(); if (resetPressed) { stop(); return; } // writes the terms postings file indexer.CreateTermsPostings(@PostingsPath, stem); indexer.sortedTermDictionary.Clear(); // the text file from which the inverted index is loaded and showed indexer = null; readfile = null; this.Dispatcher.Invoke((Action)(() => { StatsTextBlock.Items.Clear(); StatsTextBlock.Items.Add("Read file + Parse Time : " + readfileTime); StatsTextBlock.Items.Add("Number of documents parsed: " + docCount); StatsTextBlock.Items.Add("inverted Index Creation Time : " + indexerTime); StatsTextBlock.Items.Add("Number of terms indexed : " + termsCount); StatsTextBlock.Items.Add("Documents postings created."); StatsTextBlock.Items.Add("Terms postings created."); StatsTextBlock.Items.Add("Posting Files creation Time: " + lastmainwatch.Elapsed.ToString()); StatsTextBlock.Items.Add("Total Time : " + (mainwatch.Elapsed)); if (File.Exists(@PostingsPath + @"\TermPostings.txt")) { ReadTermsPostingsButton.IsEnabled = true; } ShowInvertedIndex.IsEnabled = true; })); if (resetPressed) { stop(); return; } this.Dispatcher.Invoke((Action)(() => { Start.Content = "START (press RESET)"; })); lastmainwatch.Stop(); }