Advertisement
VssA

Untitled

Feb 16th, 2024
798
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.74 KB | None | 0 0
  1. using System.Collections.Generic;
  2.  
  3. namespace TextAnalysis
  4. {
  5.     static class FrequencyAnalysisTask
  6.     {
  7.         public static void GetBigrams(List<List<string>> text, Dictionary<string, Dictionary<string, int>> result)
  8.         {
  9.             foreach (var words in text)
  10.             {
  11.                 for (int i = 0; i < words.Count - 1; i++)
  12.                 {
  13.                     if (!result.ContainsKey(words[i]))
  14.                         result.Add(words[i], new Dictionary<string, int>());
  15.                     if (!result[words[i]].ContainsKey(words[i + 1]))
  16.                         result[words[i]].Add(words[i + 1], 1);
  17.                     else
  18.                         result[words[i]][words[i + 1]]++;
  19.                 }
  20.             }
  21.         }
  22.  
  23.         public static void GetTrigrams(List<List<string>> text, Dictionary<string, Dictionary<string, int>> result)
  24.         {
  25.             foreach (var words in text)
  26.             {
  27.                 for (int i = 0; i < words.Count - 2; i++)
  28.                 {
  29.                     if (!result.ContainsKey(words[i] + " " + words[i + 1]))
  30.                         result.Add(words[i] + " " + words[i + 1], new Dictionary<string, int>());
  31.                     if (!result[words[i] + " " + words[i + 1]].ContainsKey(words[i + 2]))
  32.                         result[words[i] + " " + words[i + 1]].Add(words[i + 2], 1);
  33.                     else
  34.                         result[words[i] + " " + words[i + 1]][words[i + 2]]++;
  35.                 }
  36.             }
  37.         }
  38.        
  39.         public static Dictionary<string, string> GetMostFrequentNextWords(List<List<string>> text)
  40.         {
  41.             var result = new Dictionary<string, Dictionary<string, int>>();
  42.             var total = new Dictionary<string, string>();
  43.  
  44.             GetBigrams(text, result);
  45.             GetTrigrams(text, result);
  46.             return FrequencyDetermination(result, total);
  47.         }
  48.  
  49.         private static Dictionary<string, string> FrequencyDetermination
  50.             (Dictionary<string, Dictionary<string, int>> result, Dictionary<string, string> total)
  51.         {
  52.             foreach (var key in result.Keys)
  53.             {
  54.                 string mostFrequentWord = null;
  55.                 int maxCount = 0;
  56.  
  57.                 foreach (var innerKey in result[key])
  58.                 {
  59.                     if (innerKey.Value > maxCount || innerKey.Value == maxCount &&
  60.                              string.CompareOrdinal(innerKey.Key, mostFrequentWord) < 0)
  61.                     {
  62.                         maxCount = innerKey.Value;
  63.                         mostFrequentWord = innerKey.Key;
  64.                     }
  65.                 }
  66.                 total.Add(key, mostFrequentWord);
  67.             }
  68.             return total;
  69.         }
  70.     }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement