Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.55 KB | None | 0 0
  1. using System.Collections.Generic;
  2.  
  3. namespace TextAnalysis
  4. {
  5.     static class FrequencyAnalysisTask
  6.     {
  7.         private static void UpdateDictionary(
  8.             Dictionary<string, Dictionary<string, int>> dictionary,
  9.             string key,
  10.             string value)
  11.         {
  12.             if (dictionary.ContainsKey(key))
  13.             {
  14.                 if (dictionary[key].ContainsKey(value))
  15.                 {
  16.                     dictionary[key][value]++;
  17.                 }
  18.                 else
  19.                 {
  20.                     dictionary[key].Add(value, 1);
  21.                 }
  22.             }
  23.             else
  24.             {
  25.                 dictionary.Add(key, new Dictionary<string, int>() { { value, 1 } });
  26.             }
  27.         }
  28.  
  29.         public static Dictionary<string, Dictionary<string, int>> GetBigrammAndThreegramm(
  30.             Dictionary<string, Dictionary<string, int>> dictWithNGramms,
  31.             List<string> sentence)
  32.         {
  33.             //получение ключей и всех возможных значений окончаний биграмм и триграмм при этих ключах
  34.             for (var i = 0; i < sentence.Count - 1; i++)
  35.             {
  36.                 UpdateDictionary(dictWithNGramms, sentence[i], sentence[i + 1]);
  37.  
  38.                 if (i < sentence.Count - 2)
  39.                 {
  40.                     UpdateDictionary(dictWithNGramms, sentence[i] + " " + sentence[i + 1], sentence[i + 2]);
  41.                 }
  42.             }
  43.             return dictWithNGramms;
  44.         }
  45.  
  46.         public static Dictionary<string, string> GetMostFrequentNextWords(List<List<string>> text)
  47.         {
  48.             var ans = new Dictionary<string, string>();
  49.             var dictWithNGramms = new Dictionary<string, Dictionary<string, int>>();
  50.             foreach (var sentence in text)
  51.             {
  52.                 dictWithNGramms = GetBigrammAndThreegramm(dictWithNGramms, sentence);
  53.             }
  54.             //нахождение самой частовстречающейся нграммы по словарю
  55.             foreach (var e in dictWithNGramms)
  56.             {
  57.                 int max = -1;
  58.                 string value = "";
  59.                 foreach (var e1 in e.Value)
  60.                 {
  61.                     if(e1.Value == max && string.CompareOrdinal(e1.Key, value) < 0 || e1.Value > max)
  62.                     {
  63.                         value = e1.Key;
  64.                         max = e1.Value;
  65.                     }
  66.                 }
  67.                 ans.Add(e.Key, value);
  68.             }
  69.             return ans;
  70.         }
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement