
这是我去年选修python程序设计时候的作业二,当时是皇甫伟老师教的然后范茜莹姐姐当的助教还代了两节课(虽然我作为颜狗沉迷颜值没好好听就是了),但是,python程序设计还是值得我来安利的,大二计通贝壳er都去选!!!
前文链接:
- python程序设计之turtle绘图
目录
作业要求
设计思路
运行结果
最后代码附上
作业要求
- 选择一部长度合适的小说,中文、英文或其他语种皆可,长度不低于5万字。
- 首先对文本进行词(字)频统计,中文可以进行分词统计词频,或不分词统计字频,英文要求统计词频并考虑词语的大小写等价性。
- 按照词频顺序列出所有的词及其出现次数;
- 绘制排序-数量曲线,验证Zipf-Law(可以用第三方软件绘图)。
- 利用正则表达式查找文件中的某种特定模式,对这种模式进行提取分析。要求提取出的内容有一定的复杂性(多种匹配结果),提取的数量不低于20个。
- 首先我一开始选择了小说《三体》,但是全集字数过多(接近百万字),于是只选择了《三体Ⅱ·黑暗森林》的部分,但是字数依旧不少(三四十万字),但相对来说长度已经比较合适。
- 首先对小说文本进行词频统计,分词统计词频就需要通过对jieba库的使用判定是否为词,并在统计时通过判断语句将单字略去。
- 按照词频顺序列出了出现次数排名前100个词及其出现次数,并将所有的词及其出现次数写入到同目录下'词频统计.txt'中;
- 通过对'词频统计.txt'中的数据使用第三方软件(Excel你是我的神!!!)进行绘制排序-数量关系,验证Zipf-Law
- 使用库re利用正则表达式查找文件中的所有宇宙舰队中战舰的名字,假定模式为“(*)号”,并对这种模式用正则表达式表示”[\u4e00-\u9fa5](.+?)号”并通过对Counter 库中collections的使用进行提取分析,并输出其中出现次数最多的十个。
- 词频统计前100
-
绘制排序-数量直方图,验证Zipf-Law
- 正则表达式查找并统计文件中的出现次数最多的十艘飞船名字
import jieba
import re
from collections import Counter
'''
(1)选择一部长度合适的小说,中文、英文或其他语种皆可,长度不低于5万字。
(2)首先对文本进行词(字)频统计,中文可以进行分词统计词频,或不分词统计字频,英文要求统计词频并考虑词语的大小写等价性。
(3)按照词频顺序列出所有的词及其出现次数;
(4)绘制排序-数量曲线,验证Zipf-Law(可以用第三方软件绘图)。
(5)利用正则表达式查找文件中的某种特定模式,对这种模式进行提取分析。要求提取出的内容有一定的复杂性(多种匹配结果),提取的数量不低于20个。
(6)完成说明文档,其中包括程序的说明和结果分析的说明。
(7)提交压缩文件zip/rar,其中包括:说明文档(pdf),源代码(py)。
'''
# input = open("斗破苍穹.txt") 本来是想统计斗破苍穹里的桀桀和恐怖如斯的但是在字数太多了就没弄
with open('三体.txt',encoding="utf-8") as f :
all = f.read()
words = jieba.lcut(all)
count_word = {}
#分词统计
for word in words:
if len(word) == 1:
#单字跳过
continue
else:
count_word[word] = count_word.get(word, 0) + 1
result = [(v, k) for k, v in count_word.items()]
result.sort()
top100 = result[-100:]
for v,k in top100[::-1]:
print(f"{k} {v}")
for v,k in result[::-1]:
with open('词频统计.txt','a',encoding="utf-8") as w :
w.write(f"{k}\t{v}\n")
things = []
for i in re.finditer("[\u4e00-\u9fa5](.+?)号", all):
who = i.group(1)
things.append(who)
c = Counter(things)
for k, v in c.most_common(10):
print(k+"号\t",v)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)