web-dev-qa-db-fra.com

Recherche d'occurrences d'un mot dans une chaîne en python 3

J'essaie de trouver le nombre d'occurrences d'un mot dans une chaîne. 

Word = "dog"
str1 = "the dogs barked"

J'ai utilisé ce qui suit pour compter les occurrences:

count = str1.count(Word)

Le problème est que je veux une correspondance exacte. Donc, le compte pour cette phrase serait 0. Est-ce possible?

13
lost9123193

Si vous visez l'efficacité:

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

Cela n'a pas besoin de créer de listes intermédiaires (contrairement à split()) et fonctionnera donc efficacement pour les grandes valeurs input_string.

Il présente également l’avantage de fonctionner correctement avec la ponctuation - il renverra correctement 1 comme nombre pour la phrase "Mike saw a dog." (alors qu’un argument sans argument que split() ne ferait pas). Il utilise l'indicateur \b regex, qui correspond aux limites de Word (transitions entre \w a.k.a [a-zA-Z0-9_] et toute autre chose).

Si vous devez vous soucier des langues autres que le jeu de caractères ASCII, vous devrez peut-être ajuster l'expression régulière pour qu'elle corresponde bien aux caractères autres que Word dans ces langues. Toutefois, pour de nombreuses applications, cela constituerait une complication excessive, et dans bien d'autres cas. la définition des indicateurs unicode et/ou de paramètres régionaux pour l'expression régulière suffirait.

24
Amber

Vous pouvez utiliser str.split() pour convertir la phrase en une liste de mots:

a = 'the dogs barked'.split()

Cela va créer la liste:

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

Vous pouvez ensuite compter le nombre d'occurrences exactes à l'aide de list.count() :

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

Si cela doit fonctionner avec la ponctuation, vous pouvez utiliser des expressions régulières. Par exemple:

import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1
8
grc
import re

Word = "dog"
str = "the dogs barked"
print len(re.findall(Word, str))
3
Aaron

Utilisez une compréhension de liste:

>>> 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() renvoie une liste de tous les mots d'une phrase. Ensuite, nous utilisons une compréhension de liste pour compter combien de fois la Parole apparaît dans une phrase. 

3
TerryA

Vous devez diviser la phrase en mots. Pour vous exemple, vous pouvez le faire avec juste

words = str1.split()

Mais pour une utilisation réelle de Word, vous avez besoin de quelque chose de plus avancé qui gère également la ponctuation. Pour la plupart des langues occidentales, vous pouvez remplacer toutes les ponctuations par des espaces avant de procéder à str1.split()

Cela fonctionnera pour l'anglais aussi bien dans les cas simples, mais notez que "Je suis" sera divisé en deux mots: "I" et "m", et il devrait en fait être divisé en "I" et "am". Mais cela peut être exagéré pour cette application. 

Pour d'autres cas tels que la langue asiatique ou l'utilisation réelle de l'anglais dans le monde réel, vous pouvez utiliser une bibliothèque qui effectue le fractionnement de Word à votre place.

Ensuite, vous avez une liste de mots, et vous pouvez faire 

count = words.count(Word)
2
Lennart Regebro

Considérons l'exemple s = "suvotisuvojitsuvo". Si vous voulez compter aucun nombre distinct "suvo" et "suvojit", vous utilisez la méthode count () ... count distinct ie) vous ne comptez pas le suvojit à suvo .. ne compte que le solitaire "suvo".

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

Trouvez ensuite le nombre de suvo solitaire que vous devez annuler du nombre de suvojit.

lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2
0
Maxx Selva K

Vous trouverez ci-dessous un exemple simple dans lequel nous pouvons remplacer le mot souhaité par le nouveau, ainsi que le nombre d'occurrences souhaité:

import string

def censor(text, Word):<br>
    newString = text.replace(Word,"+" * len(Word),text.count(Word))
    print newString

print censor("hey hey hey","hey")

la sortie sera: +++ +++ +++

Le premier paramètre de la fonction est search_string. Le second est new_string qui remplacera votre search_string. Troisième et dernier nombre est le nombre d’occurrences.

0
abhay goyan

Ce serait ma solution à l'aide des commentaires:

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")
0
roger
    #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
>>> 

Créez la fonction qui prend deux entrées qui sont phrase de texte et Word . Divisez le texte d'une phrase en segment de mots dans une liste, .__, puis vérifiez si le mot à compter existe dans les mots segmentés compter l'occurrence comme un retour de la fonction.

0