Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего?? [RSS Feed]

#1 Март 11, 2015 20:06:06

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

Разработать функцию 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?!!!')
Возвращает:

Офлайн

#2 Март 11, 2015 21:17:00

botinag
Зарегистрирован: 2014-02-20
Сообщения: 179
Репутация: +  35  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

Офлайн

#3 Март 11, 2015 23:37:42

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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])



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Март 11, 2015 23:47:26)

Офлайн

#4 Март 12, 2015 09:37:14

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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()]) 

Отредактировано sander (Март 12, 2015 09:38:20)

Офлайн

#5 Март 12, 2015 20:52:02

Xryst
Зарегистрирован: 2015-01-30
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

terabayt
Прокомментируй код пожалуйста

Офлайн

#6 Март 13, 2015 03:14:50

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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']



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Март 13, 2015 09:33:57

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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()])

Отредактировано sander (Март 13, 2015 09:34:55)

Офлайн

#8 Март 13, 2015 10:20:31

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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']



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Март 13, 2015 12:44:39

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

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])

Офлайн

#10 Март 13, 2015 14:37:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??

sander
осталось только оьбработать ошибки

Xryst
который может содержать буквы латинского алфавита, пробили и знаки препинаний (,.:;!?-);
МОЖЕТ! а эт значит что может и не содержать
print find_most_frequent('')



————————————————
-*- Simple is better than complex -*-

Офлайн

  • Начало
  • » Центр помощи
  • » На писать функцию возврата списока слов (в нижнем регистре), которые встречаются в тексте чаще всего??[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version