C# 在.NET中从文本中分离单词的最快方法是什么?

C# 在.NET中从文本中分离单词的最快方法是什么?,c#,regex,text,semantics,C#,Regex,Text,Semantics,我的任务是对文本(800MB txt文件)进行简单的语义分析。对于小文件,一切都进行得很快。我一行一行地读这个文件和那些正在工作的文件。读取文件需要9秒。 但是一旦你开始分析,将单词添加到字典中,并在文本处理中存储它们的位置,就需要花费太长的时间 你能告诉我更好的变化或什么是更好的解决问题的办法吗? 在处理文本的语义分析问题和程序时,我会征求任何意见。你的 public List<string> SplitWords(string s) { s = s.ToL

我的任务是对文本(800MB txt文件)进行简单的语义分析。对于小文件,一切都进行得很快。我一行一行地读这个文件和那些正在工作的文件。读取文件需要9秒。 但是一旦你开始分析,将单词添加到字典中,并在文本处理中存储它们的位置,就需要花费太长的时间

你能告诉我更好的变化或什么是更好的解决问题的办法吗? 在处理文本的语义分析问题和程序时,我会征求任何意见。你的

public List<string> SplitWords(string s)
    {
        s = s.ToLower();
        arrayWords = Regex.Split(s, @"\W+");
        listWords = arrayWords.OfType<string>().ToList();

        for (int i = 0; i < listWords.Count; i++)
        {
            if (Array.BinarySearch(stopwords, listWords[i]) >= 0 || listWords[i].Length < 2)
            {
                listWords.RemoveAt(i);
                i--;
            }

        }
        return listWords;
    }
公共列表拆分字(字符串s)
{
s=s.ToLower();
arrayWords=Regex.Split(s,@“\W+”);
listWords=arrayWords.OfType().ToList();
for(int i=0;i=0 | | listWords[i].Length<2)
{
listWords.RemoveAt(i);
我--;
}
}
返回列表词;
}
分词代码

 public void AddToDictonary(List<string> arrayWords)
        {
            for (int i = 0; i < arrayWords.Count; i++)
            {
                if (!dictonary.ContainsKey(arrayWords[i]))
                {
                    dictonary.Add(arrayWords[i], new List<int>() { i });
                }
                else
                {
                    dictonary[arrayWords[i]].Add(i);
                }
            }
        }
public void addtodictionary(列出数组词)
{
for(int i=0;i

添加到词典的代码。

您可以使用我发布的正则表达式来标记您的句子

而不是询问词典是否包含该单词,您应该使用TryGetValue方法。请参阅:我还建议您使用dotTrace或类似工具。它将为您的代码提供一个性能报告,您将能够知道代码的哪一部分速度较慢。我尝试TryGetValue。谢谢。最慢的代码是(splitwords函数),在该函数中,我将文本文件中的每个单词与数组中的321个StopSwarks进行比较。我正在考虑使用StringBuilder。你怎么认为?如何进行速度比较?当执行
arrayWords.OfType().ToList()时,您在
listWords
中获得了多少单词?低,平均10,我逐行阅读文本。对于in-SplitWords函数,在循环中进行大量比较非常慢