Как найти число слов в строке

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.

Trenton McKinney's user avatar

asked Jul 2, 2012 at 20:02

Varun's user avatar

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 Cornett's user avatar

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

ninjagecko's user avatar

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's user avatar

Martijn PietersMartijn 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?

Community's user avatar

answered Aug 11, 2015 at 23:40

Franck Dernoncourt's user avatar

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

Levon's user avatar

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 Chaudhary's user avatar

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

Booharin's user avatar

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

ode2k's user avatar

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

  1. Используйте методы split() и len() для подсчета слов в строке Python
  2. Используйте модуль RegEx для подсчета слов в строке Python
  3. Используйте методы sum(), strip() и split() для подсчета слов в строке Python
  4. Используйте метод count() для подсчета слов в Python String Python

Подсчет слов в строке в 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.

Содержание

  1. Методы для подсчета количества слов в строке
  2. Использование метода split()
  3. Метод count()
  4. Использование регулярных выражений

Методы для подсчета количества слов в строке

Для подсчета количества слов в строке в 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's user avatar

Harry

214k15 золотых знаков117 серебряных знаков228 бронзовых знаков

задан 15 окт 2020 в 13:57

Илья Четвергов's user avatar

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

Harry's user avatar

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 Levkovitch's user avatar

Andrej LevkovitchAndrej Levkovitch

7,9892 золотых знака16 серебряных знаков42 бронзовых знака

12

Добавить комментарий