Сообщить об ошибке.

Подсчет повторений слов в тексте, деление строки на список слов

Деление текста/строки на список слов.

Для подсчета повторений слов в тексте необходимо научиться преобразовывать текст/сроку в список слов. Это можно сделать двумя способами:

  1. Использовать метод строки str.split() и делить строку по пробелам между словами.

    # исходная строка
    >>> line = 'Деление строки на список слов'
    
    # метод строки `str.split()`
    >>> words = line.split(' ')
    >>> words
    # ['Деление', 'строки', 'на', 'список', 'слов']
    
  2. Использовать модуль re и делить строку по границам слов специальным символом регулярных выражений \W.

    # исходная строка
    >>> line = 'Деление строки на список слов'
    
    # символ регулярных выражений `\b`
    >>> import re
    >>> words = re.split('\W', line)
    >>> words
    # ['Деление', 'строки', 'на', 'список', 'слов']
    

Подсчет повторений слов в тексте или символов в строке.

Подсчет повторений слов в тексте или символов в строке можно осуществить несколькими способами. Но для начала, если будем считать слова в тексте, необходимо этот текст подготовить, а именно очистить от знаков пунктуации и преобразовать его в список слов, как показано выше.

Для этого, возьмем готовый код замены пунктуации из подраздела "Удаление пунктуации из строки" и обернем в функцию text_clear(), далее получим из текста список слов и в цикле посчитаем сколько раз каждое слово встречается в исходном тексте.

def text_clear(text):
    """Удаление пунктуации"""
    import string
    for p in string.punctuation + '\n':
        if p in text:
            text = text.replace(p, '')
    return text

def counter(list_element):
    """Счетчик повторений элементов последовательности"""
    # создаем словарь, где будем хранить элемент списка в качестве, 
    # ключа, а количество его повторений будет значением
    count = {}
    # теперь считаем повторения элементов списка
    for element in list_element:
        if count.get(element, None):
            # если в словаре ключ со значением элемента списка
            # присутствует, то увеличиваем счетчик на 1
            count[element] += 1
        else:
            # если в словаре ключа со значением элемента 
            # спитска НЕТ, то создаем ключ со значением 1
            count[element] = 1

    # сортируем словарь по количеству повторений слов в тексте
    sorted_values = sorted(count.items(), key=lambda tpl: tpl[1], reverse=True)
    return dict(sorted_values)

# исходный текст
>>> text = ('Подсчет повторений всех слов в тексте или повторений'
...          ' символов в тексте или символов в строке')
# преобразовываем текст в нижний регистр
# и удаляем всю пунктуацию 
>>> text = text_clear(text.lower())
# преобразовываем текст в список слов
>>> list_word = text.split()
>>> counter(list_word)
# {'в': 3, 'повторений': 2, 'тексте': 2, 'или': 2, 'символов': 2, 
# 'подсчет': 1, 'всех': 1, 'слов': 1, 'строке': 1}

# теперь считаем количество 
# повторений символов в строке
>>> line = 'абракадабра'
# строку в список символов 
>>> lst = list(line)
>>> counter(lst)
# {'а': 5, 'б': 2, 'р': 2, 'к': 1, 'д': 1}

Быстрый способ подсчета повторений элементов в последовательности.

Конечно это все прекрасно работает и хороший пример для самообучения но здесь много кода и к тому же в Python во встроенном модуле collections есть класс Counter() для целей подсчета повторений элементов в последовательности.

Смотрим пример с collections.Counter для подсчета повторений символов в строке:

# считаем количество повторений символов в строке
>>> line = 'абракадабра'
# строку в список символов 
>>> lst = list(line)
# импортируем счетчик
>>> from collections import Counter
# готово
>>> dict(Counter(lst))
# {'а': 5, 'б': 2, 'р': 2, 'к': 1, 'д': 1}

# все символы, которые повторяются 2 и более раз
{k:v for k, v in Counter(lst).items() if v > 1}
# {'а': 5, 'б': 2, 'р': 2}