2017-04-14 36 views
2

這是C#程序刪除停止詞和 我有錯誤_delimiters 任何一個幫助我嗎?!C#stop Word Dictionaryfom字符串

我怎樣才能修復這個錯誤 和出放應該有

看到貓馬 谷歌搜索互聯網 在所有

static class StopwordTool 
    { 
     static Dictionary<string, bool> _stops = new Dictionary<string,bool> 
    { 
     { "a", true }, 
     { "about", true }, 
     { "above", true }, 
     { "across", true }, 
     { "after", true }, 
     { "afterwards", true }, 
     { "again", true }, 
     { "against", true }, 
     { "all", true }, 
     { "almost", true }, 
     { "alone", true }, 
     { "along", true }, 
     { "already", true }, 
     { "also", true }, 
     { "although", true }, 
     { "always", true }, 
     { "am", true }, 
     { "among", true }, 
     { "amongst", true }, 
     { "amount", true }, 
     { "an", true }, 
     { "and", true }, 
     { "another", true }, 
     { "any", true }, 
     { "anyhow", true }, 
     { "anyone", true }, 
     { "anything", true }, 
     { "anyway", true }, 
     { "anywhere", true }, 
     { "are", true }, 
     { "around", true }, 
     { "as", true }, 
     { "at", true }, 
     { "back", true }, 
     { "be", true }, 
     { "became", true }, 
     { "because", true }, 
     { "become", true }, 
     { "becomes", true }, 
     { "becoming", true }, 
     { "been", true }, 
     { "before", true }, 
     { "beforehand", true }, 
     { "behind", true }, 
     { "being", true }, 
     { "below", true }, 
     { "beside", true }, 
     { "besides", true }, 
     { "between", true }, 
     { "beyond", true }, 
     { "bill", true }, 
     { "both", true }, 
     { "bottom", true }, 
     { "but", true }, 
     { "by", true }, 
     { "call", true }, 
     { "can", true }, 
     { "cannot", true }, 
     { "cant", true }, 
     { "co", true }, 
     { "computer", true }, 
     { "con", true }, 
     { "could", true }, 
     { "couldnt", true }, 
     { "cry", true }, 
     { "de", true }, 
     { "describe", true }, 
     { "detail", true }, 
     { "do", true }, 
     { "done", true }, 
     { "down", true }, 
     { "due", true }, 
     { "during", true }, 
     { "each", true }, 
     { "eg", true }, 
     { "eight", true }, 
     { "either", true }, 
     { "eleven", true }, 
     { "else", true }, 
     { "elsewhere", true }, 
     { "empty", true }, 
     { "enough", true }, 
     { "etc", true }, 
     { "even", true }, 
     { "ever", true }, 
     { "every", true }, 
     { "everyone", true }, 
     { "everything", true }, 
     { "everywhere", true }, 
     { "except", true }, 
     { "few", true }, 
     { "fifteen", true }, 
     { "fify", true }, 
     { "fill", true }, 
     { "find", true }, 
     { "fire", true }, 
     { "first", true }, 
     { "five", true }, 
     { "for", true }, 
     { "former", true }, 
     { "formerly", true }, 
     { "forty", true }, 
     { "found", true }, 
     { "four", true }, 
     { "from", true }, 
     { "front", true }, 
     { "full", true }, 
     { "further", true }, 
     { "get", true }, 
     { "give", true }, 
     { "go", true }, 
     { "had", true }, 
     { "has", true }, 
     { "have", true }, 
     { "he", true }, 
     { "hence", true }, 
     { "her", true }, 
     { "here", true }, 
     { "hereafter", true }, 
     { "hereby", true }, 
     { "herein", true }, 
     { "hereupon", true }, 
     { "hers", true }, 
     { "herself", true }, 
     { "him", true }, 
     { "himself", true }, 
     { "his", true }, 
     { "how", true }, 
     { "however", true }, 
     { "hundred", true }, 
     { "i", true }, 
     { "ie", true }, 
     { "if", true }, 
     { "in", true }, 
     { "inc", true }, 
     { "indeed", true }, 
     { "interest", true }, 
     { "into", true }, 
     { "is", true }, 
     { "it", true }, 
     { "its", true }, 
     { "itself", true }, 
     { "keep", true }, 
     { "last", true }, 
     { "latter", true }, 
     { "latterly", true }, 
     { "least", true }, 
     { "less", true }, 
     { "ltd", true }, 
     { "made", true }, 
     { "many", true }, 
     { "may", true }, 
     { "me", true }, 
     { "meanwhile", true }, 
     { "might", true }, 
     { "mill", true }, 
     { "mine", true }, 
     { "more", true }, 
     { "moreover", true }, 
     { "most", true }, 
     { "mostly", true }, 
     { "move", true }, 
     { "much", true }, 
     { "must", true }, 
     { "my", true }, 
     { "myself", true }, 
     { "name", true }, 
     { "namely", true }, 
     { "neither", true }, 
     { "never", true }, 
     { "nevertheless", true }, 
     { "next", true }, 
     { "nine", true }, 
     { "no", true }, 
     { "nobody", true }, 
     { "none", true }, 
     { "nor", true }, 
     { "not", true }, 
     { "nothing", true }, 
     { "now", true }, 
     { "nowhere", true }, 
     { "of", true }, 
     { "off", true }, 
     { "often", true }, 
     { "on", true }, 
     { "once", true }, 
     { "one", true }, 
     { "only", true }, 
     { "onto", true }, 
     { "or", true }, 
     { "other", true }, 
     { "others", true }, 
     { "otherwise", true }, 
     { "our", true }, 
     { "ours", true }, 
     { "ourselves", true }, 
     { "out", true }, 
     { "over", true }, 
     { "own", true }, 
     { "part", true }, 
     { "per", true }, 
     { "perhaps", true }, 
     { "please", true }, 
     { "put", true }, 
     { "rather", true }, 
     { "re", true }, 
     { "same", true }, 
     { "see", true }, 
     { "seem", true }, 
     { "seemed", true }, 
     { "seeming", true }, 
     { "seems", true }, 
     { "serious", true }, 
     { "several", true }, 
     { "she", true }, 
     { "should", true }, 
     { "show", true }, 
     { "side", true }, 
     { "since", true }, 
     { "sincere", true }, 
     { "six", true }, 
     { "sixty", true }, 
     { "so", true }, 
     { "some", true }, 
     { "somehow", true }, 
     { "someone", true }, 
     { "something", true }, 
     { "sometime", true }, 
     { "sometimes", true }, 
     { "somewhere", true }, 
     { "still", true }, 
     { "such", true }, 
     { "system", true }, 
     { "take", true }, 
     { "ten", true }, 
     { "than", true }, 
     { "that", true }, 
     { "the", true }, 
     { "their", true }, 
     { "them", true }, 
     { "themselves", true }, 
     { "then", true }, 
     { "thence", true }, 
     { "there", true }, 
     { "thereafter", true }, 
     { "thereby", true }, 
     { "therefore", true }, 
     { "therein", true }, 
     { "thereupon", true }, 
     { "these", true }, 
     { "they", true }, 
     { "thick", true }, 
     { "thin", true }, 
     { "third", true }, 
     { "this", true }, 
     { "those", true }, 
     { "though", true }, 
     { "three", true }, 
     { "through", true }, 
     { "throughout", true }, 
     { "thru", true }, 
     { "thus", true }, 
     { "to", true }, 
     { "together", true }, 
     { "too", true }, 
     { "top", true }, 
     { "toward", true }, 
     { "towards", true }, 
     { "twelve", true }, 
     { "twenty", true }, 
     { "two", true }, 
     { "un", true }, 
     { "under", true }, 
     { "until", true }, 
     { "up", true }, 
     { "upon", true }, 
     { "us", true }, 
     { "very", true }, 
     { "via", true }, 
     { "was", true }, 
     { "we", true }, 
     { "well", true }, 
     { "were", true }, 
     { "what", true }, 
     { "whatever", true }, 
     { "when", true }, 
     { "whence", true }, 
     { "whenever", true }, 
     { "where", true }, 
     { "whereafter", true }, 
     { "whereas", true }, 
     { "whereby", true }, 
     { "wherein", true }, 
     { "whereupon", true }, 
     { "wherever", true }, 
     { "whether", true }, 
     { "which", true }, 
     { "while", true }, 
     { "whither", true }, 
     { "who", true }, 
     { "whoever", true }, 
     { "whole", true }, 
     { "whom", true }, 
     { "whose", true }, 
     { "why", true }, 
     { "will", true }, 
     { "with", true }, 
     { "within", true }, 
     { "without", true }, 
     { "would", true }, 
     { "yet", true }, 
     { "you", true }, 
     { "your", true }, 
     { "yours", true }, 
     { "yourself", true }, 
     { "yourselves", true } 
    }; 
     public static string RemoveStopwords(string input) 
     { 
      // 1 
      // Split parameter into words 
      var words = input.Split(_delimiters, 
       StringSplitOptions.RemoveEmptyEntries); 
      // 2 
      // Allocate new dictionary to store found words 
      var found = new Dictionary<string, bool>(); 
      // 3 
      // Store results in this StringBuilder 
      StringBuilder builder = new StringBuilder(); 
      // 4 
      // Loop through all words 
      foreach (string currentWord in words) 
      { 
       // 5 
       // Convert to lowercase 
       string lowerWord = currentWord.ToLower(); 
       // 6 
       // If this is a usable word, add it 
       if (!_stops.ContainsKey(lowerWord) && 
        !found.ContainsKey(lowerWord)) 
       { 
        builder.Append(currentWord).Append(' '); 
        found.Add(lowerWord, true); 
       } 
      } 
      // 7 
      // Return string with words removed 
      return builder.ToString().Trim(); 
     } 
    } 
} 

    class Program 
    { 
     static void Main() 
     { 
      Console.WriteLine(StopwordTool.RemoveStopwords(
       "I saw a cat and a horse")); 
      Console.WriteLine(StopwordTool.RemoveStopwords(
       "Google searches the Internet")); 
      Console.WriteLine(StopwordTool.RemoveStopwords(
       "Using an extra step")); 
     } 
    } 
+0

凡定義_delimiters?它不在你粘貼的代碼中。 –

+0

在此函數公共靜態字符串RemoveStopwords(字符串輸入) { // 1 // 拆分參數成單詞 變種詞語= input.Split(_delimiters, StringSplitOptions.RemoveEmptyEntries); –

+3

這就是使用它的地方,但它沒有在任何地方定義。 –

回答

1

使用額外的步驟

感謝你的函數接受輸入,第一步是用分隔符分隔輸入字符串,但是未定義變量「_delimiters」。

分割函數(String.Split Method (Char[]))爲有效分隔符提供了一個char數組,請參閱鏈接文檔。

所以當你的樣本串只有空格隔開,加入這樣的事情你的類應該足夠了:

static Char[] _delimiters = new Char[] {}; 
+0

它工作得很好,非常感謝 –

1

自然語言(英語,俄語等)困難把它釘住。我建議使用正則表達式作爲第一次嘗試,而不是string.Split(請注意標點,新行應刪除):

string input = 
    @"「The Iliad」 (Gr: 「Ilias」) is an epic poem by the ancient Greek poet Homer, 
    which recounts some of the significant events of the final weeks of the 
    Trojan War and the Greek siege of the city of Troy (which was also known 
    as Ilion, Ilios or Ilium in ancient times)"; 

string[] words = Regex 
    .Matches(input, @"\w+", RegexOptions.Multiline) 
    .OfType<Match>() 
    .Select(m => m.Value) 
    .ToArray(); 

另一個建議是使用HashSet<string>爲停止詞,而不是Dictionary<string, bool>集合:

// We want: 
// 1. Just words without redundant boolean "true" value 
// 2. Case insensive: "The" is a stop word as well as "the" 
static HashSet<string> _stops = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { 
    "a", 
    "about", 
    ... 
    "yourselves", 
}; 

最後,你可以使用LINQ的過濾掉停用詞,如

string textWithoutStopWords = string.Join(" ", words 
    .Where(word => !_stops.Contains(word))); 

Console.Write(textWithoutStopWords); 

輸出

Iliad Gr Ilias epic poem ancient Greek poet...