【问题标题】:C# stop Word Dictionaryfom String [closed]C# stop Word Dictionaryfom String [关闭]
【发布时间】:2017-09-10 13:35:17
【问题描述】:

这是删除停用词和的 C# 程序 我在 _delimiters 中有错误 有人帮帮我吗?!

我该如何修复这个错误 并且输出应该有

看到猫马 谷歌搜索互联网 使用额外的步骤

非常感谢

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"));
        }
    }

【问题讨论】:

  • _delimiters 在哪里定义?它不在您粘贴的代码中。
  • in this function public static string RemoveStopwords(string input) { // 1 // 将参数拆分成单词 var words = input.Split(_delimiters, StringSplitOptions.RemoveEmptyEntries);
  • 这就是它使用的地方,但它没有在任何地方定义。
  • 您在 _delimiters 中有一个错误,但那是您没有发布的代码。

标签: c# stop-words


【解决方案1】:

您的函数需要一个输入,第一步是用分隔符分割您的输入字符串,但是变量“_delimiters”没有定义。

split 函数 (String.Split Method (Char[])) 采用 char 数组作为有效分隔符,请参阅链接文档。

因此,由于您的示例字符串只有空格作为分隔符,因此在您的类中添加这样的内容就足够了:

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

【讨论】:

  • 非常感谢
【解决方案2】:

自然语言(英语、俄语等)中的单词很难确定。我建议第一次尝试使用正则表达式,而不是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&lt;string&gt; 作为停用词的集合,而不是Dictionary&lt;string, bool&gt;

// 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...

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2016-07-27
    • 1970-01-01
    • 2013-05-15
    • 2010-10-22
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多