2010-10-11 9 views
1

Comment stocker et récupérer 3,000,000+ mots Dynamiquement sans utiliser SQL ..Dynamiquement Stockage et retriving 3.000.000 + mots C# .NET à l'aide des collections

placer un mot d'un document, puis vérifier si le mot est disponible ou non .

si elle est disponible, puis incrémenter dans nombre de documents correspondant ...

si non disponible i.e., Nouveau mot puis créez une nouvelle colonne puis incrémenter le compteur de documents et mis à zéro à tous les autres documents.

Par exemple ..

I ayant 93.000 documents contiennent chacun plus ou moins 5000 mots. Si un nouveau mot vient, ajoutez une nouvelle colonne. De même, 960000 mots sont venus.

Mot1 word2 mot3 ---------------- word4 word5 ... .---- Nouveau mot ...word96000

Document1 ---- 2 ---- 19 ---- 45 ---- 16 ---- 7 ---- ------ ... .0 ---- .. ---- ..

Document2 ---- 4 ---- 6 ---- 3 ---- 56 ---- 3 ---- .... -------- 0 ---- .. ---- ..

Document3 ---- 56 ---- 34 ---- 1 ---- 67 - --4 ---- .... -------- 0 ---- .. ---- ..

Document4 ---- 7 ---- 45 ---- 9 ---- 45 - --6 ---- .... -------- 0 ---- .. ---- ..

Document5 ---- 56 ---- 43 ---- 234 ---- 87 - --46 ---- .... -------- 0 ---- ..

Document6 ---- 56 ---- 6 ---- 2 ---- 5 ---- 23 --- - .... -------- 0 ---- .. ---- ..

. .... . .. ..

. .... . .. ..

. .... . .. ..

. .... . .. ..

. .... . .. ..

. .... . .. ..

. .... . .. ..

Document1000 ---- 5 ---- 9 ---- 9 ---- 89 ---- 34 ---- .... -------- 1 .. ..

Le nombre de mots ajoutés est mis à jour dynamiquement dans l'entrée du document correspondant.

+2

Avez-vous essayé quelque chose? Voulez-vous que le résultat entre dans la mémoire afin que vous puissiez l'interroger, ou voulez-vous simplement que les résultats soient affichés dans un fichier quelque part? Il y a plusieurs façons d'aborder cela, mais le meilleur moyen dépend beaucoup de ce que vous voulez que le résultat final soit. –

Répondre

2

Une telle matrice clairsemée est souvent mieux mise en œuvre en tant que dictionnaire de dictionnaires.

Dictionary<string, Dictionary<string, int> index; 

Mais la question manque trop de détails pour donner plus de conseils.

0

Pour éviter de perdre la mémoire, je suggère ce qui suit:

class Document { 
    List<int> words; 
} 
List<Document> documents; 

Si vous avez 1000 documents puis créez List<Document> documents = new List<Document>(1000);
Maintenant, si document1 a les mots: word2, word19 et word45, ajoutez l'indice de ces mots à votre document

documents[0].words.add(2); 
documents[0].words.add(19); 
documents[0].words.add(45); 

Vous pouvez modifier le code pour stocker les mots eux-mêmes.
Pour voir combien de fois le mot word2 est répété, vous pouvez aller jeter la liste entière des documents et voir si le document contient l'index des mots ou non.

foreach (Document d in documents) { 
    if (d.words.Contain(2)) { 
     count++; 
    } 
} 
0
var nWords = (from Match m in Regex.Matches(File.ReadAllText("big.txt").ToLower(), "[a-z]+") 
       group m.Value by m.Value) 
      .ToDictionary(gr => gr.Key, gr => gr.Count()); 

Fournir une liste dictionnaire indexé par mot et compter. Je suis sûr que vous pourriez alors enregistrer les informations que chaque fichier est lu et ensuite construire vos listes finales. peut-être?