[Writer] Compter les mots correctement
Publié : 21 janv. 2010 04:37
Bonjour à tous,
Sous OOo (et même WORD 2007), le comptage des mots n'est pas très fiable. Voici donc un bout de code qui permet de compter correctement les mots pour la langue française (respect des apostrophes, pas de comptage de la ponctuation double, tirets) :
Pour plus de détail sur l'obtention de statistiques par macro, voir le fil "[Writer] Affichage des statistiques détaillées d'un texte" dans la section "Suprêmes de code".
En espérant que ça aide la communauté,
Thierry
Edit du 21/01/2010 : Rajout d'une portion de code pour tenir compte des guillemets, des parenthèses ...
Sous OOo (et même WORD 2007), le comptage des mots n'est pas très fiable. Voici donc un bout de code qui permet de compter correctement les mots pour la langue française (respect des apostrophes, pas de comptage de la ponctuation double, tirets) :
Code : Tout sélectionner
Function ComptageMots()
'Macro permettant de calculer le nombre de caractères spéciaux, des signes particuliers, des mots
'par Thierry Munoz, le 20/01/2010, sous License GNU v3
' Comptage des caractères spéciaux, des signes particuliers, des mots
' Les signes de ponctuation encadrés par 2 espaces sont comptabilisés comme un mot
' Ce bug se retrouve sous WORD et sous OOo aussi avec l'outil statistique !!!
' En effet, la méthode de calcul considère qu'un mot est toujours précédé par un espace
' Cette macro fait les corrections pour ces signes de ponctuation doubles (les anglosaxons ne laissent pas d'espace avant), les guillemets,les parenthèses
' Les apostrophes, les tirets sont pris aussi en compte (ce que ne fait pas OOO nativement, idem pour WORD 2007)
texte=thisComponent.Text.String 'récupère le texte du document (sans les cadres de texte)
longueurTexteBrut=len(texte) 'Nombre total de caractères du texte
EspaceAvant=true 'Variable qui permet de compter le nombre de mots séparés par des espaces
For n = 1 to longueurTexteBrut
caractere = Mid(texte, n, 1)
Select Case caractere
Case " " ' espaces
nEsp = nEsp + 1
'compte les espaces successifs qui n'interviennent pas dans le comptage des mots
If EspaceAvant Then nEspaceDouble=nEspaceDouble+1
EspaceAvant=true
Case Chr(9) ' tabulations
nTab = nTab + 1
EspaceAvant=true
Case Chr(13) ' retours à la ligne
nRet = nRet + 1
EspaceAvant=true
Case Chr(10) ' Sauts de ligne qui inclut les chr(13) !!!
nSautLig= nSautLig+1
EspaceAvant=true
Case ":",";","!","?",Chr(34),Chr(171),Chr(187) 'permet de ne pas compter ces signes comme des mots dont les guillemets
nSignesPonctuationDouble=nSignesPonctuationDouble + 1
EspaceAvant=true
Case ".","," 'Cas de la ponctuation simple qui ne devrait pas avoir d'espace devant
EspaceAvant=true
Case "(",")" 'Cas des parenthèses au cas où il y aurait un espace derrière elles
nParentheses=nParentheses+1
Case "'" 'Compte le nombre d'apostrophes
nApostrophes=nApostrophes+1
Case "-" 'Compte le nombre de tirets
If EspaceAvant=false then nTiretsMot=nTiretsMot+1
Case Else 'Permet le calcul du nombre de mots
If EspaceAvant then nMots= nMots+1
EspaceAvant=false
End Select
Next n
'Réajustement du nombre réel de mots
nMots=nMots+nApostrophes+nTiretsMot
End Function
En espérant que ça aide la communauté,
Thierry
Edit du 21/01/2010 : Rajout d'une portion de code pour tenir compte des guillemets, des parenthèses ...