查找c#中段落中重复次数最多的单词

本文关键字:单词 段落中 查找 | 更新日期: 2023-09-27 18:09:58

我想在段落中创建一个单词映射。例如;我的琴弦是"去面包约翰昨天去的是音乐音乐…"。单词映射到字符串中:music=2, go=2, bread=1, John=1, yesterday=1。单词后缀将被视为一个共同的词根。(例如音乐=音乐)。我用c#写代码这个主题怎么样?

查找c#中段落中重复次数最多的单词

关于后缀,这只是查找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()));   

您可以首先将所有复数形式转换为单(或复数)形式,但要保持一致,例如music=music。这并不难,因为有c#代码可以获得复数形式,例如这篇文章。

你可以创建一个字典:

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

首先需要一个词干库。雪球建议在这个主题似乎是一个很好的起点。

即使有一个词干,你也会从一篇小文章中得到一个相当大的单词列表,所以你最好的办法可能是跟踪所有这些单词的SQL数据库。但是,如果您只是暂时需要跟踪这些值,那么一个简单的字符串表可能就可以满足您的要求。