I have a string “Hello I am going to I with hello am
“. I want to find how many times a word occur in the string. Example hello occurs 2 time. I tried this approach that only prints characters –
def countWord(input_string):
d = {}
for word in input_string:
try:
d[word] += 1
except:
d[word] = 1
for k in d.keys():
print "%s: %d" % (k, d[k])
print countWord("Hello I am going to I with Hello am")
I want to learn how to find the word count.
asked Jul 2, 2012 at 20:02
3
If you want to find the count of an individual word, just use count
:
input_string.count("Hello")
Use collections.Counter
and split()
to tally up all the words:
from collections import Counter
words = input_string.split()
wordCount = Counter(words)
answered Jul 2, 2012 at 20:05
Joel CornettJoel Cornett
24k9 gold badges64 silver badges87 bronze badges
6
from collections import *
import re
Counter(re.findall(r"[w']+", text.lower()))
Using re.findall
is more versatile than split
, because otherwise you cannot take into account contractions such as “don’t” and “I’ll”, etc.
Demo (using your example):
>>> countWords("Hello I am going to I with hello am")
Counter({'i': 2, 'am': 2, 'hello': 2, 'to': 1, 'going': 1, 'with': 1})
If you expect to be making many of these queries, this will only do O(N) work once, rather than O(N*#queries) work.
answered Jul 2, 2012 at 20:05
ninjageckoninjagecko
87.9k24 gold badges137 silver badges145 bronze badges
2
Counter
from collections is your friend:
>>> from collections import Counter
>>> counts = Counter(sentence.lower().split())
answered Jul 2, 2012 at 20:05
Martijn Pieters♦Martijn Pieters
1.0m292 gold badges4018 silver badges3317 bronze badges
The vector of occurrence counts of words is called bag-of-words.
Scikit-learn provides a nice module to compute it, sklearn.feature_extraction.text.CountVectorizer
. Example:
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer(analyzer = "word",
tokenizer = None,
preprocessor = None,
stop_words = None,
min_df = 0,
max_features = 50)
text = ["Hello I am going to I with hello am"]
# Count
train_data_features = vectorizer.fit_transform(text)
vocab = vectorizer.get_feature_names()
# Sum up the counts of each vocabulary word
dist = np.sum(train_data_features.toarray(), axis=0)
# For each, print the vocabulary word and the number of times it
# appears in the training set
for tag, count in zip(vocab, dist):
print count, tag
Output:
2 am
1 going
2 hello
1 to
1 with
Part of the code was taken from this Kaggle tutorial on bag-of-words.
FYI: How to use sklearn’s CountVectorizerand() to get ngrams that include any punctuation as separate tokens?
answered Aug 11, 2015 at 23:40
Here is an alternative, case-insensitive, approach
sum(1 for w in s.lower().split() if w == 'Hello'.lower())
2
It matches by converting the string and target into lower-case.
ps: Takes care of the "am ham".count("am") == 2
problem with str.count()
pointed out by @DSM below too 🙂
answered Jul 2, 2012 at 20:05
LevonLevon
137k33 gold badges199 silver badges188 bronze badges
2
Considering Hello
and hello
as same words, irrespective of their cases:
>>> from collections import Counter
>>> strs="Hello I am going to I with hello am"
>>> Counter(map(str.lower,strs.split()))
Counter({'i': 2, 'am': 2, 'hello': 2, 'to': 1, 'going': 1, 'with': 1})
answered Jul 2, 2012 at 20:14
Ashwini ChaudharyAshwini Chaudhary
242k58 gold badges460 silver badges503 bronze badges
3
You can divide the string into elements and calculate their number
count = len(my_string.split())
answered Jan 23, 2020 at 10:02
BooharinBooharin
75510 silver badges10 bronze badges
0
You can use the Python regex library re
to find all matches in the substring and return the array.
import re
input_string = "Hello I am going to I with Hello am"
print(len(re.findall('hello', input_string.lower())))
Prints:
2
answered Sep 9, 2016 at 20:06
ode2kode2k
2,65513 silver badges20 bronze badges
def countSub(pat,string):
result = 0
for i in range(len(string)-len(pat)+1):
for j in range(len(pat)):
if string[i+j] != pat[j]:
break
else:
result+=1
return result
answered Nov 1, 2018 at 19:45
1
- Используйте методы
split()
иlen()
для подсчета слов в строке Python - Используйте модуль RegEx для подсчета слов в строке Python
- Используйте методы
sum()
,strip()
иsplit()
для подсчета слов в строке Python - Используйте метод
count()
для подсчета слов в Python String Python
Из этого туториала Вы узнаете, как считать слова в строковом Python.
Используйте методы split()
и len()
для подсчета слов в строке Python
split()
– это встроенный в Python метод, который разделяет слова внутри строки с помощью определенного разделителя и возвращает массив строк. Этот метод принимает в качестве аргумента не более двух параметров:
separator
(необязательно) – действует как разделитель (например, запятые, точка с запятой, кавычки или косая черта). Задает границу, на которой нужно разделить строку. По умолчаниюразделителем
является любой пробел (пробел, новая строка, табуляция и т. Д.), Еслиseparator
не указан.maxsplit
(необязательно) – определяет максимальное количество разделений. Значение по умолчаниюmaxsplit
, если не определено, равно-1
, что означает, что он не имеет ограничений и разбивает строку на несколько частей.
Синтаксис split()
:
str.split(separator, maxsplit)
len () также является встроенным методом Python, который возвращает количество строк в массиве или подсчитывает длину элементов в объекте. Этот метод принимает только один параметр: строку, байты, список, объект, набор или коллекцию. Он вызовет исключение TypeError, если аргумент отсутствует или недействителен.
Синтаксис len()
:
Посмотрим, как методы split()
и len()
подсчитывают количество слов в строке.
Пример 1: без параметров
# initialize string
text = 'The quick brown fox jumps over the lazy dog'
# default separator: space
result = len(text.split())
print("There are " + str(result) + " words.")
Выход:
Пример 2: С параметром separator
# initialize string
bucket_list = 'Japan, Singapore, Maldives, Europe, Italy, Korea'
# comma delimiter
result = len(bucket_list.split(','))
# Prints an array of strings
print(bucket_list.split(','))
print("There are " + str(result) + " words.")
Выход:
['Japan', ' Singapore', ' Maldives', ' Europe', ' Italy', ' Korea']
There are 6 words.
Метод split()
вернет новый список строк, а len()
считает строку внутри списка.
Пример 3: С параметрами separator
и maxsplit
# initialize string
bucket_list = 'Japan, Singapore, Maldives, Europe, Italy, Korea'
# comma delimiter
result = len(bucket_list.split(',', 3))
# Prints an array of strings
print(bucket_list.split(',', 3))
print("There are " + str(result) + " words.")
Выход:
['Japan', ' Singapore', ' Maldives', ' Europe, Italy, Korea']
There are 4 words.
maxsplit
разделяет только первые три запятые в bucket_list
. Если вы установите maxsplit
, в списке будет элементmaxsplit+1
.
Выход:
['Japan', ' Singapore', ' Maldives, Europe, Italy, Korea']
There are 3 words.
Метод split()
разбивает большие строки на более мелкие. Следовательно, подсчет слов в массиве строк будет основан не на словах, а на том, как определен разделитель.
Используйте модуль RegEx для подсчета слов в строке Python
Регулярное выражение, сокращенно regex
или regexp
, – очень мощный инструмент для поиска и управления текстовыми строками; это можно использовать для предварительной обработки данных, проверки, поиска шаблона в текстовой строке и т. д. Regex также может помочь в подсчете слов в текстовой строке в сценариях, где есть знаки препинания или специальные символы, которые не нужны. Regex – это встроенный в Python пакет, поэтому нам просто нужно импортировать пакет re
, чтобы начать его использовать.
# import regex module
import re
# initialize string
text = 'Python !! is the be1st $$ programming language @'
# using regex findall()
result = len(re.findall(r'w+', text))
print("There are " + str(result) + " words.")
Выход:
Используйте методы sum()
, strip()
и split()
для подсчета слов в строке Python
Этот подход считает слова без использования регулярного выражения. sum()
, strip()
и split()
– все это встроенные методы в Python. Мы кратко обсудим каждый метод и его функции.
Метод sum()
складывает элементы слева направо и возвращает сумму. Метод принимает два параметра:
iterable
(обязательно) – строка, список, кортеж и т. Д. Для суммирования. Это должны быть числа.start
(необязательно) – число, добавляемое к сумме или возвращаемому значению метода.
Синтаксис sum()
:
Следующим является метод strip()
, который возвращает копию строки без начальных и конечных пробелов, если нет аргументов; в противном случае это удаляет строку, определенную в аргументе.
chars
(необязательно) – указывает строку, которую нужно удалить из левой и правой частей текста.
Синтаксис string.strip()
:
Наконец, метод split()
уже обсуждался до этого подхода.
Теперь давайте используем эти методы вместе для подсчета слов в строке. Во-первых, нам нужно импортировать строку
, встроенный модуль Python, прежде чем использовать его функции.
import string
# initialize string
text = 'Python !! is the be1st $$ programming language @'
# using the sum(), strip(), split() methods
result = sum([i.strip(string.punctuation).isalpha() for i in text.split()])
print("There are " + str(result) + " words.")
Выход:
Используйте метод count()
для подсчета слов в Python String Python
Метод count()
– это встроенный в Python метод. Он принимает три параметра и возвращает количество вхождений на основе данной подстроки.
substring
(обязательно) – ключевое слово для поиска в строкеstart
(опция) – указатель начала поискаstop
(опция) – указатель того, где заканчивается поиск
Примечание. В Python индекс начинается с 0
.
Синтаксис count()
:
string.count(substring, start, end)
Этот метод отличается от предыдущего, поскольку он возвращает не общее количество слов, найденных в строке, а количество найденных вхождений для данной подстроки. Посмотрим, как работает этот метод, на примере ниже:
# initialize string
text = "Python: How to count words in string Python"
substring = "Python"
total_occurrences = text.count(substring)
print("There are " + str(total_occurrences) + " occurrences.")
Выход:
В этом методе не имеет значения, является ли подстрока целым словом, фразой, буквой или любой комбинацией символов или цифр.
Таким образом, вы можете выбрать любой из этих подходов в зависимости от вашего варианта использования. Для слов, разделенных пробелами, мы можем использовать простой подход: функции split()
или len()
. Для фильтрации текстовых строк для подсчета слов без специальных символов используйте модуль regex
. Создайте шаблон, в котором подсчитываются слова, не содержащие определенных символов. Без использования regex
используйте альтернативу, которая представляет собой комбинацию методов sum()
+ strip()
+ split()
. Наконец, метод count()
также может использоваться для подсчета конкретного слова, найденного в строке.
можно использовать метод split
у строки. Этот метод разбивает строку на список слов, разделенных пробелами или другими символами, которые указываются в качестве аргумента. Затем можно получить количество слов, полученных после разбиения, используя функцию len
Например:
s = "Это наш пример строки"
words = s.split()
num_words = len(words)
print(num_words)
В этом примере мы разбиваем строку s
на список слов, разделенных пробелами, используя метод split
, затем используем функцию len
для получения количества элементов в списке. В итоге будет выведено число 4, так как в строке s
4 слова.
Обратите внимание, что метод split
без аргументов разбивает строку на список слов, разделенных пробелами.
Если вы хотите разбить строку по другому символу, например, запятой, то можете передать этот символ в качестве аргумента методу split
. Например:
s = "Это, пример, строки"
words = s.split(",")
num_words = len(words)
print(num_words)
В этом примере мы разбиваем строку s
на список слов, разделенных запятыми, и в итоге будет выведено число 3, так как в строке s
3 слова.
Вы также можете использовать регулярные выражения для разбиения строки по более сложным паттернам. Для этого можете использовать модуль re
и функцию re.split
. Например:
import re
s = "Это, пример строки"
words = re.split(r'[,s]s*', s)
num_words = len(words)
print(num_words)
В этом примере мы разбиваем строку s
на список слов, разделенных запятыми или пробелами, и в итоге будет выведено число 3, так как в строке s
3 слова.
Обратите внимание, что в некоторых случаях может быть требуется учитывать не только пробелы и запятые, но и другие символы, которые могут разделять слова. В таком случае вы можете использовать регулярные выражения или просто вручную разбивать строку на список слов, используя циклы и условные операторы.
На чтение 4 мин Просмотров 2.7к. Опубликовано
В Python есть много встроенных функций и методов, которые упрощают обработку строк. Одна из часто встречающихся задач — подсчет количества слов в строке. Это может быть полезно, например, при анализе текстов или при работе с данными, связанными с языком. В этой статье мы рассмотрим несколько способов, как посчитать количество слов в строке в Python.
Содержание
- Методы для подсчета количества слов в строке
- Использование метода split()
- Метод count()
- Использование регулярных выражений
Методы для подсчета количества слов в строке
Для подсчета количества слов в строке в Python существует несколько методов. Рассмотрим наиболее распространенные из них.
Использование метода split()
Метод split()
является одним из самых простых и наиболее используемых способов для подсчета количества слов в строке в Python. Этот метод разбивает строку на список слов, используя разделитель, который задается в качестве аргумента метода. По умолчанию разделителем является пробел.
Вот как можно использовать метод split()
для подсчета количества слов в строке:
string = "Python is a popular programming language"
word_list = string.split()
print(len(word_list))
Здесь мы определяем строку «Python is a popular programming language» и используем метод split()
для разбиения ее на список слов. Затем мы используем функцию len()
для подсчета количества элементов в списке, которое и будет количеством слов в исходной строке.
Этот подход работает не только для простых строк, но и для строк, содержащих знаки препинания и другие символы. Однако, если строка содержит множественные пробелы или другие символы-разделители, метод split()
может дать неправильный результат.
Например, если строка содержит несколько пробелов между словами, метод split()
может воспринимать их как отдельные элементы, что приведет к неправильному результату. Для таких случаев необходимо использовать более продвинутые методы.
Метод count()
Метод count()
— это встроенный метод в Python, который используется для подсчета количества вхождений подстроки в строку. В данном случае, мы можем использовать его для подсчета количества слов в строке.
Метод count()
принимает один обязательный аргумент — подстроку, которую нужно искать в строке, и два необязательных аргумента — start
и end
, которые указывают начальную и конечную позиции в строке для поиска подстроки. Если аргументы start
и end
не указаны, метод будет искать подстроку во всей строке.
Пример использования метода count()
для подсчета количества слов в строке:
sentence = "The quick brown fox jumps over the lazy dog"
word_count = sentence.count(" ") + 1
print("Количество слов в строке:", word_count)
В этом примере мы сначала определяем строку sentence
, содержащую несколько слов. Затем мы используем метод count()
для подсчета количества пробелов в строке, добавляем 1, и получаем количество слов в строке. Результат выводится на экран.
Этот метод может быть полезен, если вам нужно быстро подсчитать количество слов в строке без использования регулярных выражений или метода split()
. Однако стоит учитывать, что он может не работать должным образом, если в строке есть знаки препинания или другие символы, отличные от пробелов, используемых для разделения слов.
Использование регулярных выражений
Использование регулярных выражений — это еще один способ подсчета количества слов в строке. В Python есть модуль re
, который позволяет работать с регулярными выражениями.
Регулярные выражения — это формальный язык поиска и манипулирования подстроками в тексте. Они используются для поиска определенных паттернов в строке, таких как слова, числа, электронные адреса и т.д.
Для подсчета количества слов в строке с помощью регулярных выражений, мы можем использовать функцию findall()
из модуля re
. Эта функция ищет все совпадения с регулярным выражением и возвращает список найденных строк.
Вот пример использования регулярного выражения для подсчета количества слов в строке:
import re
string = "Это пример строки для подсчета слов"
word_list = re.findall(r'bw+b', string)
print("Количество слов в строке:", len(word_list))
В этом примере мы импортировали модуль re
, определили строку, которую мы хотим проанализировать, и затем использовали функцию findall()
с регулярным выражением r'bw+b'
. Это регулярное выражение соответствует словам, которые состоят из одного или более буквенно-цифровых символов и отделены от других символов пробелами или границами слов.
Функция findall()
вернет список найденных слов, который мы затем передадим в функцию len()
для подсчета количества слов.
Код проходит 16 из 22 тестов, никак не могу понять где ошибка. Помогите пожалуйста)
Дана строка, возможно, содержащая пробелы. Определите количество слов в этой строке. Слово – это несколько (возможно, одна) подряд идущих букв латинского алфавита (как заглавных, так и строчных).
ВХОДНЫЕ ДАННЫЕ
Программа получает на вход строку, содержащую произвольные ASCII-символы.
ВЫХОДНЫЕ ДАННЫЕ
Программа должна вывести одно число – количество слов.
ПРИМЕР
ввод
Yesterday, all my troubles seemed so far away
вывод
8
#include <iostream>
#include <string>
using namespace std;
int main() {
int res = 0;
string c;
getline(cin, c);
for (int i = 1; i < c.size() - 1; i++)
{
(c[i] == 32 && ((c[i + 1] > 64 && c[i + 1] < 91) || (c[i + 1] > 96 && c[i + 1] < 123))) {
res += 1;
}
}
cout << res + 1;
}
Harry
214k15 золотых знаков117 серебряных знаков228 бронзовых знаков
задан 15 окт 2020 в 13:57
7
Вот вся ваша программа:
int CountWords(const char * s)
{
int count = 0;
for(const char * c = s; *c; ++c)
if (isalpha(*c) && !isalpha(*(c+1))) ++count;
return count;
}
int main()
{
string s;
getline(cin,s);
cout << CountWords(s.c_str()) << endl;
}
Все тесты пройдены…
Кстати, вас там в задачке просят сделать отдельную функцию 🙂 Не думаю, что проблема в этом, но если есть условие – его следует выполнять 🙂
ответ дан 15 окт 2020 в 15:07
HarryHarry
214k15 золотых знаков117 серебряных знаков228 бронзовых знаков
0
Для подобных задач стоит использовать регулярки – это прям то, для чего они были созданы:
#include <iostream>
#include <iterator>
#include <regex>
#include <string>
#include <cstdlib>
int main() {
std::string str;
std::copy(std::istreambuf_iterator<char>{std::cin},
std::istreambuf_iterator<char>{}, std::back_inserter(str));
std::regex regex{"[a-zA-Z]+"};
std::sregex_token_iterator{str.begin(), str.end(), regex};
size_t count =
std::distance(std::sregex_token_iterator{str.begin(), str.end(), regex},
std::sregex_token_iterator{});
std::cout << count << std::endl;
return EXIT_SUCCESS;
}
ответ дан 15 окт 2020 в 14:19
Andrej LevkovitchAndrej Levkovitch
7,9892 золотых знака16 серебряных знаков42 бронзовых знака
12