基于Python的文本统计

本文提供了一个Python脚本,用于读取指定文本文件,统计并输出文件中特定字符的数量、行数、单词总数及前10个最频繁出现的单词。脚本在读取文件前需确保文件可读且无保护属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定任意的文本文件,统计文件中的文字信息。

#wordstats.py
#包含所有要保留的字符集
keep={'a','b','c','d','e',
      'f','g','h','i','j',
      'k','l','m','n','o',
      'p','q','r','s','t',
      'u','v','w','x','y',
      'z',' ','-',"'"}

def normalize(s):
    """
    将字符串转化成标准字符
    """
    result=' '
    for c in s.lower():
        if c in keep:
            result += c
    return result

def make_freq_dict(s):
    """
    返回每个单词的频率数
    """
    s=normalize(s)
    words=s.split()
    d={}
    for w in words:
        if w in d: #如果W出现过,就将其出现的次数加1
            d[w] += 1
        else:
            d[w] = 1 #如果w是第一次出现,就将其出现次数设置为1
    return d

def print_file_stats(fname):
    """
    打印统计信息
    """
    s=open(fname,'r').read()
    num_chars=len(s)  #规范化S之前计算字符数
    num_lines=s.count('\n') #在规范化s之前计算行数

    d=make_freq_dict(s)
    num_words=sum(d[w] for w in d)  #计算s包含多少单词

    #创建一个列表,其中的元素为单词及其出现次数的元组,并根据单词出现的次数由高到低排列
    lst=[(d[w],w) for w in d]
    lst.sort()  #排序
    lst.reverse()  #反转

    #屏幕上打印信息
    print("The file '%s' has: "%fname)
    print("  %s characters" %num_chars)
    print("  %s lines" %num_lines)
    print("  %s words" %num_words)

    print("\nThe top 10 most frequent words are:")
    i=1  #循环变量
    for count,word in lst[:10]:
        print('%2s. %4s %s' %(i,count,word))
        i += 1

def main():
    print_file_stats('D:\\Python3.4\\82208.txt')

if __name__ == '__main__':
    main()

执行结果:


注:读取之前应该确保文件是可读的,并且解除文件的保护属性。否则读取会异常。


参考文献:

Toby Donaldson著,袁国忠译.Python 编程入门(第三版).人民邮电出版社.2013.12

### 使用Python进行文本分析和统计词频 #### 方法概述 为了实现文本分析和词频统计,可以采用多种方法和技术。以下是几种常用的技术路径: 1. **基础库支持** Python 提供了许多强大的库来辅助完成这一任务。例如 `NumPy`、`Pandas` 和 `SciPy` 可以用来处理数据集执行基本的统计操作[^1]。 2. **中文分词工具 jieba** 对于中文文本,通常需要先对其进行分词处理。`jieba` 是一个高效的第三方中文分词库,能够将连续的汉字序列切分成有意义的词语单位[^2]。 3. **正则表达式预处理 (re)** 文本可能包含噪声字符(如标点符号、HTML标签等),因此建议使用 `re` 模块清理原始输入数据[^3]。 4. **高效计数 collections.Counter** 统计词频的核心在于记录每个单词出现次数的任务,这可以通过标准库中的 `collections.Counter` 类轻松达成目标[^3]。 5. **高级功能扩展 pandas.DataFrame** 如果希望进一步整理结果或者导出至文件,则可借助 `pandas` 构造表格形式的数据结构以便后续查看或分享给他人阅读理解更直观方便。 6. **输出高频率词汇列表** 完成以上步骤之后就可以筛选出排名靠前的一些高频次项展示出来作为最终成果之一[^5]。 #### 示例代码 下面提供了一段完整的示例程序演示整个流程: ```python import re from collections import Counter import jieba def preprocess_text(text): """去除无关字符""" cleaned = re.sub(r'[^\w\s]', '', text) # 移除非字母数字字符 return cleaned.lower() # 转换为小写 def segment_chinese(text): """对中文文本进行分词""" words = jieba.lcut(text) filtered_words = [word for word in words if not word.isdigit()] return filtered_words def calculate_word_frequencies(words): """计算词频""" freqs = Counter(words) return freqs.most_common(15) if __name__ == "__main__": sample_text = """ 这是一个测试样例文档, 我们会尝试从中提取关键词汇。 """ processed_text = preprocess_text(sample_text) segmented_words = segment_chinese(processed_text) top_keywords = calculate_word_frequencies(segmented_words) print("Top Keywords:") for keyword, frequency in top_keywords: print(f"{keyword:<10} {frequency:>5}") ``` 此脚本首先定义了一个简单的函数链路来进行必要的准备工作;接着调用了两个主要的功能模块——一个是基于正则替换法净化源码片段里的干扰因素,另一个则是应用结巴算法把句子拆解开来形成单独词条集合;最后再利用内置容器对象快速汇总各个单元重复度情况将最高者列印显示出来。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值