在c#中查找段落中最常重复的单词

时间:2013-04-19 14:33:52

标签: c# string parsing

我想在段落中创建一个单词地图。例如;我的字符串是“去面包约翰昨天去的是音乐音乐......”。该字符串中的单词map:music = 2,go = 2,bread = 1,John = 1,yesterday = 1。单词后缀将被视为一个共同的根。(例如音乐=音乐)。我用C#编写这个主题怎么样?

3 个答案:

答案 0 :(得分:0)

关于后缀,这只是查找s,您可以修改以查找其他后缀。

string words = "go bread John yesterday going is music musics";
List<string> wordroots = words.Split(new [] {" "}, StringSplitOptions.RemoveEmptyEntries).ToList();
var rootcount = wordroots
    .Select(wr =>
    {
        if (wr.EndsWith("s"))
            wr = wr.Substring(0, wr.Length - 1);
        return wr;
    })
    .GroupBy(g => g);

foreach (var group in rootcount)
    Console.WriteLine(string.Format("Found word: {0} {1} times.", group.Key, group.Count()));   

答案 1 :(得分:0)

您可以先将所有复数形式转换为单个(或复数)形式,您可以决定,但要保持一致,以便音乐=音乐。这并不难,因为有C#代码来获取复数形式,例如参见post

然后您可以创建字典:

Dictionary<string, int> data=new Dictionary<string, int>();
foreach(string item in YourInputs)
{
    if(data.ContainsKey(item)
         data[item]++;
    else
         data.Add(item, 1);
}

答案 2 :(得分:0)

您首先需要一个词干库。 Snowball建议this这个主题似乎是一个很好的起点。

即使使用词干分析器,您无疑会从一篇小文章中获得相当大量的单词列表,因此跟踪所有这些内容的最佳选择可能是SQL数据库。但是,如果您只是暂时需要跟踪这些值,那么简单的字符串表可能就可以了。