web-dev-qa-db-fra.com

Essayer de compter les mots dans une chaîne

J'essaie d'analyser le contenu d'une chaîne. Si la ponctuation est mélangée dans le mot, je souhaite les remplacer par des espaces.

Par exemple, si Johnny.Appleseed! Est: un * bon & agriculteur est entré en tant qu'entrée, alors il devrait indiquer qu'il y a 6 mots, mais mon code ne le voit que comme 0 mot. Je ne sais pas comment supprimer un caractère incorrect.

FYI: J'utilise Python 3, je ne peux pas non plus importer de bibliothèques

string = input("type something")
stringss = string.split()

    for c in range(len(stringss)):
        for d in stringss[c]:
            if(stringss[c][d].isalnum != True):
                #something that removes stringss[c][d]
                total+=1
print("words: "+ str(total))
9
Harry Harry

Solution simple basée sur une boucle:

strs = "Johnny.Appleseed!is:a*good&farmer"
lis = []
for c in strs:
    if c.isalnum() or c.isspace():
        lis.append(c)
    else:
        lis.append(' ')

new_strs = "".join(lis)
print new_strs           #print 'Johnny Appleseed is a good farmer'
new_strs.split()         #prints ['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']

Meilleure solution:

Utilisation de regex:

>>> import re
>>> from string import punctuation
>>> strs = "Johnny.Appleseed!is:a*good&farmer"
>>> r = re.compile(r'[{}]'.format(punctuation))
>>> new_strs = r.sub(' ',strs)
>>> len(new_strs.split())
6
#using `re.split`:
>>> strs = "Johnny.Appleseed!is:a*good&farmer"
>>> re.split(r'[^0-9A-Za-z]+',strs)
['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']
15
Ashwini Chaudhary

Voici une solution d'une ligne qui ne nécessite aucune importation de bibliothèque.
Il remplace les caractères non alphanumériques (comme la ponctuation) par des espaces, puis la variable splits.

Inspiré de " Chaînes Python divisées avec plusieurs séparateurs "

>>> s = 'Johnny.Appleseed!is:a*good&farmer'
>>> words = ''.join(c if c.isalnum() else ' ' for c in s).split()
>>> words
['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']
>>> len(words)
6
11
Prashant Kumar

essayez ceci: il analyse Word_list en utilisant re, puis crée un dictionnaire de Word: apparences

import re
Word_list = re.findall(r"[\w']+", string)
print {Word:word_list.count(Word) for Word in Word_list}
3
Dotan

Que diriez-vous d'utiliser Counter à partir de collections? 

import re
from collections import Counter

words = re.findall(r'\w+', string)
print (Counter(words))
1
sweet_sugar
for ltr in ('!', '.', ...) # insert rest of punctuation
     stringss = strings.replace(ltr, ' ')
return len(stringss.split(' '))
1
Rushy Panchal

Je sais que c'est une vieille question, mais ...

string = "If Johnny.Appleseed!is:a*good&farmer"

a = ["*",":",".","!",",","&"," "]
new_string = ""

for i in string:
   if i not in a:
      new_string += i
   else:
      new_string = new_string  + " "

print(len(new_string.split(" ")))
1
TMoover
#Write a python script to count words in a given string.
 s=str(input("Enter a string: "))
 words=s.split()
 count=0
  for Word in words:
      count+=1

  print(f"total number of words in the string is : {count}")
0
alien ware