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

MATLAB Discussion :

calcul de fréquence des mots


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut calcul de fréquence des mots
    bonsoir,

    alors, j'ai à traiter 150 textes sous forme.txt sous matlab.

    donc les étapes 1 lire les textes un par un
    2. calculer la fréquence de chaque mot dans un texte
    3 trier les mot par fréquence.
    j'arrive pas à calculer la frequence des mot.

    SVP, quelqu'un a une idée et pourra m'aider .


    je vous remercie.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Une idée sur quoi ? C'est quoi qui te pose problème ?

    Ton titre mentionne la fréquence... l'étape de la lecture est donc passée ?
    Si oui, sous quelle forme obtiens-tu tes données ?
    Si non sous quelle forme sont tes fichiers ?

    Dans tous les cas, je te conseille la lecture de la Lecture/écriture de fichiers

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,
    mes textes (150textes) sont en arabes (chaque textes est composé de 300 mots).
    pour le moment je fais un essaie sur un texte seulement, j'ai pu lire le texte,
    maintenant je veux calculer la fréquence ' l’occurrence' de chaque mot dans le texte.
    j'ai essayé de faire un programme:
    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
    clc; clear all;close all;
    %lire le texte;
    fil_name='C:\Users\leila\Documents\tous\test.txt';
    fid = fopen(fil_name, 'r', 'l', 'UTF8');
    S = fscanf(fid,'%c');
    fclose(fid);
    % calculer la taille du texte;
     
    S = [S(2:end) char(13)];
    nS=length(S);
    % définir tous les caractères de type espace
    dellf = find(abs(S) == 13); %ligne feed delimitor
    delnl = find(abs(S) == 10); %new ligne delimitor
    delsp = find(abs(S) == 32); %space delimitor
    del1=[dellf delnl];
    del2=[dellf delnl delsp];
    del_lin=sort(del1);
    del_tkn=sort(del2);
    nb1 = numel(del_lin);
    nb2 = numel(del_tkn);
    % extraction des mots
    k=0;
    for r = 1:nb2-1;
        deb=del_tkn(r);
        fin=del_tkn(r+1)-1;
        if or((deb+1 <fin ), and((deb+1==fin), double(S(deb+1:fin)> 32)))
            k=k+1;
            % S(deb+1:fin );
            Tkn(k) = {S(deb+1:fin)};
        end;
     
    end;
     
     
    %calcul la frequences des mots;
     
     
    for i=1:(length(Tkn) -1)
     
        c=strcmp(Tkn(i),Tkn);
     
        v=0;
        for j=1:(length(c))
            if  c(j)==1
     
                v = v+1;
            end
     
     
        end
    je veux obtenir une matrice qui calcul la fréquence des mots , car par la suite j'ai besoin de trier les mots selon leurs fréquence.
    NB: je travail sur le thème 'classification thématique automatique des documents textuels".
    je vous remercie.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Une autre façon de lire ton fichier avec textscan :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fid = fopen(fil_name, 'rt', 'l', 'UTF8');
    Tkn = textscan(fid,'%s');
    fclose(fid);
     Tkn = Tkn{1};
    Pour le calcul du nombre d'occurrences, il te faut faire un tableau de même taille que Tkn :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v = zeros(length(Tkn),1);
    for i=1:(length(Tkn) -1)
        c=strcmp(Tkn(i),Tkn);
        v(i) = sum(c);
    end
    Mais en utilisant cette méthode, tu auras autant de fois tes mots qu'il y a d'occurrence.

    Une autre méthode utilisant les fonctions unique et accumarray :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Unik m n] = unique(Tkn);
    nbOccurrence = accumarray(n(:),1,[length(Unik) 1]);
    [Unik(:) num2cell(nbOccurrence)]

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Revenons à mon problème, alors je vous remercie pour la réponse, c'est exactement ce que je cherche.
    Mais peut être j'ai mal exposé mon problème, car par la suite je veux un trie (selon la fréquence des mots) des mots du texte pour prendre les 5 (par exemple) premiers mots fréquents.

    Mon but est de faire une classification thématique, alors, donc si les 5 mots plus fréquents sont du thème sportif donc le texte appartient à la classe des textes sportifs.
    Avez vous une idée, comment je peux faire un trie et prendre les 5 premiers mots fréquents.
    Merci ;

  6. #6
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    en utilisant le code de winjerome et la fonction sort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [~,i]= sort(nbOccurrence );
    [Unik(i) num2cell(nbOccurrence(i))]

  7. #7
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    Voici un script qui fait ce que tu demandes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    fid = fopen('E:/Mes Documents/toto.txt', 'r') ;
    Mots = textscan(fid, '%s') ;
    [Dico, a, ix] = unique(Mots{1}) ;
    t = accumarray(ix,1) ;
    [u, s] = sort(t, 'descend') ;
     
    % liste les mots les plus fréquents
    Dico(s(1:5))
    ceci dit, la réponse que j'obtiens sur mon fichier toto.txt est celle que j'attendais (et probablement pas toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >> Dico(s(1:5))
     
    ans = 
     
        'de'
        'la'
        'le'
        'du'
        'au'
    Pour revenir à ton problème initial, ce dont tu as besoin c'est pas de chercher le mot le plus fréquent.
    En effet, il peut y avoir 1 mot sur 10 qui a trait au sport, mais dont aucun n'est répété souvent.
    Par contre, les mots clé du langage, sans connotation sémantique précise (verbes être et avoir, articles, pronoms, prépositions, conjonctions, adverbes, ...) ont toutes les chances d'être répétés souvent et dans tous les textes.

    Ce dont tu as donc besoin, c'est de classer sémantiquement chaque mot, puis de regarder la classe sémantique dominante dans ton texte. Mais ça, c'est plus difficile que de compter des mots.

    voir ce qui se fait sur des forums de linguistique....

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    bonsoir, je vous remercie infiniment pour votre réponse.

    j'ai une autre question svp, comment je peux supprimer( ou bien remplacer par des espaces) les caractères de ponctuation et les chiffres.

    je sais comment remplacer les caractères de ponctuation sous word mais c'est un peu long.


    merci

  9. #9
    Invité
    Invité(e)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de la pertinence des mots dans un moteur de recherche
    Par kilian67 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 04/10/2012, 16h13
  2. Calcule fréquences de mots clés dans un texte
    Par ysahel dans le forum Général Python
    Réponses: 7
    Dernier message: 21/08/2012, 12h02
  3. un programme qui calcule le nombre des mots
    Par komat dans le forum Débuter
    Réponses: 3
    Dernier message: 06/12/2010, 23h46
  4. Fréquences des mots : la méthode TF-IDF
    Par pyknite dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 25/06/2009, 10h01
  5. TStringList et fréquence des mots.
    Par Bruno13 dans le forum Delphi
    Réponses: 58
    Dernier message: 05/07/2007, 13h38

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