如何使用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 >(按字数降序排列)
LinqToSQL应该是最好的,但是LinqToObject也是:)
注:“”没有问题。“ASP.NET关键字(如果这个问题的话,这不是目标)
发布于 2009-10-17 17:51:26
正则表达式处理得很好。您可以使用\b
元字符来锚定单词边界,并转义关键字以避免意外地使用特殊正则字符。它还处理尾随期、逗号等情况。
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);
}
瞧!:)
发布于 2009-10-17 16:50:53
编辑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 .之类的。“会用数3表示“废话”和“废话”。数到2,你需要想一想你想要什么清洁策略,例如,如果是“。两边都有字母,它是单词的一部分,否则是空格。这种逻辑最好用一些RegEx来完成。
发布于 2009-10-17 16:44:47
使用String.Split()将字符串转换为单词数组,然后使用LINQ筛选只返回所需单词的列表,然后检查结果的计数,如下所示:
myDbText.Split(' ').Where(token => token.Equals(word)).Count();
https://stackoverflow.com/questions/1582563
复制相似问题