Búsqueda de ocurrencias de una palabra en una cadena en python 3

Estoy tratando de encontrar el número de apariciones de una palabra en una cadena.

word = "dog" str1 = "the dogs barked" 

Utilicé lo siguiente para contar las ocurrencias:

 count = str1.count(word) 

El problema es que quiero una coincidencia exacta. Entonces, el conteo para esta oración sería 0. ¿Es eso posible?

Si vas por la eficiencia:

 import re count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string)) 

Esto no necesita crear listas intermedias (a diferencia de split() ) y, por lo tanto, funcionará de manera eficiente para grandes valores de input_string .

También tiene la ventaja de trabajar correctamente con la puntuación: devolverá correctamente 1 como el recuento de la frase "Mike saw a dog." (mientras que una split() argumento split() no lo haría). Utiliza el indicador \b regex, que coincide en los límites de las palabras (transiciones entre \w aka [a-zA-Z0-9_] y cualquier otra cosa).

Si necesita preocuparse por los idiomas más allá del conjunto de caracteres ASCII, es posible que deba ajustar la expresión regular para que coincida correctamente con los caracteres que no son palabras en esos idiomas, pero para muchas aplicaciones esto sería una complicación excesiva y, en muchos otros casos, configurar el código Unicode y / o las banderas locales para la expresión regular serían suficientes.

Puede usar str.split() para convertir la oración a una lista de palabras:

 a = 'the dogs barked'.split() 

Esto creará la lista:

 ['the', 'dogs', 'barked'] 

Luego puede contar el número de ocurrencias exactas usando list.count() :

 a.count('dog') # 0 a.count('dogs') # 1 

Si necesita trabajar con puntuación, puede usar expresiones regulares. Por ejemplo:

 import re a = re.split(r'\W', 'the dogs barked.') a.count('dogs') # 1 
 import re word = "dog" str = "the dogs barked" print len(re.findall(word, str)) 

Use una lista de comprensión:

 >>> word = "dog" >>> str1 = "the dogs barked" >>> sum(i == word for word in str1.split()) 0 >>> word = 'dog' >>> str1 = 'the dog barked' >>> sum(i == word for word in str1.split()) 1 

split() devuelve una lista de todas las palabras en una oración. Luego usamos una lista de comprensión para contar cuántas veces aparece la palabra en una oración.

Necesitas dividir la oración en palabras. Para tu ejemplo puedes hacerlo con solo

 words = str1.split() 

Pero para el uso de palabras reales, necesita algo más avanzado que también maneje la puntuación. Para la mayoría de los idiomas occidentales, puede reemplazar la puntuación con espacios antes de hacer str1.split() .

Esto también funcionará para el inglés en casos simples, pero tenga en cuenta que “I’m” se dividirá en dos palabras: “I” y “m”, y de hecho debería estar dividido en “I” y “am”. Pero esto puede ser una exageración para esta aplicación.

Para otros casos, como el idioma asiático o el uso real del inglés en el mundo real, es posible que desee utilizar una biblioteca que haga la división de palabras por usted.

Entonces tienes una lista de palabras, y puedes hacer

 count = words.count(word) 

A continuación se muestra un ejemplo sencillo en el que podemos reemplazar la palabra deseada con la palabra nueva y también para el número deseado de ocurrencias:

 import string def censor(text, word):
newString = text.replace(word,"+" * len(word),text.count(word)) print newString print censor("hey hey hey","hey")

la salida será: +++ +++ +++

El primer parámetro en la función es search_string. La segunda es new_string, que reemplazará a search_string. Tercero y último es el número de ocurrencias.

Consideremos el ejemplo s = "suvotisuvojitsuvo" . Si desea contar no del recuento distinto “suvo” y “suvojit”, utilice el método count () … recuento distinto, es decir, no cuente el suvojit para suvo … solo cuente el “suvo” solitario.

 suvocount = s.count("suvo") // #output: 3 suvojitcount = s.count("suvojit") //# output : 1 

Luego encuentre el recuento de suvo solitario que debe negar del recuento de suvojit.

 lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2 

Esta sería mi solución con la ayuda de los comentarios:

 word = str(input("type the french word chiens in english:")) str1 = "dogs" times = int(str1.count(word)) if times >= 1: print ("dogs is correct") else: print ("your wrong") 
  #counting the number of words in the text def count_word(text,word): """ Function that takes the text and split it into word and counts the number of occurence of that word input: text and word output: number of times the word appears """ answer = text.split(" ") count = 0 for occurence in answer: if word == occurence: count = count + 1 return count sentence = "To be a programmer you need to have a sharp thinking brain" word_count = "a" print(sentence.split(" ")) print(count_word(sentence,word_count)) #output >>> %Run test.py ['To', 'be', 'a', 'programmer', 'you', 'need', 'to', 'have', 'a', 'sharp', 'thinking', 'brain'] 2 >>> 

Cree la función que toma dos entradas que son oraciones de texto y palabra. Divida el texto de una oración en el segmento de palabras en una lista, luego verifique si la palabra que se va a contar existe en las palabras segmentadas y cuente la aparición como un retorno de la función.