Поиск вхождений слова в строке в python 3
Я пытаюсь найти количество вхождений слова в строку.
word = "dog"
str1 = "the dogs barked"
я использовал следующее Для подсчета вхождений:
count = str1.count(word)
проблема в том, что я хочу точное совпадение. Таким образом, количество для этого предложения будет равно 0. Это возможно?
9 ответов
если вы собираетесь на эффективность:
import re
count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string))
для этого не нужно создавать промежуточные списки (в отличие от split()
) и, таким образом, будет эффективно работать для больших input_string
значения.
он также имеет преимущество правильной работы с пунктуацией-он правильно вернется 1
в качестве графа для фразы "Mike saw a dog."
(тогда как без аргументов split()
не будет). Он использует \b
regex флаг, который соответствует на границах слов (переходы между \w
а.к.а [a-zA-Z0-9_]
и все остальное).
Если вам нужно беспокоиться о языках за пределами набора символов ASCII, вам может потребоваться настроить регулярное выражение для правильного соответствия не-словесным символам на этих языках, но для многих приложений это было бы чрезмерным усложнением, и во многих других случаях достаточно установить флаги unicode и/или locale для регулярного выражения.
можно использовать str.split()
чтобы преобразовать предложение в список слов:
a = 'the dogs barked'.split()
это создаст список:
['the', 'dogs', 'barked']
затем вы можете подсчитать количество точных вхождений, используя list.count()
:
a.count('dog') # 0
a.count('dogs') # 1
если он должен работать с пунктуацией, вы можете использовать регулярные выражения. Например:
import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1
использовать список понимание:
>>> 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()
возвращает список всех слов в предложении. Затем мы используем понимание списка, чтобы подсчитать, сколько раз слово появляется в предложении.
вам нужно разделить предложение на слова. Например, вы можете сделать это с помощью just
words = str1.split()
но для реального использования слова, вам нужно нечто более продвинутое, которое также обрабатывает препинания. Для большинства западных языков вы можете уйти с заменой всех знаков препинания пробелами, прежде чем делать str1.split()
.
Это будет работать и для английского языка в простых случаях, но обратите внимание, что "я" будет разделено на два слова:" I "и" m", и оно должно быть разделено на " I " и "ам." Но это может быть излишним для этого приложения.
для других случаев, таких как Азиатский язык или фактическое использование английского языка в реальном мире, вы можете использовать библиотеку, которая делает разделение слов для вас.
тогда у вас есть список слов, и вы можете сделать
count = words.count(word)
Ниже приведен простой пример, где мы можем заменить желаемое слово новым словом, а также для желаемого количества вхождений:
import string
def censor(text, word):<br>
newString = text.replace(word,"+" * len(word),text.count(word))
print newString
print censor("hey hey hey","hey")
результат должен выглядеть так : +++ +++ +++
первый параметр в функции search_string. Второй-new_string, который заменит вашу search_string. Третье и последнее-количество происшествий .
рассмотрим пример s = "suvotisuvojitsuvo"
.
Если вы хотите не считать различных count "suvo" и "suvojit", то вы используете метод count ()... граф отчетливый i.д) Вы не считаете сувожит до Суво.. только сосчитать одиноких "Суво".
suvocount = s.count("suvo") // #output: 3
suvojitcount = s.count("suvojit") //# output : 1
затем найдите одинокий счет Суво, который вы должны отрицать от suvojit count.
lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2
Это было бы моим решением с помощью комментариев:
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
>>>
создайте функцию, которая принимает два входа, которые являются предложением текста и слова. Разделить текст предложения на сегмент слов в списке, Затем проверьте, существует ли подсчитываемое слово в сегментированных словах и подсчитайте вхождение как возврат функции.