Advertisement
ivandrofly

SubtitileEdit: FixCommonWordErrorsQuick

Dec 1st, 2024
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.12 KB | None | 0 0
  1. public string FixCommonWordErrorsQuick(string originalWord)
  2.         {
  3.             var word = originalWord;
  4.  
  5.             // always replace list
  6.             foreach (var replacementKey in _partialWordAlwaysReplaceList.Keys)
  7.             {
  8.                 // ensure replacement can be in word
  9.                 if (word.Length >= replacementKey.Length)
  10.                 {
  11.                     word = word.Replace(replacementKey, _partialWordAlwaysReplaceList[replacementKey]);
  12.                 }
  13.             }
  14.  
  15.             int l = 0;
  16.             var prefixSymbols = new HashSet<char> { '-', '.', '"', '(', '\r', '\n' };
  17.             var knownOpenTags = new HashSet<string> {"<i>", "<u>", "<b>"};
  18.            
  19.             for (int r = 0; r < word.Length; r++)
  20.             {
  21.                 var c = word[r];
  22.                 if (c == '<')
  23.                 {
  24.                     l = r;
  25.                 }
  26.                 else if (c == '>' && word[l] == '<') // tag
  27.                 {
  28.                     var tag = word.Substring(l, r - l + 1);
  29.                     if (knownOpenTags.Contains(tag) || tag.StartsWith("<font ", StringComparison.Ordinal))
  30.                     {
  31.                         l = r + 1; // jump tag
  32.                     }
  33.                     else
  34.                     {
  35.                         l = r; // stay in tag and break the loop
  36.                         break;
  37.                     }
  38.                 }
  39.                 else if (!prefixSymbols.Contains(c))
  40.                 {
  41.                     l = r;
  42.                     break;
  43.                 }
  44.             }
  45.  
  46.             // create new word without prefixes
  47.             word = word.Substring(l);
  48.  
  49.             var suffixSymbols = new HashSet<char> { '"', '.', ',', '?', '!', ')' };
  50.             var knownClosingTags = new HashSet<string> { "</i>", "</b>", "</u>", "</font>" };
  51.  
  52.             int k = word.Length - 1;
  53.             for (int i = word.Length - 1; i >= 0; i--)
  54.             {
  55.                 var c = word[i];
  56.                 if (c == '>')
  57.                 {
  58.                     k = i;
  59.                 }
  60.                 else if (c == '<' && word[k] == '>')
  61.                 {
  62.                     if (knownClosingTags.Contains(word.Substring(i, k - i - 1)))
  63.                     {
  64.                         k = i; // move k to the beginning of closing tag
  65.                     }
  66.                     // else k doesn't change anything after k is a suffix
  67.                 }
  68.                 else if (!suffixSymbols.Contains(c))
  69.                 {
  70.                     k = i;
  71.                     break;
  72.                 }
  73.             }
  74.  
  75.            
  76.             // create a word without prefix and suffix
  77.             word = word.Substring(0, k + 1);
  78.             var prefix = originalWord.Substring(0, l);
  79.             var suffix = originalWord.Substring(k + 1);
  80.            
  81.             if (word.Length == 0)
  82.             {
  83.                 return prefix + suffix;
  84.             }
  85.  
  86.             if (GetReplaceWord(prefix, word, suffix, out var res))
  87.             {
  88.                 return res;
  89.             }
  90.  
  91.             return prefix + word + suffix;
  92.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement