Задача: написать программу, которая принимает текст и выводит два слова: наиболее часто встречающееся и самое длинное.
TEXT = """Однажды, в студёную зимнюю пору
Я из лесу вышел; был сильный мороз.
Гляжу, поднимается медленно в гору
Лошадка, везущая хворосту воз.
И, шествуя важно, в спокойствии чинном,
Лошадку ведёт под уздцы мужичок
В больших сапогах, в полушубке овчинном,
В больших рукавицах... а сам с ноготок!
«Здорово, парнище!» — «Ступай себе мимо!» —
«Уж больно ты грозен, как я погляжу!
Откуда дровишки?» — «Из лесу, вестимо,
Отец, слышишь, рубит, а я отвожу».
(В лесу раздавался топор дровосека.) —
«А что, у отца-то большая семья?» —
«Семья-то большая, да два человека
Всего мужиков-то: отец мой да я...» —
«Так вон оно что! А как звать тебя?» — «Власом». —
«А кой тебе годик?» — «Шестой миновал...
Ну, мёртвая!» — крикнул малюточка басом,
Рванул под уздцы и быстрей зашагал...
На эту картину так солнце светило,
Ребёнок был так уморительно мал,
Как будто всё это картонное было,
Как будто бы в детский театр я попал.
Но мальчик был мальчик живой, настоящий,
И дровни, и хворост, и пегонький конь,
И снег до окошек деревни лежащий,
И зимнего солнца холодный огонь —
Всё, всё настоящее русское было,
С клеймом нелюдимой, мертвящей зимы,
Что русской душе так мучительно мило,
Что русские мысли вселяет в умы, —
Те честные мысли, которым нет доли,
Которым нет смерти —
В которых так много и злобы и боли,
В которых так много любви!"""
Мы вставили текст прямо в программу, записав ее в переменную TEXT при помощи оператора присваивания =.
Поскольку переменную с текстом изменять не планируется, ее следует считать константой и записывать название заглавными буквами.
При работе с большими объемами текстовой информации текст загружается из отдельного файла.
Встроенная функция open() по умолчанию открывает файл по указанному имени и пути к нему в режиме чтения.
Функция возвращает объект типа file, у которого есть методы open() и close().
При возникновении проблем с кодировкой ее можно указать при открытии файла.
txtfile = open("warandpeace.txt", encoding="utf-8")
TEXT = txtfile.read()
txtfile.close()
В третьей версии языка подобная операция делается с использованием ключевых слов with и as:
with open("warandpeace.txt", encoding="utf-8") as txtfile:
TEXT = txtfile.read()
Количество слов легко подсчитать при помощи метода split().
Количество символов – длина строки, полученной при сложении всех слов.
words = TEXT.split()
print(len(words)) # Вывести на экран количество слов
print(len("".join(words))) # Вывести на экран количество символов
wordsdict = {}
for word in words:
word = word.lower().strip('"').strip("(").strip("!").strip("«").rstrip("...»").strip(",")
if word not in wordsdict:
wordsdict[word] = 1
else:
wordsdict[word] = wordsdict[word] + 1
wordslist = sorted(wordsdict.items(), key=lambda x: x[1], reverse=True)
print(wordslist)
longest = ""
wordsfreq = []
for word in wordsdict:
wordsfreq.append((word, wordsdict[word]))
if len(word) > len(longest):
longest = word
wordsfreq.sort(key=lambda row: row[1], reverse=True)
print(wordsfreq == wordslist)
dct = {}
for word in wordsfreq:
dct.update({word[0]: word[1]})
print(dct)
Медианное среднее
import statistics as st
TEXT = """Здесь текст для анализа.
Add text here.
"""
word_lens = []
for word in TEXT.split():
word_lens.append(len(word))
median_val = st.median(word_lens)
mean_val = st.mean(word_lens)
print("Медианное среднее:", median_val, "Среднее:", mean_val, "Разница:", median_val - mean_val)
Ссылки
- Закон Ципфа
– эмпирическая закономерность распределения частоты слов естественного языка: если все слова языка (или просто достаточно длинного текста) упорядочить по убыванию частоты их использования, то частота n-го слова в таком списке окажется приблизительно обратно пропорциональной его порядковому номеру n. - Анализ текста онлайн
- Текстовая обработка в языке Python
- Regexp и Python: извлечение токенов из текста
- Обработка текста
- NLP – это весело! Обработка естественного языка на Python
- Библиотека textwrap
ElatedMIndGjs 1 / 1 / 0 Регистрация: 17.05.2021 Сообщений: 5 |
||||||||
1 |
||||||||
«Программа подсчета слов»17.05.2021, 01:11. Показов 2331. Ответов 12 Метки нет (Все метки)
Вопрос по статье с сайта ( https://metanit.com/python/tutorial/5.4.php ) Есть код:
Объясните пожалуйста, как работает данный цикл?
В статье написано: «Получаем словарь из слов, где ключ — это уникальное слово, а значение — количество вхождений данного слова в тексте.» Каким образом мы обращаемся к пустому словарю, перебирая в нем слова? Буду благодарен за подробный ответ.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.05.2021, 01:11 |
Ответы с готовыми решениями: Создать родительский класс «Склад» и 3 подкласса («принтеры»,» сканеры», «ксероксы») Дан список станций желтой ветки московского метро: line = [«Третьяковская», «Марксистская», «Площадь Ильича», «Авиамотор Программа на Python «» репетитор по английскому «» Написать программу проверки правильности написания сочетаний «жи», «ши», «ча», «ща» 12 |
1 / 1 / 0 Регистрация: 17.05.2021 Сообщений: 5 |
|
17.05.2021, 11:01 [ТС] |
2 |
upp
0 |
Fudthhh Модератор 2745 / 1538 / 505 Регистрация: 21.02.2017 Сообщений: 4,126 Записей в блоге: 1 |
||||
17.05.2021, 11:18 |
3 |
|||
ElatedMIndGjs,
Каким образом мы обращаемся к пустому словарю, перебирая в нем слова? Чаво? Ты передаешь в функцию список слов, проходишься по этому списку циклом, проверяешь есть ли в словаре ключ который равен текущему слову, если да, то увеличиваешь на 1 значение, иначе создаешь ключ со значением один, по сути написано очень криво. Добавлено через 3 минуты
0 |
Автоматизируй это! 6740 / 4298 / 1162 Регистрация: 30.03.2015 Сообщений: 12,643 Записей в блоге: 29 |
|
17.05.2021, 11:19 |
4 |
Каким образом мы обращаемся к пустому словарю, перебирая в нем слова? ну это он в начале пустой, а потом мы начинаем в него совать пары ключ значение в стиле слово:1
первое слово является ключом для второго. нет. Там работает так —
Каким образом мы получаем «значение = количество вхождений данного слова в тексте.», если значение = следующему слову в тексте? именно вышеописанным. Ключ -слово, значение -число (количесто вхождений)!
0 |
КулХацкеръ |
17.05.2021, 11:25
|
Не по теме: Welemir1, как же ты хорош! Просто и понятно разжевал. Я так не умею, мне проще кинуть код, чем объяснять что-то…
0 |
Автоматизируй это! 6740 / 4298 / 1162 Регистрация: 30.03.2015 Сообщений: 12,643 Записей в блоге: 29 |
|
17.05.2021, 11:31 |
6 |
КулХацкеръ,
0 |
1 / 1 / 0 Регистрация: 17.05.2021 Сообщений: 5 |
|
17.05.2021, 12:19 [ТС] |
7 |
Ну я примерно понял.
0 |
Автоматизируй это! 6740 / 4298 / 1162 Регистрация: 30.03.2015 Сообщений: 12,643 Записей в блоге: 29 |
|
17.05.2021, 13:01 |
8 |
Ну я примерно понял. нет, не понял, к сожалению
Единственный оставшийся вопрос: как переменная «words_dict = dict()» получает наш список слов? не получает, он ПУСТОЙ! мы в цикле по 1 слову туда суем (но если слово уже есть то просто инкрементим переменную)
Т.е. мы просто создали пустой словарь и он автоматически наполнился списком слов, потому что в параметре функции написано «words»? нет! у нас есть цикл! может бросить пока этот сайт(метанит) и взять книгу? тема -циклы, функции, словари
1 |
Fudthhh |
17.05.2021, 13:10
|
Не по теме: Welemir1, отправь Лутца уже читать его, тут только он поможет.
0 |
1 / 1 / 0 Регистрация: 17.05.2021 Сообщений: 5 |
|
17.05.2021, 13:26 [ТС] |
10 |
А все я понял. Цикл сам добавляет по одному слову-номеру в словарь. 1)Цикл перебирает слова из списка.
1 |
Автоматизируй это! 6740 / 4298 / 1162 Регистрация: 30.03.2015 Сообщений: 12,643 Записей в блоге: 29 |
|
17.05.2021, 13:27 |
11 |
Сообщение было отмечено ElatedMIndGjs как решение РешениеElatedMIndGjs, бинго!
1 |
1 / 1 / 0 Регистрация: 17.05.2021 Сообщений: 5 |
|
17.05.2021, 13:28 [ТС] |
12 |
Спасибо!
0 |
Fudthhh |
17.05.2021, 15:11
|
Не по теме: Welemir1, я написал тоже самое, а он прочитав задал кучу вопросов, и разбил мой ответ на список(
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
17.05.2021, 15:11 |
Программа подсчёта слов Программа для подсчета символов и слов в тексте В идеале мне нужно… Определить количество слов в строке, которые начинаются на букву «b» Найти количество слов,которые содержат ровно 3 буквы «А» Дана строка, содержащая русскоязычный текст. Найти количество слов, начинающихся с буквы «а» Дана строка, содержащая русскоязычный текст. Найти количество слов, начинающихся с буквы «е» Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 13 |
Условие
Дан текст: в первой строке записано число строк, далее идут сами строки. Определите, сколько различных слов содержится в этом тексте.
Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.
s_text = set()
for i in range(int(input().rstrip())):
s = {j for j in (str(input()).split())}
s_text = s_text.union(s)
print(len(s_text))
Решение разработчиков
1
2
3
4
5
words = set()
for _ in range(int(input())):
words.update(input().split())
print(len(words))
Случайные решения участников
Владимир Щеглов
1
2
3
4
5
6
7
n = int(input())
b = set()
for i in range(n):
a = set(input().split())
b |= a
print(len(b))
Владимир Шакиров
1
2
3
4
5
n = int(input())
words = set()
[words.update( set(input().split())) for i in range(n)]
print(len(words))
Olga Sed
1
2
3
4
5
6
n = int(input())
sset = set()
for i in range(n):
sset = sset.union(set(input().split()))
print(len(sset))
Елена Горохова
1
2
3
4
5
6
7
8
n=int(input())
b=set()
for i in range(n):
a=input().split(" ")
for el in a:
b.add(el)
print(len(b))
Andrey Platonov
1
2
3
4
5
words = set()
for i in range(int(input())):
words.update(input().split())
print(len(words))
Программа подсчета слов
Последнее обновление: 05.02.2022
Рассмотрим работу со строками на небольшом примере, который будет представлять программу подсчета слов.
Пусть весь код программы будет выглядеть следующим образом:
# Программа подсчета слов в файле import os def get_words(filename): with open(filename, encoding="utf8") as file: text = file.read() text = text.replace("n", " ") text = text.replace(",", "").replace(".", "").replace("?", "").replace("!", "") text = text.lower() words = text.split() words.sort() return words def get_words_dict(words): words_dict = dict() for word in words: if word in words_dict: words_dict[word] = words_dict[word] + 1 else: words_dict[word] = 1 return words_dict def main(): filename = input("Введите путь к файлу: ") if not os.path.exists(filename): print("Указанный файл не существует") else: words = get_words(filename) words_dict = get_words_dict(words) print(f"Кол-во слов: {len(words)}") print(f"Кол-во уникальных слов: {len(words_dict)}") print("Все использованные слова:") for word in words_dict: print(word.ljust(20), words_dict[word]) if __name__ == "__main__": main()
Здесь в функции get_words()
производится начальная сегментация текста на слова. Пи этом все пунктуационные знаки удаляются, а переводы стоки заменяется на пробелы.
Затем происходит разбитие текста на слова. В качестве разделителя по умолчанию применяется пробел.
Далее в функции get_words_dict()
получаем словарь из слов, где ключ — это уникальное слово, а значение — количество вхождений данного слова в тексте.
В функции main осуществляется ввод пути к файлу и вызов выше определенных функций, а также вывод все статистики.
Консольный вывод программы:
Введите путь к файлу: C:SomeDirhello.txt Кол-во слов: 66 Кол-во уникальных слов: 54 Все использованные слова: благодетель 2 в 1 всего 1 вы 1 горчичным 1 ее 1 ежели 3 еще 1 .......................
Skip to content
Задача «Количество слов в тексте»
Условие
Дан текст: в первой строке записано число строк, далее идут сами строки. Определите, сколько различных слов содержится в этом тексте.
Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.
Решение задачи от разработчиков на Python:
Еще одно решение задачи на Python:
Смотреть видео — Задача «Количество слов в тексте» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts