栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python程序设计之词频统计

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python程序设计之词频统计

        这是我去年选修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)




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号