如何使用 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/