/// <summary> /// Print out the word occurences. /// </summary> /// <param name="freq"></param> private static void Print(OccurenceInfo freq) { Console.Write(freq.Occurence+" occurence(s): "); string printStr = String.Empty; //used to avoid redundant last comma foreach (string word in freq) { if (!String.IsNullOrEmpty(printStr)) { Console.Write(printStr + ", "); } printStr = word; } Console.WriteLine(printStr); }
/// <summary> /// Use the word frequency as an index into an array where each entry in the /// array contains the word(s) with that frequency. /// </summary> /// <returns></returns> private OccurenceInfo[] BuildFrequencyArray() { OccurenceInfo[] result = new OccurenceInfo[maxWordCount + 1]; foreach (string word in wordCount.Keys) { int frequency = wordCount[word]; if (result[frequency] == null) { result[frequency] = new OccurenceInfo(frequency); } result[frequency].Add(word); } return result; }
/// <summary> /// Compare a single frequencyInfo object to the original test data. /// </summary> /// <param name="frequencyInfo"></param> /// <param name="testData"></param> private void TestResult(OccurenceInfo frequencyInfo, TestData testData) { Assert.AreEqual(frequencyInfo.Words.Count, testData.words.Length); for (int i = 0; i < testData.words.Length; i++) { Assert.IsTrue(frequencyInfo.Words.Contains(testData.words[i])); } }
/// <summary> /// Traverse frequency array from the back to get n most frequency words. /// </summary> /// <param name="frequencyArray"></param> /// <param name="n"></param> /// <returns></returns> private WordOccurences GetTopNWords(OccurenceInfo[] frequencyArray, int n) { WordOccurences result = new WordOccurences(); //have to filter out null array entries int len = frequencyArray.Length; int index = 0; int count = 0; while (count < n) { OccurenceInfo fi = frequencyArray[len - index - 1]; //start at the back of the array if (fi != null) { result.Add(fi); count++; } index++; } return result; }