一、引言
在英语学习的征途中,记忆词汇构成了一个极为关键的基础步骤。若能从那些高频使用的词汇开始学习,无疑能够使学习过程更加高效。Python,作为一种功能强大且应用范围极广的编程语言,其文本处理功能尤为出色。利用 Python,我们能够对英文文献中的词汇频率进行量化分析,从而明确识别出哪些词汇在文本中具有较高的出现率,这些高频词汇往往是需要我们重点学习和掌握的常用语汇。在本文中,我们将详细阐述如何运用 Python 实现这一统计功能,并针对处理篇幅较长的文章(例如超过10000个单词)时可能遇到的性能挑战进行探讨,同时,在展示结果时,我们还将包含百分比数值。
二、实现思路
为了完成对英文文章中单词出现频率的统计英语,并展示带有百分比的统计结果,需要遵循以下主要步骤:
从文件中提取英文文章内容,进行文本处理,将所有字母转换为小写形式,并移除文章中的标点符号及特殊符号,仅保留单词部分。接着,将文章内容分解为独立的单词。采用适当的数据结构对各个单词出现的频率进行统计。最后,依据统计结果计算出每个单词出现的百分比。将统计数据与百分比信息依词频递减的顺序排列,并将之导出至文档。关于代码的编写,首先需进行的是对文章内容的读取处理。
通过调用 Python 的内建 open() 函数,我们可以从文件中提取英文文章的全部内容。
def read_article(file_path):
"""
从指定文件路径读取文章内容。
:param file_path: 文章文件的路径
返回文章内容,若文件不存在或读取过程中出现错误,则返回 None。
"""
try:
# 以只读模式打开文件,并使用 utf-8 编码
使用文件路径,以只读模式打开文件,并指定编码为UTF-8,随后将文件对象赋值给变量file。
# 读取文件中的所有内容
article = file.read()
return article
except FileNotFoundError:
# 若文件未找到,打印错误信息
输出提示:存在错误,未能发现位于路径 {file_path} 的文件。
return None
except Exception as e:
# 若出现其他未知错误,打印错误信息
print(f"错误:读取文件时发生未知错误 {e}。")
return None
2. 文本预处理
在开始统计词频操作之前,需对文本内容进行一系列预处理步骤,包括将所有字母统一转换为小写形式,同时移除文本中的所有标点符号以及非标准字符。
import re
def preprocess_text(text):
"""
对输入文本进行初步处理,需将所有字母统一调整为小写形式,同时清除其中的标点符号与特殊符号。
:param text: 输入的文本内容
:return: 预处理后的文本
"""
# 将所有字母转换为小写
text = text.lower()
# 使用正则表达式去除标点符号和特殊字符,只保留字母和空格
text变量通过正则表达式替换操作,将文本中所有非字母和空白字符去除,从而得到新的文本内容。
return text
3. 单词拆分
通过调用字符串的split函数英语培训,可以将文本内容划分为独立的词语单元。
def split_words(text):
"""
将输入的文本拆分成单词列表。
:param text: 输入的文本内容
:return: 单词列表
"""
# 使用空格作为分隔符将文本拆分成单词
words = text.split()
return words
4. 词频统计
借助 Python 语言中的 collections 库,特别是其中的 Counter 对象英语单词大全10000个,我们可以对每个单词出现的频率进行精确的计数。
导入collections模块中的Counter类。
定义一个函数,名为count_word_frequency,用于统计单词出现的频次。
"""
统计单词列表中每个单词的出现频率。
:param words: 单词列表
返回一个计数器对象,其中记录了每个单词及其出现的频次。
"""
# 使用 Counter 类统计单词出现的次数
word_freq = Counter(words)
return word_freq
5. 计算百分比
根据词频统计结果计算每个单词出现的百分比。
定义一个函数,用于计算单词频率的百分比。
"""
根据词频统计结果计算每个单词出现的百分比。
该参数代表词频统计的 Counter 类型的对象。
:return: 一个字典,包含每个单词及其出现的百分比
"""
# 计算单词的总数
总词数等于词频字典中所有值相加的结果。
# 初始化一个空字典用于存储百分比
percentages = {}
遍历word_freq字典中的每一项,将word和freq分别取出。
# 计算每个单词的百分比
计算百分比时,需将频率值除以总词数,然后将所得结果乘以100。
将单词的占比赋值给百分比变量。
return percentages
6. 输出结果到文件
将收集到的数据以及相应的比例信息,依照词语出现的频率从多到少进行排列,并将排序后的结果输出至既定的文档。
实现将词汇频率写入文件的功能,该功能接收词汇频率字典、百分比列表以及输出文件名作为参数。
"""
将词频统计结果和百分比数据写入指定文件。
:param word_freq: 词频统计的 Counter 对象
参数percentages:此字典内记录了各个单词所占的百分比
:param output_file: 输出文件的路径
"""
try:
# 以写入模式打开文件,并使用 utf-8 编码
使用open函数,以写入模式打开output_file,指定编码为utf-8,并将文件对象赋值给变量file。
# 按照词频从高到低对单词进行排序
对单词频率的项进行排序,依据的是每个项的值,采用降序排列的方式,得到的排序后的单词列表为sorted_words。
在按频率排序的单词列表中,逐一取出每个单词及其出现次数,并用逗号分隔。
# 获取该单词的百分比
百分比等于该单词对应的百分比值。
# 将单词、词频和百分比写入文件
file写入操作中,记录了单词“word”及其出现频率“freq”,并附带百分比形式的占比“percentage”,格式化为两位小数,最后输出换行符。
词频统计的成果已顺利存入到{output_file}文件中。
except Exception as e:
# 若出现错误,打印错误信息
print(f"错误:写入文件时发生未知错误 {e}。")
7. 主函数
将上述步骤整合到一个主函数中,完成整个单词词频统计的流程。
def main():
# 输入文章文件的路径,可替换为实际的文件路径
输入文件名为article.txt。
# 输出结果文件的路径,可替换为实际的文件路径
输出文件名为“word_frequency.txt”。
# 读取文章内容
文章内容 = 从输入文件中读取
if article:
# 对文章进行预处理
将文章内容进行预处理后,得到的处理文本赋值给变量 processed_text。
# 将预处理后的文本拆分成单词
对处理过的文本进行分割,得到单词列表。
# 统计单词的词频
对单词出现频率进行统计,得到的结果赋值给变量word_freq。
# 计算每个单词出现的百分比
计算词频的百分比,结果由函数calculate_percentages()处理。
# 将词频和百分比数据写入文件
将单词频率写入文件,同时将百分比数据一同保存,目标输出文件为指定路径。
if __name__ == "__main__":
main()
四、性能优化
在处理篇幅较长的文本时学英语,性能考量显得尤为关键。该代码已实施数项优化手段,比如运用Counter类进行词汇频率的统计,此方法的计算时间复杂度是
在文中,n 代表了单词的总数。另外英语单词大全10000个,通过运用正则表达式对文本进行预处理,可以有效地移除标点符号及非文字符号。
为了进一步提高性能,可以考虑以下几点:
在处理大量文本时,可以将文本内容划分为若干部分Python实现英文文章单词词频统计,高效助力单词背诵,分别进行细致的加工;之后英语单词大全10000个,再将各部分的处理结果汇总起来英语单词大全10000个,进行最终的统计。同时,为了提升处理效率,可以采用多线程或多进程的方式,对文本的不同部分进行并行计算;这样,便能在较短的时间内完成整个处理过程。五、总结
运用 Python 对英文文章进行单词频率的统计,并在输出结果中加入百分比信息,这样我们就能更清晰地看到每个单词在文章中的比例分布。这类高频词汇往往是我们在学习英语过程中需要着重记忆的常用词汇。本文详尽地阐述了实现这一功能的操作步骤及代码示例,并对处理篇幅较长的文章时可能出现的性能问题进行了考虑。这篇文章旨在助力同学们更高效地运用 Python 工具,从而优化英语学习过程,增强词汇记忆的成效。
完整代码
import re
from collections import Counter
def read_article(file_path):
"""
从指定文件路径读取文章内容。
:param file_path: 文章文件的路径
:return: 文章内容,如果文件不存在或读取错误则返回 None
"""
try:
with open(file_path, 'r', encoding='utf-8') as file:
article = file.read()
return article
except FileNotFoundError:
print(f"错误:文件 {file_path} 未找到。")
return None
except Exception as e:
print(f"错误:读取文件时发生未知错误 {e}。")
return None
def preprocess_text(text):
"""
对输入的文本进行预处理,将字母转换为小写并去除标点符号和特殊字符。
:param text: 输入的文本内容
:return: 预处理后的文本
"""
text = text.lower()
text = re.sub(r'[^a-zA-Zs]', '', text)
return text
def split_words(text):
"""
将输入的文本拆分成单词列表。
:param text: 输入的文本内容
:return: 单词列表
"""
words = text.split()
return words
def count_word_frequency(words):
"""
统计单词列表中每个单词的出现频率。
:param words: 单词列表
:return: 一个 Counter 对象,包含每个单词及其出现次数
"""
word_freq = Counter(words)
return word_freq
def calculate_percentages(word_freq):
"""
根据词频统计结果计算每个单词出现的百分比。
:param word_freq: 词频统计的 Counter 对象
:return: 一个字典,包含每个单词及其出现的百分比
"""
total_words = sum(word_freq.values())
percentages = {}
for word, freq in word_freq.items():
percentage = (freq / total_words) * 100
percentages[word] = percentage
return percentages
def write_word_frequency_to_file(word_freq, percentages, output_file):
"""
将词频统计结果和百分比数据写入指定文件。
:param word_freq: 词频统计的 Counter 对象
:param percentages: 包含每个单词百分比的字典
:param output_file: 输出文件的路径
"""
try:
with open(output_file, 'w', encoding='utf-8') as file:
sorted_words = sorted(word_freq.items(), key=lambda item: item[1], reverse=True)
for word, freq in sorted_words:
percentage = percentages[word]
file.write(f"{word}: {freq} ({percentage:.2f}%)n")
print(f"词频统计结果已成功写入 {output_file}。")
except Exception as e:
print(f"错误:写入文件时发生未知错误 {e}。")
def main():
input_file = 'article.txt'
output_file = 'word_frequency.txt'
article = read_article(input_file)
if article:
processed_text = preprocess_text(article)
words = split_words(processed_text)
word_freq = count_word_frequency(words)
percentages = calculate_percentages(word_freq)
write_word_frequency_to_file(word_freq, percentages, output_file)
if __name__ == "__main__":
main()