Получить количество вхождений слов в текст - PullRequest
0 голосов
/ 27 января 2012

Можно ли это сделать с помощью C # Linq?

Например:

Питер Пайпер собрал пачку маринованных перцев, перцы были сладкими и сеят, Питер подумал

Результат:

peter 3
peppers 2
picked 1
...

Я могу сделать это с помощью вложенного цикла for, но подумал, что есть более краткий, ресурсный способ с использованием Linq.

Ответы [ 5 ]

6 голосов
/ 27 января 2012

Вы можете использовать GroupBy:

string original = "peter piper picked a pack of pickled peppers, the peppers were sweet and sower for peter, peter thought";

var words = original.Split(new[] {' ',','}, StringSplitOptions.RemoveEmptyEntries);
var groups = words.GroupBy(w => w);

foreach(var item in groups)
    Console.WriteLine("Word {0}: {1}", item.Key, item.Count());
4 голосов
/ 27 января 2012

Это должно сработать:

var str = "peter piper picked a pack of pickled peppers, the peppers were sweet and sower for peter, peter thought";
var counts = str
    .Split(' ', ',')
    .GroupBy(s => s)
    .ToDictionary(g => g.Key, g => g.Count());

Теперь словарь counts содержит пары слов из вашего предложения.Например, counts["peter"] равно 3.

1 голос
/ 27 января 2012

Я не уверен, является ли он более эффективным или «ресурсным», но вы можете сделать:

string[] words = "peter piper picked a pack of pickled peppers, the peppers were sweet and sower for peter, peter thought".Split(" ");
int peter = words.Count(x=>x == "peter");
int peppers = words.Count(x=>x == "peppers");
// etc
1 голос
/ 27 января 2012
"peter piper picked a pack of pickled peppers,the peppers 
were sweet and sower for peter, peter thought"
.Split(' ', ',').Count(x=>x == "peter");

Это для "Питер", то же самое для других.

0 голосов
/ 27 января 2012
const string s = "peter piper picked a pack of pickled peppers, the peppers were sweet and sower for peter, peter thought";

var wordFrequency = 
        from word in s.Split(' ')
        group word by word
        into wordGrouping
        select new {wordGrouping.Key, Count = wordGrouping.Count()};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...