0

Доброго субботнего вечера. Вывести топ 5 пробовал через sorted и срез. Успеха - 0. Выводит всё что есть. Возможно какая-то ошибка в теле.

import re

slovo = {} f = open('data_2.txt' ,'r') file = f.read().lower() pattern = re.findall(r'\b[a-z]{1,15}\b', file) for word in pattern: count = slovo.get(word, 0) slovo[word] = count + 1 slovo_list = slovo.keys() for words in slovo_list: print(f'"{words}" повторяется в тексте - {slovo[words]} раза/раз')

Ihor
  • 51
  • https://ru.stackoverflow.com/questions/210480/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82-%D0%B8-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D1%81%D0%B0%D0%BC%D1%8B%D1%85-%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D1%85%D1%81%D1%8F-%D1%81%D1%82%D1%80%D0%BE%D0%BA – Сергей Кох Feb 11 '23 at 17:32

1 Answers1

1

По вашему коду вы все-таки хотите найти топ-5 наиболее встречающихся слов, а не строк, в тексте файла.

Сделать это проще всего через Counter, достаточно передать ему список всех слов из файла, которые можно получить при помощи регулярного выражения, и вызвать функцию most_common():

import re
from collections import Counter

with open('data.txt') as f: data = f.read() words = re.findall(r'[\w]+', data) result = Counter(words) print(result.most_common(5))

Павел
  • 4,518
  • Супер. Теперь выходит так, что вывод в списке. И для конвертации использую map через join . Print("\n".join(map(str,result.most_common(5)))) А вот пример того что ожидаю.... 'list' - 5 'is' - 3 'a' - 3 'ul' - 3 – Ihor Feb 11 '23 at 20:29