首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用LINQ计数文本字段中出现的单词

用LINQ计数文本字段中出现的单词
EN

Stack Overflow用户
提问于 2009-10-17 16:18:12
回答 5查看 2.8K关注 0票数 2

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

关键字令牌示例: ASP.NET

编辑4:

数据库记录:

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

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

记录3: TextField = "Blah ASP.NET blah ASP.NET ASP.NET bli bli ASP.NETE 221 blu E 122ASP.NETE 223 yop <代码>E 124ASP.NET<代码>e 225“

所以

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

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

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

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

  • 记录3
  • Record 1
  • Record 2

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-17 17:51:26

正则表达式处理得很好。您可以使用\b元字符来锚定单词边界,并转义关键字以避免意外地使用特殊正则字符。它还处理尾随期、逗号等情况。

代码语言:javascript
运行
复制
string[] records =
{
    "foo ASP.NET bar", "foo bar",
    "foo ASP.NET? bar ASP.NET",
    "ASP.NET foo ASP.NET! bar ASP.NET",
    "ASP.NET, ASP.NET ASP.NET, ASP.NET"
};
string keyword = "ASP.NET";
string pattern = @"\b" + Regex.Escape(keyword) + @"\b";
var query = records.Select((t, i) => new
            {
                Index = i,
                Text = t,
                Count = Regex.Matches(t, pattern).Count
            })
            .OrderByDescending(item => item.Count);

foreach (var item in query)
{
    Console.WriteLine("Record {0}: {1} occurrences - {2}",
        item.Index, item.Count, item.Text);
}

瞧!:)

票数 3
EN

Stack Overflow用户

发布于 2009-10-17 16:50:53

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

代码语言:javascript
运行
复制
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 .之类的。“会用数3表示“废话”和“废话”。数到2,你需要想一想你想要什么清洁策略,例如,如果是“。两边都有字母,它是单词的一部分,否则是空格。这种逻辑最好用一些RegEx来完成。

票数 4
EN

Stack Overflow用户

发布于 2009-10-17 16:44:47

使用String.Split()将字符串转换为单词数组,然后使用LINQ筛选只返回所需单词的列表,然后检查结果的计数,如下所示:

代码语言:javascript
运行
复制
myDbText.Split(' ').Where(token => token.Equals(word)).Count();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1582563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档