Recherche de mots clé dans une cellule

bouhh01142

XLDnaute Nouveau
Bonjour à tous,

Ceci est mon premier post sur ce forum, et je pars confiant en ce qui concerne vos future réponses :p
Pour ce qui est de mon "problème", je cherche donc un moyen de pouvoir extraire dans une cellule les mots clé en me basant sur leur nombre d’occurrences. Quelle démarche me conseilleriez-vous?

Merci d'avance,
Bouhhh
 

bouhh01142

XLDnaute Nouveau
Re : Recherche de mots clé dans une cellule

En effet, ce serais pas mal ! Voili Voilou, en pièce jointe un exemple de ma feuille excel, et ce que je voudrais obtenir c'est dans une autre cellule avoir les mots clés pour chaque articles ( C1: Mots clés de l'article en B1, C2: Mots clés de l'article en B2) en ayant pour chaque article les 5 mots les plus répétés.
 

Pièces jointes

  • Bdd_articles.xlsx
    13.5 KB · Affichages: 104

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Bonjour, salut Marc,
Ce que tu demande ne se fait pas en un tour de main et demande plus de précision que les éléments que tu fournis pour l'instant...
Quelques questions préliminaires :
- qu'entends-tu par "mot clé" ? Donne-nous des exemples de mots clés
- qu'entends-tu par "articles" ? Donne-nous des exemples
...en ayant pour chaque article les 5 mots les plus répétés.
Tous les mots doivent-il être pris en compte ? Si c'est le cas, les articles (la, un ,de,...) sortiront obligatoirement en 1er.
Tu peux prendre un exemple de ton fichier (ou le faire sur une phrase plus courte mais explicite) et noter manuellement les résultats attendus pour que l'on comprenne bien ce que tu veux, en y joignant quelques explications.
A+
 

bouhh01142

XLDnaute Nouveau
Re : Recherche de mots clé dans une cellule

Bonjour David,
pour ce que j'entends par mots clés: Ce sont les mots les plus répétés par articles. Dans le document que j'ai posté, les articles sont les textes insérés dans les balises B1 à B4.
Ce serais en effet plus judicieux d’occulter les articles (la, un ,de,...).

Par exemples pour la première ligne, je voudrais connaitre et pouvoir stocker ou afficher les 5 mots les plus répétés dans la cellule B1.

J’espère avoir été assez clair, mais dites le moi si ce n'est pas le cas.

Merci!
 

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Re
J’espère avoir été assez clair, mais dites le moi si ce n'est pas le cas
Et bien ce n'est pas le cas...
les articles sont les textes insérés dans les balises B1 à B4
Qu'appelles-tu balise ? Je n'en vois pas a priori.
Par exemples pour la première ligne, je voudrais connaitre et pouvoir stocker ou afficher les 5 mots les plus répétés dans la cellule B1.
Je t'ai demandé un exemple concret que tu ne m'as pas fourni pour l'instant.
Prenons par exemple les 2 premières phrases de B1 :
Collègue, femme, "amante", amie… Être une maman aujourd’hui, c’est être une héroïne au quotidien. Véritable wonderwoman, on aime tout mener de front mais à vouloir trop bien faire, on se met souvent une pression de dingue. Alors si au lieu de courir toujours plus vite, on ralentissait le rythme ? Des mompreneurs, mamans et chefs d'entreprise à la fois, qui ont l’habitude de tout gérer (ou presque) nous donnent des pistes pour nous faciliter la vie et freiner en douceur !
Dis-moi quels sont les 5 mots qui reviennent le plus pour toi et quels sont les mots que tu ne prends pas en compte dans ton comptage (prend-t-on de à la,...) et pourquoi. Que fait-on des mots comportant une apostrophe (l'habitude, aujourd'hui,...) ? Comme tu le constate, il te faut être précis et bien cerner dès le départ ce que tu veux vraiment avant de commencer car je ne referai pas le boulot.
A+
 

tototiti2008

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Re,
Bonjour David :),

une base de réflexion, dans l'attente des réponses de bouhhhh
Renvoie toutes les occurrences, pas les 5 plus grandes

Code:
Function OccurrencesMots(Cel As Range) As String
Dim Texte As String, Liste, Liste2, i As Long, j As Long, Dico, Res() As String
    Liste = Array(",", ";", ".", "?", "!", "(", ")", "…", ":")
    Texte = LCase(Cel.Value)
    Texte = Replace(Texte, "'", " ")
    Texte = Replace(Texte, "’", " ")
    For i = LBound(Liste) To UBound(Liste)
        Texte = Replace(Texte, Liste(i), "")
    Next i
    Texte = Replace(Texte, Chr(10), " ")
    Texte = Application.Trim(Texte)
    Liste = Array("a", "à", "de", "du", "l", "d", "le", "la", "les", "des", "on", "c", "s", "qu", "que", "qui", "quoi", "donc", "si", "une", "un", "se", "sa", "ses", "son", "et", "ou")
        For i = LBound(Liste) To UBound(Liste)
    Texte = Replace(" " & Texte & " ", " " & Liste(i) & " ", " ")
    Next i
    ReDim Res(0)
    Texte = Application.Trim(Texte)
    Liste = Split(Texte)
    Set Dico = CreateObject("Scripting.Dictionary")
    For i = LBound(Liste) To UBound(Liste)
        If Dico.Exists(Liste(i)) Then
            Liste2 = Dico.keys
            j = Application.Match(Liste(i), Liste2, 0) - 1
            Res(j) = Res(j) + 1
        Else
            Dico(Liste(i)) = Liste(i)
            ReDim Preserve Res(Dico.Count - 1)
            Res(UBound(Res)) = 1
        End If
    Next i
    Liste2 = Dico.keys
    Texte = ""
    For i = LBound(Res) To UBound(Res)
    Texte = Texte & Liste2(i) & " : " & Res(i) & Chr(10)
    Next i
    OccurrencesMots = Texte
End Function
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Re Marc,
en attendant les réponses, ci-joint une fonction renvoyant les n plus grandes occurrences (nombre d'occurrences à choisir), mais pour l'instant tout est traité, y compris les articles :
Code:
Function OccurrenceMot(Chaine As String, occurrence As Double) As String
Dim s As Variant, T(), T2(), TOc(), oRegExp As Object, Matches As Object
Dim I As Double, dico As Object, k As Byte
Chaine = Trim(LCase(Replace(Chaine, """", "")))
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
  .Global = True
  .Pattern = "(?:[ \t\v\f]*([-,?!;.:…_–—()\[\]{}“”«»\\|/§~#`^@]+)[ \t\v\f]*)" ' '’
If .test(Chaine) = True Then Set Matches = .Execute(Chaine): Chaine = .Replace(Chaine, " ")
    
    'épurage des espaces en trop "
    .Pattern = "(\s){2,}"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
End With

Set dico = CreateObject("scripting.dictionary")
s = Split(Chaine)
For I = LBound(s) To UBound(s)
    dico(s(I)) = dico(s(I)) + 1
Next I
T = dico.keys
T2 = dico.items
ReDim TOc(1 To occurrence)
For I = 1 To occurrence
    k = Application.WorksheetFunction.Match(Application.WorksheetFunction.Large(T2, 1), T2, 0) - 1
    TOc(I) = T(k): T2(k) = ""
Next I
OccurrenceMot = Join(TOc, " ; ")
End Function
A+
 

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Bonjour,
en attendant les réponses aux questions posées et les précisions nécessaires à l'affinage de la fonction, ci-joint une version plus aboutie permettant :
- le choix du nombre maximal d'occurrences
- les mots extraits avec le nombre de fois où ils apparaissent.
Les motifs ont été séparés afin de traiter les mots à éliminer du traitement en fonction de leur longueur (on peut faire plus compacte mais on y perd en visibilité et compréhension).

Reste maintenant à compléter les motifs en fonction des mots à éliminer du traitement (cf. notamment si l'on garde ou pas les sujets je, tu, il, elle, nous, vous, ils, elles).
Code:
Function OccurrenceMot(Chaine As String, occurrence As Double) As String
Dim s As Variant, T(), T2(), TOc(), oRegExp As Object, Matches As Object
Dim i As Double, dico As Object, k As Byte, Borne As Byte
Chaine = Trim(LCase(Replace(Chaine, """", "")))
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
  .Global = True
  .MultiLine = True
    'traitement des espaces
    .Pattern = "\s+"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
        
    'traitement des caractères ponctuation
    .Pattern = "[,?!;.:…_()\[\]{}“”«»\\|/§~#`^@]+" ' '’-–—
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
      
    'traitement des apostrophes
    .Pattern = "(^|\s)(c|d|l|n|qu|s)(’|')"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
      
    'traitement des mots à 1 lettre
    .Pattern = "(^|\s)[àa](\s|$)"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
    
    'traitement des mots à 2 lettres
    .Pattern = "(^|\s)(au|e[nt]|n[ei]|o[nru]|[çclmnts][àaei]|d[eu]|un)(\b|$)"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
    
    'traitement des mots à 3 lettres
    .Pattern = "(^|\s)(aux|une|car|[dlmst]es|[mst](oi|on)|pas|qu[ei])(\b|$)"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
    
    'traitement des mots à 4 lettres
    .Pattern = "(^|\s)(donc|leur(s?)|mais|[n|v](o|ô)tre|plus|pour|tou[st]|trop)(\b|$)"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
    
    'traitement des mots à 5 lettres
    .Pattern = "(^|\s)(comme)(\b|$)"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
    
    'épurage des espaces en trop "
    .Pattern = "(\s){2,}"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
End With

Set dico = CreateObject("scripting.dictionary")
s = Split(Trim(Chaine))
For i = LBound(s) To UBound(s)
    dico(s(i)) = dico(s(i)) + 1
Next i
T = dico.keys
T2 = dico.items
Borne = Application.Min(dico.Count, occurrence)
ReDim TOc(1 To Borne)
For i = 1 To Borne
    k = Application.Match(Application.Max(T2), T2, 0) - 1
    TOc(i) = T(k) & " (" & T2(k) & ")": T2(k) = ""
Next i
OccurrenceMot = Join(TOc, vbLf)
End Function

A+
 

Pièces jointes

  • Occurrence_mot_XLD.xls
    52 KB · Affichages: 100
  • Occurrence_mot_XLD.xls
    52 KB · Affichages: 102
  • Occurrence_mot_XLD.xls
    52 KB · Affichages: 103

bouhh01142

XLDnaute Nouveau
Re : Recherche de mots clé dans une cellule

Bonjour à tous,

Désolé de n'avoir pas répondu plus tôt, mais en tout les cas je vous remercie vraiment beaucoup de toute votre aide!!
C'est exactement ce que je cherchais à faire, et pour répondre aux questions, lorsque je parlais de balise c'était une erreur je parlais en fait de cellule.
D'autres part je vais me baser sur la dernière version de David (merci encore!) et j'aimerais savoir ce que vous entendez par motifs. Pour ce qui en est des mots à exclure, je compte ne pas inclure dans la liste définitive les pronoms personnels, les verbes et les articles. A e sujet, serait-il possible d'inclure un tableau contenant tout les mots à "bannir" et que je pourrais moi même compléter selon les besoins?

Je vous remercie encore de vos réponses aussi pertinentes que rapide!
 

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Re
A e sujet, serait-il possible d'inclure un tableau contenant tout les mots à "bannir" et que je pourrais moi même compléter selon les besoins?
Effectivement, cela sera bien plus simple pour toi de passer par une liste que de modifier les motifs d'expression rationnelle.
J'ai donc créé un onglet "Liste". Dans la colonne A, tu n'as qu'à rajouter les uns à la suite des autres les mots que tu veux exclure (je t'en ai mis quelques uns pour tester).
De ce fait, j'ai allégé la fonction (appelée OccurrenceMot2) des motifs qui traitent des mots à exclure.
J'ai également laissé la fonction initiale (OccurrenceMot) pour ceux qui préfèrent passer par les expressions rationnelles.
Teste et dis-nous.
A+
 

Pièces jointes

  • Occurrence_mot_XLD.xls
    58 KB · Affichages: 54
  • Occurrence_mot_XLD.xls
    58 KB · Affichages: 54
  • Occurrence_mot_XLD.xls
    58 KB · Affichages: 75

david84

XLDnaute Barbatruc
Re : Recherche de mots clé dans une cellule

Re
ajout d'une petite MFC indiquant si un mot est déjà présent dans la liste afin d'éviter les doublons lors de la saisie.
A+
 

Pièces jointes

  • Occurrence_mot_XLD.xls
    55.5 KB · Affichages: 71
  • Occurrence_mot_XLD.xls
    55.5 KB · Affichages: 81
  • Occurrence_mot_XLD.xls
    55.5 KB · Affichages: 75

bouhh01142

XLDnaute Nouveau
Re : Recherche de mots clé dans une cellule

Bonjour David,
Merci, ça marche parfaitement et au delà de mes espérance :)
"Dernière" question, j'aimerais savoir à quelle endroit je peux voir et éventuellement modifier le contenu des fonctions que tu m'as crée?
Merci beaucoup!
 

Discussions similaires

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 823
dernier inscrit
ben talha redouane