我有一个字典文件夹,存储一个字典列表,如“愤怒”,“护理”等。 例如,我在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
}
}
}
答案 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 } }