.net - 使用 LINQ 计算文本字段中的单词出现次数

标签 .net linq pattern-matching

如何使用 LINQ 获取数据库文本字段中单词的出现次数?

关键字 token 示例:ASP.NET

编辑 4:

数据库记录:

记录 1:[TextField] = "Blah blah blah ASP.NET bli bli bli ASP.NET blu ASP.NET yop yop ASP.NET

记录 2:[TextField] = "Blah blah blah bli bli bli blu ASP.NET yop yop ASP.NET"

记录 3:[TextField] = "Blah ASP.NET blah ASP.NET blah ASP.NET bli ASP. NET bli bli ASP.NET blu ASP.NET yop yop ASP.NET

所以

记录 1 包含 4 次出现的“ASP.NET”关键字

记录 2 包含 2 次出现的“ASP.NET”关键字

记录 3 包含 7 次出现的“ASP.NET”关键字

集合提取IList (按字数降序排列)

  • 记录 3
  • 记录 1
  • 记录 2

LinqToSQL 应该是最好的,但 LinqToObject 也是 :)

注意:关于“.”没有问题。 ASP.NET 关键字(这不是这个问题的目标)

最佳答案

编辑 2:我看到你更新了问题,改变了一点,每个字的字数是吗?试试这个:

string input = "some random text: how many times does each word appear in some random text, or not so random in this case";
char[] separators = new char[]{ ' ', ',', ':', ';', '?', '!', '\n', '\r', '\t' };

var query = from s in input.Split( separators )
            where s.Length > 0
            group s by s into g
            let count = g.Count()
            orderby count descending
            select new {
                Word = g.Key,
                Count = count
            };

因为您想要的单词可能带有“.”在它们中(例如“ASP.NET”)我已经从分隔符列表中排除了它,不幸的是,这会污染一些单词作为一个句子,如“Blah blah blah。Blah blah。”会显示计数为 3 的“blah”和“blah”。计数为 2。您需要在这里考虑您想要的清洁策略,例如如果“。”两边都有一个字母,它算作单词的一部分,否则就是空格。这种逻辑最好用一些 RegEx 来完成。

关于.net - 使用 LINQ 计算文本字段中的单词出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582563/

相关文章:

c# - 在哪里可以找到模仿 iTunes 堆栈/填充/进度条的 WinForms 控件?

c# - 使用用户名和密码时 RabbitMQ C# 连接问题

javascript - 从父级获取部分类名并应用于子级 JQuery

haskell - 有没有更好的方法来编写 "string contains X"方法?

c# - 有多个同时写入器(没有读取器)到一个文件。是否有可能在 .NET 中以高效的方式完成?

c# - 如何找出导致 SocketException、UdpClient 的端点

c# - Linq .ForEach 优化

c# - 如何编写更复杂的 LINQ 查询

c# - 分组项目和计数

Scala 编译错误 : not found: type _$1