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

Delphi Discussion :

Comparaison de 2 TStringList pour extraire d'un texte les mots vides


Sujet :

Delphi

  1. #21
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-Salut,

    "j'ai parfois un indice hors limite pour " : bizarre, car c'est la transposition exacte d'un truc qui a marché ailleurs, on commence bien par comprarer les deux derniers de la liste, et s'il y a doublon on Delete celui d'indice i>j, et qu'il y ait doublon ou pas on dec(i). Essayes le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                     i := StringListMotsDuTexteAAusculter.count - 1;
                    while i>=1 do
                    begin  j:=i-1;
                             if StringListMotsDuTexteAAusculter [i]=StringListMotsDuTexteAAusculter[j] 
                             then StringListMotsDuTexteAAusculter.delete(i);
                             dec(i);
                    end;
    "Alors cela va bcp plus vite" : C'est combien "bcp" de fois plus rapide ?

    Au fait j'ai poursuivi à propos des mot-vides : Voiçi le début de la liste évoquée l'autre jour et où j'ai sorti sur un fichier plus la fréquence d'apparition des mots-vides de 2 caractères-et-plus le fichier-source fait 1905 Ko de texte-brut *.txt (classeur de 5 cm d'épaisseur) le vocabulaire utilisé se réduit à une liste de 11421 lignes (sous Word la liste du vocabulaire occupe 195 pages avant suppression de la terminologie spécifique)
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    20686 	 de	
     8197 	 la	
     8156 	 des	
     6032 	 les	
     5810 	 et	
     4503 	 Le	
     4322 	 en	
     4057 	 Un	
     4049 	 du	
     3043 	 par	
     2805 	 Une	
     2618 	 ou	
     2505 	 pour	
     1966 	 sur	
     1877 	 au	
     1753 	 dans	
     1451 	 être	
     1249 	 que	
    Début apparition de termes spécifiques	
     1039 	 aux	
    …	…	
      982 	 est	
      804 	 ne	
      718 	 cas	
    …	…	
      676 	 Ce	
      644 	 avec	
    …	…	
      611 	 doit	
      591 	 pas	
      564 	 soit	
    …	…	
      535 	 cette	
    …	…	
      529 	 ces	
    …	…	
    …	…	
      476 	 Il	
    …	…	
      466 	 sont	
    …	…	
      453 	 plus	
    …	…	
      438 	 toute	
    …	…	
      404 	 si	
    …	…	
      398 	 leur
    …	…	
      381 	 qui	
    …	…	
      360 	 lors	
      356 	 avant	
    …	…	
      349 	 moins	
    …	…	
      345 	 tout	
    …	…	
      333 	 entre	
    …	…		
      322 	 afin	
      314 	 sera	
      303 	 Se	
      299 	 contre	
      273 	 sous	
      270 	 doivent	
      261 	 deux	
      259 	 non	
      248 	 peut	
      243 	 cet	
      241 	 tous	
      239 	 après	
      224 	 son	
      203 	 Sans	
      201 	 dont	
      191173 	 sa	
      161 	 ainsi	
      158 	 autre	
      153 	 autres	
      146 	 et/ou	
      145 	 même	
      141 	 notamment	
      137 	 etc	
      131 	 ils	
      121 	 selon	
      119 	 hors	
      115 	 Telle 
    fin extrait	/ liste de 11421 lignes.
    ... pour le cas où ceci pourrait te donnner des idées pour optimiser ta liste de mots-vides ... car plus elle est courte et fiable mieux c'est pour la vitesse.

  2. #22
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Voilà, désolé pour le bug c'était une erreur de ma part en amont

    Pour la vitesse, je suis à 2 minutes 30 (pour tous mes traitements, et y'en a) pour 1000 pages donc c'est ok pour la vitesse maintenant. (j'etais à plus de 5 minutes avant sur le même corpus). Je suis sûr que je peux encore optimiser car en fait je n'ai pas de LoadFromFile mais j'ai le texte HTML que je traduit en Texte pur. Cela peut prendre aussi du temps et ensuite je fais un split pour extraire chaque mot.

    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
    20
    21
    22
    23
    24
    25
    26
    27
      StringListMotsDuTexteAAusculter:=TStringList.Create;
      Try
        Parser := THyperParse.Create;
        Try
          Parser.FileName := '';
          Parser.FileText := Texte;
          Parser.Execute;
          Texte:='';
          with StringListMotsDuTexteAAusculter do
          begin
            Sorted:=FALSE;
     
            //Phase de chargement-traitement-préalable de StringListMotsDuTexteAAusculter
            for i := 0 to Parser.Count - 1 do
              if (Parser[i].IsTag = False) then
              Begin
                 PhraseDuTexte:=Trim(Parser[i].Text);
                 if (PhraseDuTexte<>'') then
                   Split(PhraseDuTexte, ' ', StringListMotsDuTexteAAusculter);
              End;
            Sort; // tri-Alpha
          end;
        Finally
          Parser.Free;
        End;
       .....
    .....
    Pour la liste des mots vides je me suis servie de cette adresse :
    http://www.ranks.nl/stopwords/index.html

    Cela semble plutôt bien, donc je peux dire que la détection de langue est : ok !
    Et je le dis avec grand plaisir grâce à toi.

  3. #23
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Ok, vu. Facteur d'accélération = 2 je pensais qu'on obtiendrait quand même davantage ... pas les 71 mais au moins 15 par exemple.

    Parser et Split : connais pas.

    Liste des mots vides : je viens de jeter un coup d'oeil chez :
    http://www.ranks.nl/stopwords/index.html
    ... pas mal le boulot était presque prémâché
    ... mais j'ai remarqué en comparant simplement la française et l'anglaise que le mot "en" était présent dans les deux listes ce qui n'est pas bien discriminatoire pour distinguer deux langues ... à ta place je ferais une boucle de comparaison des listes-de-mots-vides pour vérifier en les prenant deux à deux si cela ne reproduit pas ailleurs.
    ... je viens d'y retourner et encore remarqué que "de" est présent dans la liste anglaise (!?) et absent de la liste française(!?).
    ... et ça tombe pile sur le "de" qui est placé au hit-parade de ma liste avec ses 20686 occurences devant le second le "la" avec ses seulement 8197 occurences ... ça donne l'impression d'un boulot prémâché mais bâclé. Non?
    A+

  4. #24
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Je t'avoue que j'e n'avais pas fait attention que le "de" n'était pas présent. Par contre effectivement il y a des termes qui se recoupent mais ne sachant pas encore quel allait être le résultat de la fonction DetectLang, je n'ai pas cherché à optimiser.

    De toute façon pour l'instant, cela me convient car je souhaite avancer un peu sur le projet. Il me reste à :
    - Epurer le texte des mots vides et autres infos non désirables
    - Calculer les Fréq

    Mais biensûr ce n'est pas tout... mais je vais pas à pas dans les étapes.

    Pour Parser, c'est un simple ParserHTML pour extraire le texte (voir http://www.wakproductions.com/)

    Et pour Split, c'est une fonction qui eclate une string dans une StringList par rapport à un caractère donnée.

  5. #25
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Ok, vu, merci pour ces infos.
    Et bon développement.
    A+

  6. #26
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    C'est moi qui te remercie, je peux maintenant mettre le tag résolu grâce à ton aide !

    thank's !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/03/2015, 15h12
  2. Y-a-t-il plus rapide pour enlever les mots vides ?
    Par Bruno13 dans le forum Delphi
    Réponses: 33
    Dernier message: 26/07/2007, 18h03
  3. Script pour extraire la meteo depuis un serveur XML.Probleme
    Par Zarma67 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/02/2006, 12h13
  4. Utiliser un parser pour extraire des formules
    Par EpOnYmE187 dans le forum C++
    Réponses: 2
    Dernier message: 16/03/2005, 00h55
  5. [Comparaison] Jbuilder ou Eclipse pour Swing ?
    Par phpe dans le forum Eclipse
    Réponses: 12
    Dernier message: 04/10/2004, 10h33

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