/// <summary> /// Calculates Score for each review /// </summary> /// <param name="v"></param> private void CalculateScoreForEachReview(int v) { List <double> scores = new List <double>(); foreach (var review in ReviewList) { try { double score = 0; var words = review.Split(' ').ToList(); foreach (var word in words) { if (WordCountsDictionary.ContainsKey(word)) { score += (WordCountsDictionary[word] / (v * 1.0)) * Math.Log((double)ReviewList.Count / (double)(NumberofReviewsWithWord[word])); } } scores.Add(score / (double)words.Count); } catch (Exception) { } } ReviewListScore = scores; }
/// <summary> /// Calculates Score for each review /// </summary> /// <param name="v"></param> private void CalculateScoreForEachReview(int v) { List <double> scores = new List <double>(); foreach (var review in ReviewList) { double score = 0; try { var words = review.Split(' ').ToList(); foreach (var word in words) { if (WordCountsDictionary.ContainsKey(word)) { score += WordCountsDictionary[word] / (v * 1.0); } } } catch (Exception) { } scores.Add(score); } ReviewListScore = scores; }
/// <summary> /// Add the input word to dictionary and increase the value if already in the dictionary /// </summary> /// <param name="word"></param> private void AddWordToDictionary(string word) { if (!WordCountsDictionary.ContainsKey(word)) { WordCountsDictionary.Add(word, 1); } else { WordCountsDictionary[word]++; } }
/// <summary> /// Calculate probability of individual words /// </summary> private void calculateWordProbability() { var tempCollection = new Dictionary <string, double>(); double probability; foreach (var item in WordCountsDictionary) { probability = item.Value / WordCountsDictionary.Sum(x => x.Value); tempCollection.Add(item.Key, probability); } WordCountsDictionary = tempCollection; }
/// <summary> /// Performs Hybrid TF operation /// </summary> public void PerformHybridTF() { foreach (var review in ReviewList) { try { var words = review.Split(' ').ToList(); words.Remove(" "); words.Remove(""); words = RemoveDuplicates(words); foreach (var word in words) { AddWordToDictionary(word); } } catch (Exception) { } } CalculateScoreForEachReview(WordCountsDictionary.Sum(x => x.Value)); ReorderReviewsBasedOnScore(); }
/// <summary> /// Performs Hybrid TF operation /// </summary> /// <param name="thresholdValue"></param> public void PerformHybridTFIDF(double thresholdValue = 0.7) { foreach (var review in ReviewList) { try { var words = review.Split(' ').ToList(); words.Remove(" "); words.Remove(""); //words = RemoveDuplicates(words); foreach (var word in words) { AddWordToDictionary(word); } } catch (Exception) { } } CalculateNumberOfOccuranceOfWordsInDocument(); CalculateScoreForEachReview(WordCountsDictionary.Sum(x => x.Value)); ReorderReviewsBasedOnScore(); ApplyCosineSimilarityToRemoveSimilarConsecutiveReviews(thresholdValue); }