2016-12-07 2 views
-2

Здравствуйте,частоты слов со статическим IEnumerable <KeyValuePair <string, int>>

Я написал эту функцию для подсчета гласных звуков в списке полных слов.

static IEnumerable<KeyValuePair<char, int>> Sthmpa(string sourceItem) 
{ 
    return sourceItem.ToLower() 
       .Where(c => "aeiou".Contains(c)) 
       .GroupBy(c => c, (c, instances) => new KeyValuePair<char, int>(c, instances.Count())); 
} 

Я хочу изменить это возвращение, чтобы подсчитать частоту слов в моем списке.

Это список, полный слов.

static IList<string> lines = new List<string>(); 

Как это:

var g = lines.GroupBy(words=> words); 
foreach (var grp in g) 
{ 
    Console.WriteLine("{0} {1}", grp.Key, grp.Count()); 
} 

Я печатаю частоту слов, но я хочу сделать это один, как же, как я сделал с подсчета гласных звуков.

Может ли кто-нибудь показать, как я могу измениться?

Чтобы было ясно, функция Sthmpa Я использую в функции потока с ConcurrentBag ...

+0

Сколько слов может быть в 'lines'? Потому что то, как вы пытаетесь решить эту проблему, может иметь довольно серьезные проблемы с производительностью. – InBetween

+0

Я не знаю в программе, сколько слов у меня есть в строках, потому что я беру их из некоторых файлов. Может быть, я могу считать их, но ... –

+0

Является ли каждая строка словом или может каждая строка может иметь несколько слов? – InBetween

ответ

3

Вы можете попробовать это:

public IEnumerable<KeyValuePair<string, int>> GetWordFrequency(List<string> words) 
{ 
    return words.GroupBy(w => w) 
       .Select((item) => new KeyValuePair<string, int>(item.Key, item.Count())); 
} 
+0

спасибо! Я думаю, это работает отлично, но я использую эту функцию в другом, и теперь я получаю сообщение об ошибке «не может быть выведен из использования» .... В любом случае, спасибо! –

+0

Можете ли вы разместить сообщение об ошибке, пожалуйста? –

+0

'Ошибка Аргументы типа для метода 'ConsoleApplication1.Program.DoingAll (System.Collections.Generic.IEnumerable , System.Func >>, System.Func >, TResult>) 'не может быть выведен из использования. Попробуйте явно указать аргументы типа. ' –

0

Вот мой подход:

private IEnumerable<KeyValuePair<string, int>> GetOccurences(IEnumerable<string> words) 
{ 
    return words.GroupBy(word => word, StringComparer.InvariantCultureIgnoreCase) 
       .Select(group => new KeyValuePair<string, int>(group.Key, group.Count())) 
       .OrderByDescending(kvp => kvp.Value); 
} 
Смежные вопросы