Сначала определите правила: считаем словами последовательности букв без учёта регистра, спецсимволами — Unicode-пунктуацию, палиндромами — уникальные слова длиной больше одного. Затем выделите четыре метода.
Разработать класс с методами анализа текста
Сначала определите правила: считаем словами последовательности букв без учёта регистра, спецсимволами — Unicode-пунктуацию, палиндромами — уникальные слова длиной больше одного. Затем выделите четыре метода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте класс, который принимает строку с произвольным текстом. Первый метод класса выводит в консоль самое длинное слово из переданного текста. Второй метод печатает слово, которое встречается в тексте наиболее часто. Третий метод считает и выводит количество специальных символов (например, точек, запятых и т.п.) в тексте. Четвёртый метод выводит все найденные палиндромы, разделяя их запятыми.
Ответ
Сначала определите правила: считаем словами последовательности букв без учёта регистра, спецсимволами — Unicode-пунктуацию, палиндромами — уникальные слова длиной больше одного. Затем выделите четыре метода.
Пример с указанными правилами и выбором первого слова при равенстве:
import re
import unicodedata
class TextAnalyzer:
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 most_frequent(self):
counts = {}
for word in self.words:
counts[word] = counts.get(word, 0) + 1
print(max(counts, key=counts.get, default=''))
def special_count(self):
print(sum(unicodedata.category(char).startswith('P')
for char in self.text))
def palindromes(self):
result = dict.fromkeys(word for word in self.words
if len(word) > 1 and word == word[::-1])
print(', '.join(result))
Пустой текст даёт пустые слова/палиндромы и счётчик 0. Цифры, пробелы и математические символы не считаются пунктуацией в этом контракте.