tiene - funcion contar palabras python
¿Cómo contar el número de palabras en una oración, ignorar números, puntuación y espacios en blanco? (6)
¿Cómo voy a contar las palabras en una oración? Estoy usando Python.
Por ejemplo, podría tener la cadena:
string = "I am having a very nice 23!@$ day. "
Eso sería 7 palabras. Tengo problemas con la cantidad aleatoria de espacios después de cada palabra, así como cuando se trata de números o símbolos.
Este es un simple contador de palabras usando expresiones regulares. La secuencia de comandos incluye un bucle que puede terminar cuando haya terminado.
#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")
Ok, aquí está mi versión de hacer esto. Noté que quieres que tu salida sea 7
, lo que significa que no quieres contar caracteres especiales y números. Así que aquí está el patrón de expresiones regulares:
re.findall("[a-zA-Z_]+", string)
Donde [a-zA-Z_]
significa que coincidirá con cualquier carácter entre az
(minúsculas) y AZ
(mayúsculas).
Sobre los espacios. Si desea eliminar todos los espacios adicionales, simplemente haga lo siguiente:
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!
Puedes usar regex.findall()
:
import re
line = " I am having a very nice day."
count = len(re.findall(r''/w+'', line))
print (count)
str.split()
sin ningún argumento se divide en ejecuciones de caracteres de espacio en blanco:
>>> s = ''I am having a very nice day.''
>>>
>>> len(s.split())
7
De la documentación enlazada:
Si sep no se especifica o es
None
, se aplica un algoritmo de división diferente: las ejecuciones de espacios en blanco consecutivos se consideran como un solo separador, y el resultado no contendrá cadenas vacías al principio o al final si la cadena tiene espacios en blanco iniciales o finales.
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 salida es 8
s = "I am having a very nice 23!@$ day. "
sum([i.strip(string.punctuation).isalpha() for i in s.split()])
La declaración anterior pasará por cada parte del texto y eliminará las puntuaciones antes de verificar si la parte es realmente una cadena de alfabetos.