Python实现英文词频统计:以hamlet为例

该博客展示了如何使用Python对《哈姆雷特》文本进行预处理,包括转换为小写和移除特殊字符,然后进行词频统计。前十大高频词汇为:the、and、to、of、i、a、you、my、hamlet、in。此处理对于文本分析和信息提取具有重要意义。
部署运行你感兴趣的模型镜像
#CalWordNum.py
def GetTxt():
    txt=open("hamlet.txt",'r').read()
    txt=txt.lower()
    for ch in "!'#$%&()*+,-./:'<=>?@[\\]^-‘{|}~":   #将特殊符号替换为空格
        txt=txt.replace(ch," ")
    return txt
 
hamlet=GetTxt()
words=hamlet.split()    #split返回列表类型
count={}    #创建字典
for word in words:
    count[word]=count.get(word,0)+1
items=list(count.items())   #转换成列表
items.sort(key=lambda x:x[-1],reverse=True)
for i in range(10):
    word,count=items[i]
    print("{0:<10}{1:>5}".format(word,count))

the        1143
and         966
to          762
of          669
i           629
a           546
you         544
my          514
hamlet      467
in          451

Hamlet.txt全文下载:https://python123.io/resources/pye/hamlet.txt

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>嗯,用户的问题是关于如何用Python对《哈姆雷特》进行词频统计。我需要根据提供的引用内容来构建一个清晰的步骤说明和示代码。首先,用户可能对文本处理的基本流程不太清楚,所以得先分解步骤:获取文本、预处理、统计词频、排序输出。 用户提供的引用中,引用2详细描述了处理步骤,包括读取文件、处理特殊符号、归一化、分割单词和使用字典统计。引用4提到了使用counts.get(word,0)+1来更新词频,这点很重要,需要包含在代码示中。另外,用户提到需要处理标点和大写,所以预处理部分需要包括转换为小写和替换标点为空格。 可能需要注意的问题:用户可能不知道如何处理文件读取时的编码问题,所以示代码中最好指定编码方式,比如'utf-8'。此外,分割单词时,如果文本中有连字符或者缩略词,简单的split()可能不够,但根据引用中的方法,用空格替换标点后split应该是可行的。 示代码的结构要清晰,每个步骤加上注释。比如,读取文件、预处理文本、统计词频、排序和输出结果。同时,要避免使用高级库,按照引用3中的要求,只能使用字典,不能使用collections.Counter。 最后,生成的相关问题需要与词频统计相关,比如预处理的注意事项、排除停用词的方法、结果展示方式等。确保问题覆盖用户可能遇到的后续疑问。</think>### Python实现《哈姆雷特》词频统计步骤 #### 1. 文本获取与读取 从Gutenberg项目下载《哈姆雷特》英文文本[^3],保存为`hamlet.txt`。使用Python内置函数读取文件内容: ```python with open('hamlet.txt', 'r', encoding='utf-8') as f: text = f.read() ``` #### 2. 文本预处理 - **符号过滤**:将所有非字母字符替换为空格 - **归一化处理**:统一转为小写字母 ```python text = text.lower() for char in '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~': text = text.replace(char, ' ') ``` #### 3. 单词分割与统计 使用字典数据结构进行词频统计: ```python words = text.split() counts = {} for word in words: counts[word] = counts.get(word, 0) + 1 # 字典的get方法实现自动初始化[^4] ``` #### 4. 结果排序与输出 将字典转换为列表并按词频降序排序: ```python items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): # 输出前10个高频词 word, count = items[i] print(f"{word:<15}{count}") ``` ### 完整示代码 ```python def hamlet_word_count(): # 读取文件 with open('hamlet.txt', 'r', encoding='utf-8') as f: text = f.read() # 预处理 text = text.lower() symbols = '!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~' for char in symbols: text = text.replace(char, ' ') # 统计词频 words = text.split() counts = {} for word in words: counts[word] = counts.get(word, 0) + 1 # 排序输出 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) for i in range(10): word, count = items[i] print(f"{word:<15}{count}") hamlet_word_count() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值