> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/python-strings/python-podschet-slov-v-stroke-ili-faile.md).

# Python: Подсчет слов в строке или файле

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

К концу этого учебника вы узнаете:

* Как подсчитать количество слов в строке
* Как подсчитать количество слов в текстовом файле
* Как вычислять частоты слов с использованием Python

#### Содержание

* [Чтение текстового файла в Python](#chtenie-tekstovogo-faila-v-python)
* Подсчет количества слов в Python с использованием `split()`
* Подсчет количества слов в Python с использованием **Regex**
* Вычисление частот слов в Python
* Заключение
* Дополнительные ресурсы

### Чтение текстового файла в Python

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

Если вы хотите получить более подробное руководство по чтению текстового файла в Python, ознакомьтесь с этим учебником. Вот быстрый пример кода, который можно использовать для загрузки содержимого текстового файла в строку Python:

```python
# Чтение текстового файла в Python
file_path = '/Users/datagy/Desktop/sample_text.txt'

with open(file_path) as file:
    text = file.read()
```

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

### Подсчет количества слов в Python с использованием `split()`

Один из самых простых способов подсчитать количество слов в строке Python — использовать функцию `split()`. Функция `split()` выглядит следующим образом:

```python
# Понимание функции split()
str.split(
   sep=None     # Разделитель для разделения
   maxsplit=-1  # Количество разделений
)
```

По умолчанию Python будет рассматривать последовательности пробелов как единый разделитель. Это означает, что если в нашей строке было несколько пробелов, они будут рассматриваться как единый разделитель. Давайте посмотрим, что возвращает этот метод:

```python
# Разделение строки с помощью .split()
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(text.split())

# Возвращает: ['Welcome', 'to', 'datagy!', 'Here', 'you', 'will', 'learn', 'Python', 'and', 'data', 'science.']
```

Мы видим, что метод теперь возвращает список элементов. Поскольку мы можем использовать функцию `len()` для подсчета количества элементов в списке, мы можем создать подсчет слов. Давайте посмотрим, как это выглядит:

```python
# Подсчет слов с помощью .split()
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(len(text.split()))

# Возвращает: 11
```

### Подсчет количества слов в Python с использованием Regex

Еще один простой способ подсчитать количество слов в строке Python — использовать библиотеку регулярных выражений re. Библиотека включает функцию `findall()`, которая позволяет искать различные шаблоны строк.

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

Для этого мы можем использовать шаблон `\w+`, где `\w` представляет любой алфавитно-цифровой символ, а `+` обозначает одно или несколько вхождений. Как только шаблон встречает пробел, например, пробел, он останавливает шаблон там.

Давайте посмотрим, как мы можем использовать этот метод для создания подсчета слов с использованием библиотеки регулярных выражений re:

```python
# Подсчет слов с использованием регулярных выражений
import re
text = 'Welcome to datagy! Here you will learn Python and data science.'
print(len(re.findall(r'\w+', text)))

# Возвращает: 11
```

### Вычисление частот слов в Python

Для вычисления частот слов мы можем использовать либо класс `defaultdict`, либо класс `Counter`. Частоты слов представляют, как часто определенное слово встречается в тексте.

#### Использование defaultdict для вычисления частот слов в Python

Давайте посмотрим, как мы можем использовать `defaultdict` для вычисления частот слов в Python. Класс `defaultdict` расширяет обычный словарь Python, предоставляя полезные функции для инициализации отсутствующих ключей.

Благодаря этому мы можем пройтись по тексту и подсчитать количество вхождений каждого слова. Давайте посмотрим, как мы можем использовать его для создания частот слов для данной строки:

```python
# Создание частот слов с использованием defaultdict
from collections import defaultdict
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'

counts = defaultdict(int)
for word in re.findall(r'\w+', text):
    counts[word] += 1

print(counts)

# Возвращает:
# defaultdict(<class 'int'>, {'welcome': 1, 'to': 1, 'datagy': 2, 'will': 1, 'teach': 1, 'data': 5, 'is': 1, 'fun': 1})
```

Давайте разберем, что мы сделали:

* Мы импортировали как функцию `defaultdict`, так и библиотеку re
* Мы загрузили текст и создали экземпляр `defaultdict` с использованием функции `int`
* Затем мы прошли по каждому слову в списке слов и добавили одно для каждого вхождения

#### Использование Counter для создания частот слов в Python

Другой способ сделать это — использовать класс `Counter`. Преимущество этого подхода заключается в том, что мы можем легко определить самое частотное слово. Давайте посмотрим, как мы можем использовать этот подход:

```python
# Создание частот слов с использованием Counter
from collections import Counter
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'
counts = Counter(re.findall(r'\w+', text))
print(counts)

# Возвращает:
# Counter({'data': 5, 'datagy': 2, 'welcome': 1, 'to': 1, 'will': 1, 'teach': 1, 'is': 1, 'fun': 1})
```

Давайте разберем, что мы сделали:

* Мы импортировали необходимые библиотеки и классы
* Мы передали результирующий список из функции `findall()` в класс `Counter`
* Мы напечатали результат этого класса

Одним из преимуществ этого подхода является то, что мы можем легко найти самое частотное слово, используя функцию `.most_common()`. Эта функция возвращает отсортированный список кортежей, упорядочивая элементы от самого частого к наименее частому. Благодаря этому мы можем просто получить доступ к **0-му** индексу, чтобы найти самое частое слово:

```python
# Поиск самого частого слова
from collections import Counter
import re

text = 'welcome to datagy! datagy will teach data. data is fun. data data data!'
counts = Counter(re.findall(r'\w+', text))
print(counts.most_common()[0])

# Возвращает:
# ('data', 5)
```

### Заключение

В этом учебнике вы узнали, как создавать подсчеты слов и частоты слов с использованием Python. Вы узнали несколько различных способов подсчета слов, включая использование метода `.split()` и библиотеки re. Затем вы узнали различные способы создания частот слов с использованием `defaultdict` и `Counter`. Используя метод `Counter,` вы смогли найти самое частое слово в строке.

### Дополнительные ресурсы

Чтобы узнать больше о связанных темах, ознакомьтесь с учебниками ниже:

* [Python str.split() – Официальная документация](https://docs.python.org/3/library/stdtypes.html?highlight=split#str.split)
* Python Defaultdict: Обзор и примеры
* Python: Подсчет количества вхождений в списке (6 способов)
* Python: Подсчет количества вхождений в строке (4 способа!)
* Python re: Официальная документация
