0

次の文字列があると仮定します。

"present present present presenting presentation do  do doing " 

そして、文字列内の単語を頻度に従って降順で数えています。

I'm using GroupBy count 
present    3
do         2
doing      1
presenting 1
presentation 1

次に、私は言葉をステミングしています:

using array [ , ] or any other structure

present  3
do       2
do       1
present  1
present  1

最後に、単語を辞書に戻したいと思います。そのため、出力は次のようになります。

present 5
do      3

誰か助けてもらえますか??。前もって感謝します。

4

2 に答える 2

1

//辞書の代わりにリストを使用してキーの多重度を許可します:List> words = new List <KeyValuePair>();

        string text = "present present present presenting presentation do  do doing";
        var ws = text.Split(' ');

        //Passing the words into the list:
        words = (from w in ws
                 group w by w into wsGroups
                 select new KeyValuePair<string, int>(
                     wsGroups.Key, ws.Count()
                     )
                 ).ToList<KeyValuePair<string, int>>();

        //Ordering:
        words.OrderBy(w => w.Value);

        //Stemming the words:
        words = (from w in words
                 select new KeyValuePair<string, int>
                     (
                         stemword(w.Key),
                         w.Value
                     )).ToList<KeyValuePair<string, int>>();

        //Sorting and put into Dictionary:
        var wordsRef = (from w in words
                        group w by w.Key into groups
                        select new
                        {
                            count = groups.Count(),
                            word = groups.Key
                        }).ToDictionary(w => w.word, w => w.count);
于 2012-07-21T00:01:11.070 に答える
0

LINQ GroupByまたはAggregateは、このようなカウントを計算するための優れたメソッドです。

手作業でやりたい場合...2セットの結果が必要なようです。1つは語幹のない単語、もう1つは語幹のある単語です。

void incrementCount(Dictionary<string, int> counts, string word)
{
  if (counts.Contains(word))
  {
    counts[word]++;
  }
  else
  {
    counts.Add(word, 0);
  }
}

var stemmedCount = new Dictionary<string, int>();
var nonStemmedCount = new Dictionary<string, int>();

foreach(word in words)
{
  incrementCount(stemmedCount, Stem(word));
  incrementCount(nonStemmedCount, word);
}
于 2012-07-20T23:38:28.143 に答える