Найти - Пользователи
Полная версия: На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??
Начало » Центр помощи » На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??
1 2
Xryst
Разработать функцию find_most_frequent(text), которая принимает 1 аргумент – текст произвольной длины, который может содержать буквы латинского алфавита, пробили и знаки препинаний (,.:;!?-); но возвращает список слов (в нижнем регистре), которые встречаются в тексте чаще всего.

Слова, записанные через дефис, считать в двух словах (например, “hand-made”). Слова в разных падежах, числах и с другими превращениями (например, “page” и “pages”) считаются разными словами. Регистр слов – напротив, не суть важно: слова “page” и “Page” считаются 1 словом.

Если слов, которые встречаются чаще всего, несколько – вывести их в алфавитном порядке.

Например Вызов функции: find_most_frequent('Hello,Hello, my dear!')
Возвращает:
Вызов функции: find_most_frequent('to understand recursion you need first to understand recursion…')
Возвращает:
Вызов функции: find_most_frequent('Mom! Mom! Are you sleeping?!!!')
Возвращает:
botinag
Возьмите этот ответ за основу
terabayt
def find_most_frequent(text, sep='.,:;!?- '):
    a = {}
    s = ''
    for i in text.lower() + '.':
        if i not in sep:
            s += i
        elif s:
            a[s] = a.setdefault(s,0) + 1
            s = ''
    if not a:
        return False
    m = max(a.values())
    return sorted([i for i in a if a[i] == m])
sander
from collections import Counter
import re
def find_most_frequent(text):
    text = text.lower()
    words = re.split(r'[;,\s]\s*', text)
    count = Counter(words)
    return sorted([w for w, n in count.most_common()]) 
Xryst
terabayt
Прокомментируй код пожалуйста
terabayt
def find_most_frequent(text, sep='.,:;!?- '):  # функция которая принимает текст и строку с разделительными знаками
    a = {}  # создаем пустой словарь
    s = ''  # создаем пустую строку
    for i in text.lower() + '.':  # перебор текста в нижнем регистре плюс любой разделительный символ, можно заменить на
    # for i in text.lower() + sep[0]:
        if i not in sep:  # если символ резделительный
            s += i  # записываем во временную строку этот символ
        elif s:  # иначе если временная строка не пустая
            a[s] = a.setdefault(s,0) + 1  # если это слово есть в словаре инкрементируем значение, если нету - создаем новый ключ с значением 1
            s = ''  # обнуляем строку
    if not a:  # если слварь пуст
        return False  # возвращаем False
    m = max(a.values())  # в переменную m записываем максимальное значение значений словаря
    return sorted([i for i in a if a[i] == m])  # возвращаем отсортированый список (по алфавиту) всех ключей слваря значение которых равно m (макимальному значению)
sander
>>> from collections import Counter
>>> import re
>>> def find_most_frequent(text):
...     text = text.lower()
...     words = re.split(r'[;,\s]\s*', text)
...     count = Counter(words)
...     return sorted([w for w, n in count.most_common()]) 
... 
>>> print find_most_frequent('la ,.,, la')
['', '.', 'la']
sander
terabayt
from collections import Counter
import re
def find_most_frequent(text):
    text = text.lower()
    words = re.findall(r'[\w]+', text)
    count = Counter(words)
    return sorted([w for w, n in count.most_common()])
terabayt
sander
>>> from collections import Counter
>>> import re
>>> def find_most_frequent(text):
...     text = text.lower()
...     words = re.findall(r'[\w]+', text)
...     count = Counter(words)
...     return sorted([w for w, n in count.most_common()])
... 
>>> print find_most_frequent('a b b c')
['a', 'b', 'c']
sander
terabayt
опять невнимательно прочитал условие
from collections import Counter
import re
def find_most_frequent(text):
    text = text.lower()
    words = re.findall(r'[\w]+', text)
    count = Counter(words)
    max_f = count.most_common(1)[0][1]
    return sorted([w for w, n in count.items() if n == max_f])
terabayt
sander
осталось только оьбработать ошибки
Xryst
который может содержать буквы латинского алфавита, пробили и знаки препинаний (,.:;!?-);
МОЖЕТ! а эт значит что может и не содержать
print find_most_frequent('')
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB