linRichielinRichie
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
    • Python学习指南
  • 快速开始

    • Python: 输入与输出 (I/O)
    • Python: 异常处理 try-except
    • Python: List深入概述
    • Python: 面向对象编程(OOP)
  • Python 语法库函数

    • 语法库目录
    • 库

      • library目录
      • argparse:解析命令行参数
      • difflib:比较序列并生成差异信息
      • dnspython: DNS处理库
      • IPy:IP地址处理库
      • logging:记录和管理日志信息
      • os:访问和操作操作系统
      • psutil:系统性能信息库
      • re:正则表达式库
      • smtplib:邮件发送库
    • 函数

      • function目录
      • any() 函数
      • input 函数
      • lambda 和 map 函数
      • reversed()函数
      • zip()函数
    • 语句

      • statement目录
      • import 语句
      • Try/Exception 异常
    • 概念

      • concept目录
      • 深拷贝与浅拷贝
      • 列表、字典与元组
      • 文件读写
      • IO: 输入与输出
      • 逻辑判断与条件语句
      • OOP 面向对象:class
      • OOP: 面向对象编程
  • SQLAlchemy

    • 获取insert或者update的id
  • Pandas

    • Pandas目录
    • Pandas:基础操作
    • Pandas:数据处理与转换
    • Pandas: 数据写入 excel 表格
  • Python前端框架

    • Flask

      • 1. Flask简介
      • 2. Flask程序基本结构
      • 3. Flask请求-响应循环
      • 4. flask案例: 框架网页查询IP
      • Python: Flask中的GitHub OAuth
    • Django

      • chapter-01:Django框架认识

        • 1.1 Django的产生背景
        • 1.2 MTV设计模式
        • 1.3 Django 主要功能模块
      • chapter-02:开发环境配置

        • 2.1 Python的安装与配置
        • 2.2 虚拟环境安装与配置
        • 2.3 Django安装与配置
        • 2.4 MySQL安装配置
      • chapter-03:项目框架搭建

        • 3.1 Django管理工具-创建项目骨架
        • 3.2 修改项目的默认配置
        • 3.3 初始化项目环境
      • chapter-04:ORM应用与原理剖析

        • 4.1 构建POST应用需要的数据集
        • 4.2 Model相关的概念和使用方法
        • 4.3 Model的查询操作API
        • 4.4 ORM实现原理
      • chapter-05:Django管理后台

        • 5.1 将Model注册到管理后台
        • 5.2 管理后台实现原理
      • chapter-06:视图

        • 6.1 视图基础
        • 6.2 视图的高级特性和快捷方法
        • 6.3 基于类的通用视图
      • chapter-07:模板系统

        • 7.1 模板系统基础
        • 7.2 模板语言
      • chapter-08:表单系统

        • 8.2 使用表单系统实现表单: ModelForm
      • chapter-09:用户认证系统

        • 9.1 用户与身份认证
        • 9.2 权限管理
        • 9.3 用户认证系统应用
      • chapter-10:Django路由系统

        • 10.1 路由系统基础
      • chapter-11:Django中间件

        • 11.1 中间件基础
  • Python例子

    • Python: Linux的Shell命令
    • Python: PEP8自动格式化代码
    • Python: pip操作
    • Python: 业务服务监控
    • Python: 从文件逐行读取数据
    • 将链表转换为字符串
    • Python: 检查URL是否能正常访问
    • Python: 爬取网易云音乐
    • Python: 读取目录下的所有内容
    • 案例研究:文本统计
  • Python爬虫

    • 数据解析工具:Xpath
  • 算法题

    • 02:两数相加
    • 09:回文数
    • 13:罗马数值转换为整数
    • 14:最长公共前缀

案例研究:文本统计

  • 概述
  • 问题描述
    • 目标
    • 示例分析
  • 文本预处理
    • 基本处理
    • 文本标准化
    • 实现代码
  • 大文件处理

概述

本案例将介绍如何开发一个文本统计程序,通过这个实例学习:

  • 如何分析和描述问题
  • 如何处理文本数据
  • 如何进行性能优化
  • 如何组织完整程序

问题描述

目标

开发一个文本统计程序,实现以下功能:

  1. 计算文本文件的基本统计信息:

    • 字符数
    • 行数
    • 单词数
  2. 分析词频:

    • 统计单词出现次数
    • 找出出现频率最高的前10个单词
    • 按出现次数排序显示结果

示例分析

以下面的文本为例:

A long time ago, in a galaxy far, far away...

基本统计:

  • 1行文本(以\n为行尾标识)
  • 46个字符(包括空格和标点)
  • 10个单词

文本预处理

基本处理

text = 'A long time ago, in a galaxy far, far away...'

# 计算字符数
print(f"字符数: {len(text)}")  # 46

# 分割单词
words = text.split()
print(f"单词数: {len(words)}")  # 10
print(f"单词列表: {words}")

文本标准化

为了准确统计单词,需要进行以下处理:

  1. 转换为小写
  2. 处理标点符号
  3. 处理特殊情况

需要注意的问题

  1. 标点符号处理

    • 保留撇号和连字符(如:I'd, well-known)
    • 其他标点符号需要删除
  2. 大小写处理

    • 统一转换为小写
    • 可能影响专有名词识别(如:Polish -> polish)

实现代码

# 定义要保留的字符集
VALID_CHARS = set('abcdefghijklmnopqrstuvwxyz -\'')

def normalize_text(text: str) -> str:
    """
    标准化文本:转小写并只保留有效字符

    Args:
        text: 输入文本

    Returns:
        str: 标准化后的文本
    """
    return ''.join(c for c in text.lower() if c in VALID_CHARS)

# 测试
text = "I'd like a copy!"
print(normalize_text(text))  # "i'd like a copy"

大文件处理

处理大型文本文件时需要注意:

  1. 使用生成器逐行读取文件
  2. 避免一次性将整个文件加载到内存
  3. 分块处理大文件
def process_large_file(filename: str, chunk_size: int = 1024 * 1024):
    """
    分块处理大文件
    
    Args:
        filename: 文件名
        chunk_size: 每次读取的块大小(默认1MB)
    """
    with open(filename, 'r', encoding='utf-8') as f:
        while True:
            chunk = f.read(chunk_size)
            if not chunk:
                break
            # 处理文本块
            process_chunk(chunk)

注意:

  • 合理设置块大小
  • 注意内存使用
  • 处理文件编码
Prev
Python: 读取目录下的所有内容