web-dev-qa-db-fra.com

Comment compter le nombre de mots d'une phrase en ignorant les nombres, la ponctuation et les espaces?

Comment pourrais-je compter pour compter les mots dans une phrase? J'utilise Python.

Par exemple, je pourrais avoir la chaîne: 

string = "I     am having  a   very  Nice  23!@$      day. "

Ce serait 7 mots. J'ai des problèmes avec la quantité aléatoire d'espaces après/avant chaque mot ainsi que lorsque des nombres ou des symboles sont impliqués 

51
jerry2144

str.split() sans aucun argument, se scinde en séries de caractères blancs:

>>> s = 'I am having a very Nice day.'
>>> 
>>> len(s.split())
7

De la documentation liée:

Si sep n'est pas spécifié ou est None, un algorithme de scission différent est appliqué: les suites d'espaces consécutifs sont considérées comme un séparateur unique et le résultat ne contiendra aucune chaîne vide au début ou à la fin si la chaîne a des espaces de fuite.

72
arshajii

Vous pouvez utiliser regex.findall() :

import re
line = " I am having a very Nice day."
count = len(re.findall(r'\w+', line))
print (count)
46
karthikr

Ceci est un simple compteur de mots utilisant regex. Le script comprend une boucle que vous pouvez terminer lorsque vous avez terminé.

#Word counter using regex
import re
while True:
    string =raw_input("Enter the string: ")
    count = len(re.findall("[a-zA-Z_]+", string))
    if line == "Done": #command to terminate the loop
        break
    print (count)
print ("Terminated")
4
Aliyar

Ok voici ma version de faire cela. J'ai remarqué que vous voulez que votre sortie soit 7, ce qui signifie que vous ne voulez pas compter les caractères spéciaux et les nombres. Donc, voici le motif regex:

re.findall("[a-zA-Z_]+", string)

[a-zA-Z_] signifie qu'il correspondra à n'importe quel caractère entre a-z (minuscule) et A-Z (majuscule). 


À propos des espaces. Si vous souhaitez supprimer tous les espaces supplémentaires, procédez comme suit:

string = string.rstrip().lstrip() # Remove all extra spaces at the start and at the end of the string
while "  " in string: # While  there are 2 spaces beetwen words in our string...
    string = string.replace("  ", " ") # ... replace them by one space!
2
JadedTuna
s = "I     am having  a   very  Nice  23!@$      day. "
sum([i.strip(string.punctuation).isalpha() for i in s.split()])

La déclaration ci-dessus parcourt chaque bloc de texte et supprime les ponctuations avant de vérifier si le bloc est réellement une chaîne d'alphabets. 

2
boon kwee
    def wordCount(mystring):  
        tempcount = 0  
        count = 1  

        try:  
            for character in mystring:  
                if character == " ":  
                    tempcount +=1  
                    if tempcount ==1:  
                        count +=1  

                    else:  
                        tempcount +=1
                 else:
                     tempcount=0

             return count  

         except Exception:  
             error = "Not a string"  
             return error  

    mystring = "I   am having   a    very Nice 23!@$      day."           

    print(wordCount(mystring))  

la sortie est 8

1
Darrell White

Pourquoi ne pas utiliser une simple boucle pour compter le nombre d'espaces!?

txt = Just an example here move along  
count = 1
for i in txt:
    if i == " ":
        count += 1
print(count)
0
Anto
import string 

sentence = "I     am having  a   very  Nice  23!@$      day. "
# Remove all punctuations
sentence = sentence.translate(str.maketrans('', '', string.punctuation))
# Remove all numbers"
sentence = ''.join([Word for Word in sentence if not Word.isdigit()])
count = 0;
for index in range(len(sentence)-1) :
    if sentence[index+1].isspace() and not sentence[index].isspace():
        count += 1 
print(count)
0
Adam