Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.
Разработать класс с набором методов для анализа текста
Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте класс, который принимает строку‑текст в качестве входных данных. Класс должен содержать следующие методы:
- Метод, выводящий в консоль самое длинное слово из переданного текста.
- Метод, находящий и выводящий слово, которое встречается в тексте максимальное количество раз.
- Метод, считающий количество специальных символов (например, точек, запятых, восклицательных знаков и т.п.) и выводящий эту цифру.
- Метод, собирающий все палиндромные слова и выводящий их в одну строку, разделённую запятыми.
Все методы работают с тем же текстом, который был передан при создании экземпляра класса.
Ответ
Разберите текст на слова один раз, затем отдельно вычисляйте максимум длины, частоты, пунктуацию и палиндромы. Заранее задайте правила регистра, повторов и того, что считается специальным символом.
Вариант: слова состоят из букв, регистр игнорируется, палиндромы выводятся без повторов и длиной более одного символа:
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-пунктуацию, не пробелы или цифры.