python进行中文字频、高频字覆盖率统计

本文介绍使用Python对《孟子》进行字频统计,重点排除标点符号,计算高频字(字频>=500)覆盖率,并展示直观的输出结果。

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

题目:用python统计《孟子》总体长度、字种、字频、高频字覆盖率。

《孟子》全文下载:点击下载

高频字:字频>=500的字

本题有三个地方要注意:

1、《孟子》中含有大量的标点符号,统计时应该把它们排除在外。

2、统计字频、高频字覆盖率是难点。

3、如何用相对直观、好看的方式打印输出结果。

源代码:

#《孟子》总体长度
f = open('ex_menzi.txt', 'r', encoding='utf-8')
text=f.read()
for ch in "《》,。:!‧「」『』〈〉;﹖.! \n?":
    text = text.replace(ch, "")                  # 去掉文章的标点符号
print("《孟子》的总体长度:", len(text))

#《孟子》字种
result = set(text)
print("《孟子》的字种:\n", result)
print("《孟子》的字种总长:", len(result))

#《孟子》字频
my_dict={}
for char in text:
    if char in my_dict:
        my_dict[char] = my_dict[char]+1
    else:
        my_dict[char] = 1

#《孟子》高频字的覆盖率
rate = {}                           
<think>嗯,用户想了解如何用Python进行词频统计。首先,我得确定他们的需求是什么。可能他们刚开始学Python,或者需要处理文本数据。词频统计通常用于文本分析,比如找出文章中的高频词汇。 首先,我需要回忆一下Python中处理文本的基本方法。符串处理、分割单词,可能需要用到split()方法。但split只能按空格分割,标点符号可能会影响结果,比如“word,”和“word”会被视为不同的词。所以得考虑去除标点,或者统一转为小写。 接下来是统计部分,可以用典来存储每个词的计数。遍历每个词,如果词在典中,就加一,否则初始化为1。或者用collections模块里的Counter,这样更简单。 然后,可能需要考虑停用词,比如“的”、“是”这些常见但无实际意义的词。用户是否提到需要过滤这些?问题里没提,但可能是一个扩展点,可以简单提及。 步骤应该是:读取文本、清洗(去标点、小写)、分词、统计、排序输出。用户可能需要代码示例,所以得准备一个简单的例子,比如用符串直接处理,或者读取文件。 可能的陷阱:大小写区分,比如“Word”和“word”算不同词,所以应该统一转为小写。标点符号的处理,可以用符串的translate方法或者正则表达式替换掉非符。 另外,中文分词和英文不同,如果是中文的话,可能需要用jieba库。但用户的问题里没有明确说明是中英文,可能需要分情况讨论。原问题中的例子是英文,但用户用中文提问,可能两种都需要考虑?或者用户可能混淆了中英文的处理方法。 比如,如果是英文文本,直接按空格分词,处理标点;如果是中文,需要用分词工具。用户的问题里没有明确,所以可能需要分开说明,或者询问。但作为回答,可能需要覆盖两种情况,或者假设是英文,同时提到中文的不同处理。 现在整理步骤: 1. 文本预处理:去除标点,转为小写。 2. 分词。 3. 统计词频。 4. 排序输出。 然后给出代码示例,比如使用Counter和正则表达式处理英文。对于中文,需要加入jieba的例子。 可能用户实际需要的是英文的处理,但考虑到提问是中文,可能需要提到中文的情况。比如,补充说明中文需要分词库。 另外,是否需要处理文件读取?比如用户可能有一个文本文件,需要读取内容。在示例中加入文件读取的步骤。 总结:回答需要包括英文和中文词频统计的方法,使用不同的处理方式,给出代码示例,并解释步骤。可能还需要提到常见的库,比如collections.Counter,re,以及jieba(针对中文)。</think>词频统计是自然语言处理中的基础任务,用于统计文本中各词语的出现次数。以下是 Python 的两种实现方法(支持中英文),附带详细解释: --- ### **基础版:手动统计(适合初学者理解原理)** ```python from collections import defaultdict def word_frequency(text): # 清洗文本:去除非母数符(英文)或保留汉中文) cleaned_text = ''.join([char.lower() if char.isalnum() or '\u4e00' <= char <= '\u9fff' else ' ' for char in text]) # 分割单词(英文)或使用结巴分词(中文) words = cleaned_text.split() # 英文直接按空格分割 # 中文需安装 jieba 后替换为:import jieba; words = jieba.lcut(cleaned_text) # 统计词频 freq_dict = defaultdict(int) for word in words: if word: # 过滤空符串 freq_dict[word] += 1 return freq_dict text = "Python 是一种广泛使用的编程语言,Python 语言简洁高效。" print(word_frequency(text)) ``` --- ### **进阶版:使用标准库(高效简洁)** ```python from collections import Counter import re import jieba # 中文需安装:pip install jieba def word_frequency_pro(text, is_chinese=False): # 文本清洗与分词 if is_chinese: text = re.sub(r'[^\u4e00-\u9fff]', ' ', text) # 去除非汉 words = jieba.lcut(text) else: words = re.findall(r'\b\w+\b', text.lower()) # 英文小写化并提取单词 # 统计并返回前N高频词 return Counter(words) # 英文示例 en_text = "Python is a powerful language. Python is easy to learn." en_freq = word_frequency_pro(en_text) print(en_freq.most_common(2)) # 输出 [('python', 2), ('is', 2)] # 中文示例(需分词) zh_text = "自然语言处理很有趣,自然语言处理很有挑战。" zh_freq = word_frequency_pro(zh_text, is_chinese=True) print(zh_freq.most_common(2)) # 输出 [('自然语言', 2), ('处理', 2)] ``` --- ### **关键步骤解析** 1. **文本清洗** - 英文:使用正则表达式 `\b\w+\b` 提取单词,`lower()` 统一小写。 - 中文:用 Unicode 范围 `\u4e00-\u9fff` 保留汉,结合结巴分词精准切词。 2. **统计优化** - `collections.Counter` 提供快速的词频统计,`most_common(N)` 可输出前 N 个高频词。 3. **扩展功能建议** - 添加停用词过滤(如「的、是」)。 - 处理大型文件时逐行读取避免内存不足。 - 可视化结果(用 `matplotlib` 生成词云图)。 --- ### **中文分词注意事项** - 安装结巴分词库:`pip install jieba` - 专业文本(如医学、法律)可加载自定义词典提升分词准确率:`jieba.load_userdict("my_dict.txt")` 根据需求选择基础或进阶方案,处理前明确文本语言类型即可快速实现词频统计
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值