IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Performance de découpage d'un texte


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut Performance de découpage d'un texte
    Bonjour,
    Je dois améliorer une apply qui parcourt un texte pour en dénombrer le nombre de mots et leurs occurrences (dite segmentation). J'ai donc une classe qui a pour attributs : Un String et une liste d'occurrences sous forme d'une liste de paire d'offset.
    Cette classe s'appelle SEGINCONTEXTS et la classe qui contient tous les mots est SEGINCONTEXTSLIST (logique ! ).

    Voilà d'un point de vue mémoire c'est performant pour des textes (.txt) ne dépassant pas les 900ko.
    C'est pour ça que je voudrais savoir si quelqu'un a une idée pour que je puisse segmenter un texte de n'importe quelle taille ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, montre nous le code de cette classe pour qu'on puisse te dire ce qui peut être amélioré

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Ben le problème c'est qu'il y a 3-4 classes qui travaillent pour cette segmentation et avec toutes les fonctions en plus il y en a pour minimum 200lignes chacune. Donc en fait lorsque je trouve un mot (c'est pas moi qui est écrit la fonction qui cherche les mots) je l'envoi dans cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     public void addWord(OffsetPair op, String s)
        {
        	boolean alreadyIs = false; 
        	for(Object o : this)
        	{
        		SEGINCONTEXTS sic = (SEGINCONTEXTS) o;
        		if(sic.getString().equals(s)){
        			sic.addContext(op);
        			alreadyIs = true;
        			break;
        		}
        	}
        	if(!alreadyIs)
        	{
        		OffsetPairList opl = new OffsetPairList(); 
        		opl.addElement(op);
        		this.addElement(new SEGINCONTEXTS(Global.corpus,s,opl));
        	}
        }
    qui est dans la classe de SEGINCONTEXTSLIST.

    Je vous passerais bien le code de la segmentation mais il fait 150 lignes et c'est assez dur a décrypté.
    Mais sinon en gros le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     SEGINCONTEXTSLIST extends  Vector
    Donc au bout d'un moment il n'y a plus assez de mémoire pour garder tous les mots.

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut En clair
    En fait j'ai une question plus précise,

    Au début quand je faisais ma segmentation, je sauvegardais tout le vector de SEGINCONTEXTS dans un fichier. donc pour les petits textes ca marche, mais maintenant il me faut pas un truc performant(enfin si mais pas prioritairement), il faut un truc qui ne dépasse pas la mémoire. du coup j'ai fais le test : quand mon vector de mots est égal à 2000 mots je le sauvegarde (mots + offsets) et je vide le vector. Plus tard je ferais des tries pour fusionner les différents fichiers.

    Donc je me demande si c'est possible de sauvegarder et de vider ce vector juste avant qu'il me génère une erreur de type "oufOfMemory"

    En espérant m'être fait comprendre,
    Merci

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu peux utiliser un "java.lang.ref.SoftReference". C'est fait pour ça. S'il n'y a plus assez d'espace mémoire, le garbage collector va supprimer l'objet contenu dans un SoftReference.

    Pour la liste des mots à chercher, tu peux par exemple déclarer N ArrayList rangés dans N SoftReference :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    liste : ArrayList de SoftReference
    liste[ i ] : SoftReference de ArrayList
     
    pour chaque i de liste
      softReference = liste[ i ]
      arrayList = softReference.get()
      si arrayList == null
        recréer arrayList à partir du fichier
        softReference.set( arrayList )  => n'existe pas mais pour simplifier l'algo
      finsi
      ...
      travailler avec arrayList
      ...
    finpour
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Merci !
    Je vais étudier la java doc pour voir ça de plus près.
    Ciao

Discussions similaires

  1. [ksh]Découpage d'un texte
    Par ManusDei dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 10/12/2013, 17h02
  2. Réponses: 10
    Dernier message: 26/01/2011, 11h15
  3. découpage de fichier texte en tenant compte d'un délimiteur
    Par c_salsabil dans le forum Général Java
    Réponses: 3
    Dernier message: 29/12/2009, 20h56
  4. Réponses: 4
    Dernier message: 02/03/2007, 11h35
  5. découpage de fichier image + texte
    Par dirty_boy dans le forum C
    Réponses: 8
    Dernier message: 13/03/2006, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo