ЭтоДзен Питона и его друзейВопрос 3 в Планете знаний
тема:
Подсчитайте количество вхождений каждого слова в файле и перечислите 5 наиболее часто встречающихся слов.
Предисловие:
Этот вопрос широко используется в сценариях практического применения, таких как подсчет высокочастотных слов, появлявшихся в течение многих лет на экзаменах CET-4 и CET-6.Я помню, что Ли Сяолай использовал свои навыки программирования, чтобы опубликовать бестселлер. книга по запоминанию слов, основанная на частоте слов Слова любимы учащимися. Это типичный сценарий, в котором навыки программирования применяются для решения реальных проблем. Кроме того, во время анализа данных эти эффекты облака слов в основном основаны на статистике частоты слов для настройки размера шрифта.Если вы можете умело использовать знания Python для решения проблем, это означает, что вы действительно начали Python.
анализировать
Эта тема в основном исследует следующие точки знаний:
1. Как правильно читать и записывать файлы
Чтение и запись файлов в python могут использовать встроенные функцииopen()
, а функция open имеет определенные отличия между python2 и python3. Например, Python может указать формат кодировки для чтения и записи файлов, а Python — нет. Чтобы быть совместимым с 2 и 3 одновременно, мы обычно используем функцию откройте функцию под модулем io.Вы можете проверить документы, чтобы понять разницу между ними, и выработать привычку к активному обучению и проверке материалов.
Еще один момент заключается в том, что дескриптор файла должен быть закрыт после чтения и записи файла.В дополнение к синтаксису try...except...final, мы также можем использовать более элегантный синтаксис with...as для автоматического закрытия файл.
2. Как сортировать данные
sorted
Функция является встроенной функцией, которая часто используется, и ее использование также очень мощно, потому что ее можно настроить, указав ключ параметра, а это означает, что вы можете не только сортировать числа, сортировать буквы, но и списки. , словарь и настраиваемые объекты для сортировки, вам просто нужно сообщить функции sorted, каковы правила сортировки, такие как объект людей, я могу сортировать по возрасту или росту и весу, поэтому эта функция очень гибкая. Кроме того, список объект имеет свой собственный метод сортировки, и если вы можете различить разницу между list.sort и sorted, это означает, что вы можете использовать его гибко.
3. Использование словарных типов данных
Для статистики частоты слов использование словаря, несомненно, является наиболее подходящим типом данных.В качестве ключа словаря используется слово, а в качестве значения словаря используется количество вхождений слова.Это очень удобно для записи частота каждого слова. Словарь очень похож на нашу телефонную книгу, Каждое имя связано с номером телефона. Кроме того, самая большая особенность словаря заключается в том, что его скорость запросов будет очень высокой. В идеале временная сложность O(1), я имею в виду идеальный случай, если вы хотите узнать больше о словарях, я рекомендую ознакомиться с этой статьей https://www.laurentluce.com/posts/python-dictionary-implementation/
4, использование регулярных выражений
Для обработки текста и строк регулярные выражения являются просто артефактами. Они широко используются при сканировании и очистке данных. Конечно, регулярные выражения не уникальны для Python и поддерживаются всеми языками программирования. Что нам нужно сделать, так это изучить Регулярные выражения и их API можно использовать в реальных сценариях только в том случае, если мы знакомы с API. Порекомендуйте статью о регулярных выражениях: http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html, и я также обнаружил, что некоторые студенты представили библиотеку сегментации слов jieba, которая делает китайский Сегментация слов очень полезна, вы можете узнать об этом, если вам интересно.
выполнить
После анализа мы поняли, что на самом деле это было очень быстро. Поэтому, когда мы получаем требование, мы должны сначала уточнить требование, подумать, какие технологии можно использовать для его достижения, а затем написать код вручную, ведь на самом деле мы тратим меньше половины времени на написание кода на работе. .
# -*- coding:utf-8 -*-
import io
import re
class Counter:
def __init__(self, path):
"""
:param path: 文件路径
"""
self.mapping = dict()
with io.open(path, encoding="utf-8") as f:
data = f.read()
words = [s.lower() for s in re.findall("\w+", data)]
for word in words:
self.mapping[word] = self.mapping.get(word, 0) + 1
def most_common(self, n):
assert n > 0, "n should be large than 0"
return sorted(self.mapping.items(), key=lambda item: item[1], reverse=True)[:n]
if __name__ == '__main__':
most_common_5 = Counter("importthis.txt").most_common(5)
for item in most_common_5:
print(item)
распечатать результат:
('is', 10)
('better', 8)
('than', 8)
('the', 6)
('to', 5)
Суммировать
Когда я просматривал коды всех, у многих кодов все еще были неправильные имена (рекомендовали читать PEP8), а верстка кода сбивала с толку (трудно читать, для форматирования рекомендуется использовать Pycharm). Также существует множество реализаций кода, которые выглядят сложными (часто чем сложнее код, тем больше ошибок). Конечно, способ реализации не единственный.
Например, сам модуль Python предоставляет класс collections.Counter, который наследуется от класса dict, который используется для статистики. Я обнаружил, что некоторые студенты используют этот класс для его реализации. Если вы будете внимательны, вы можете обнаружить, что я реализовал Это Счетчик очень похож на счетчик под коллекциями. По сути, это сборка колес. Сборка колес может тренировать наше программирование мышления. Конечно, нет необходимости строить колеса, если у вас есть готовые вещи на работе, если только у вас есть уверенность, чтобы сделать лучше. Вы также можете подумать о том, что вам следует делать, если Python не предоставляет инструмент Counter.
Кроме того, этот модуль также предоставляет упорядоченный объект словаря OrderedDict, который может избавить нас от ручной операции сортировки. Наконец, я предлагаю вам изучить и обобщить все содержание, которое я упомянул выше. Если вы сможете придерживаться этого в течение 100 дней, я считаю, что вы освоите Python довольно легко.
Подпишитесь на общедоступную учетную запись «Zen of Python» (id: vttalk), чтобы получать последние статьи.