2010-12-01 5 views
0

Donc j'essaie de prendre this post et de le modifier pour mes propres fins, mais je ne peux pas comprendre comment.obtenir la fréquence des mots (nombre) en tant que propriété dans Linq Objet en utilisant Regex

Voici une requête de départ:

 string input = sb.ToString(); 
      string[] keywords = new[] { "i","be", "with", "are", "there", "use", "still", "do","out", "so", "will", "but", "if", "can", "your", "what", "just", "from", "all", "get", "about", "this","t", "is","and", "the", "", "a", "to", "http" ,"you","my", "for", "in", "of", "ly" , "com", "it", "on","s", "that", "bit", "at", "have", "m", "rt", "an", "was", "as", "ll", "not", "me" }; 
      Regex regex = new Regex("\\w+"); 
var stuff = regex.Matches(input) 
       .OfType<Match>() 
       .Select(c => c.Value.ToLowerInvariant()) 
       .Where(c => !keywords.Contains(c)) 
       .GroupBy(c => c) 
       .OrderByDescending(c => c.Count()) 
       .ThenBy(c => c.Key); 

Mais je voudrais être en mesure d'obtenir le COUNT (fréquence) de chaque valeur de clé ainsi que la valeur elle-même pour que je puisse le stocker dans ma base de données .

foreach (var item in stuff) 
      { 
       string query = String.Format("INSERT INTO sg_top_words (sg_word, sg_count) VALUES ('{0}','{1}')", item.Key, item.COUNT???); 
       cmdIns = new SqlCommand(query, conn); 
       cmdIns.CommandType = CommandType.Text; 
       cmdIns.ExecuteNonQuery(); 
       cmdIns.Dispose(); 
      } 

Merci

Répondre

3

En supposant que la requête est presque ce que vous êtes après, ce tweak devrait le faire:

var stuff = regex.Matches(input) 
    .Cast<Match>() // We're confident everything will be a Match! 
    .Select(c => c.Value.ToLowerInvariant()) 
    .Where(c => !keywords.Contains(c)) 
    .GroupBy(c => c) 
    .Select(g => new { Word = g.Key, Count = g.Count() }) 
    .OrderByDescending(g => g.Count) 
    .ThenBy(g => g.Word); 

Maintenant, la séquence sera d'un type anonyme, avec Key et Count propriétés.

Avez-vous vraiment besoin de commander les résultats si vous les insérez simplement dans une base de données? Pourriez-vous simplement utiliser ceci:

var stuff = regex.Matches(input) 
    .Cast<Match>() // We're confident everything will be a Match! 
    .Select(c => c.Value.ToLowerInvariant()) 
    .Where(c => !keywords.Contains(c)) 
    .GroupBy(c => c) 
    .Select(g => new { Word = g.Key, Count = g.Count() }); 
+0

Eh bien, maintenant que j'ai la valeur Count sauvegardée, je n'ai plus besoin de les commander! :) – discorax

Questions connexes