Разработать класс с набором методов для анализа текста

Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.

Короткий ответ

Что ответить на собеседовании

Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.

Подробный разбор

Ответ с пояснениями

Условие

Создайте класс, который принимает строку‑текст в качестве входных данных. Класс должен содержать следующие методы:

  1. Метод, выводящий в консоль самое длинное слово из переданного текста.
  2. Метод, находящий и выводящий слово, которое встречается в тексте максимальное количество раз.
  3. Метод, считающий количество специальных символов (например, точек, запятых, восклицательных знаков и т.п.) и выводящий эту цифру.
  4. Метод, собирающий все палиндромные слова и выводящий их в одну строку, разделённую запятыми.

Все методы работают с тем же текстом, который был передан при создании экземпляра класса.

Ответ

Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.

Вариант: слова состоят из букв, регистр игнорируется, палиндромы выводятся без повторов и длиной более одного символа:

import re
import unicodedata

class TextStats:
    def __init__(self, text):
        self.text = text
        self.words = re.findall(r'[^\W\d_]+', text.casefold())

    def longest(self):
        print(max(self.words, key=len, default=''))

    def frequent(self):
        counts = {}
        for word in self.words:
            counts[word] = counts.get(word, 0) + 1
        print(max(counts, key=counts.get, default=''))

    def punctuation(self):
        print(sum(unicodedata.category(c).startswith('P') for c in self.text))

    def palindromes(self):
        words = dict.fromkeys(w for w in self.words if len(w) > 1 and w == w[::-1])
        print(', '.join(words))

При равенстве выбирается первое встреченное слово. Спецсимволы здесь означают Unicode-пунктуацию, не пробелы или цифры.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее