单词词典没有得到所有的单词

时间:2013-07-20 13:58:57

标签: c# regex dictionary

我有一个字典文件夹,存储一个字典列表,如“愤怒”,“护理”等。 例如,我在Facebook上有一篇文章说“我很闷,很烦,很烦”。 在我的愤怒词典中,我有3个字,闷闷不乐,烦人,烦恼。 当我运行我的单词计数程序时,它似乎无法准确地检测所有单词。更具体地说,我的单词计数字典将检测到闷闷不乐和烦恼已经发生过一次,但是没有发生。

这个问题是由我的正则表达式引起的吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace empTRUST
{
    class FBWordCount
    {
        public Dictionary<string, int> countWordsInStatus(string status, string[] dictArray)
        {
            var words = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase); // local word dictionary is created here
            foreach (var dictEntry in dictArray)
            {
                var wordPattern = new Regex(@"\w+");
                string smallDictEntry = dictEntry.ToLower();
                foreach (Match match in wordPattern.Matches(status))
                {
                    if (match.ToString() == smallDictEntry)
                    {
                        int currentCount = 0;
                        words.TryGetValue(match.Value, out currentCount);

                        currentCount++;
                        words[match.Value] = currentCount;  // local word dictionary adds new word count
                    }
                }
            }
            return words;   // returns local word dictionary to receiving end
        }
    }
}

1 个答案:

答案 0 :(得分:2)

可以使用单个Linq查询替换整个方法。试试这个:

public Dictionary<string, int> countWordsInStatus(string status, string[] dictArray)
{
    var wordPattern = new Regex(@"\w+");
    return 
        (from Match m in wordPattern.Matches(status)
         where dictArray.Contains(m.Value)
         group m by m.Value)
        .ToDictionary(g => g.Key, g => g.Count(),
            StringComparer.CurrentCultureIgnoreCase);
}

您可以这样称呼它:

var results = countWordsInStatus(
    "I am sullen, irked, petulant.", 
    new[] { "sullen", "irked", "petulant" });
// { { "sullen", 1 }, 
//   { "irked", 1 }, 
//   { "petulant", 1 } }