• 计算机与软件工程 作业四


    作业要求 第四周作业
    代码规范 课程目标
    作业帮助 了解并遵守代码规范复审 掌握结对编程
    参考文献 https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

    作业1

    每个人针对之前两次作业所写的代码,针对要求,并按照代码规范(风格规范、设计规范)要求评判其他学生的程序,同时进行代码复审(按照代码复审核表 https://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html),要求评价数目不少于8人次,
    评价内容直接放在你被评价的作业后面评论中
    同时另建立一个博客,将你作的评论的截图或者链接,放在博客中,并在你的博客中谈谈自己的总体看法

    作业二

    将程序获得的《红楼梦》与《水浒传》各个章节人物出现次数与全本人物出现总次数,通过柱状图、饼图、表格等形式展现。

    新建分词词典:(省略了词频、词性)

    贾珍
    贾政
    尤氏
    珍大奶奶
    尤二姐
    尤三姐
    惜春
    四姑娘
    贾蓉
    可卿
    秦氏
    蓉大奶奶
    贾母
    史太君
    老祖宗
    老太太
    鸳鸯
    琥珀
    傻大姐
    贾赦
    王夫人
    金钏
    宝玉
    宝二爷
    袭人
    晴雯
    麝月
    秋纹
    碧痕
    春燕
    贾琏
    熙凤
    凤姐
    琏二奶奶
    平儿
    丰儿
    林之孝
    元春
    娘娘
    迎春
    二姑娘
    司棋
    探春
    三姑娘
    李纨
    宫裁
    黛玉
    林姑娘
    林妹妹
    雪雁
    子腾
    湘云
    史大姑娘
    翠缕
    薛姨妈
    姨太太
    宝钗
    宝姐姐
    宝丫头
    宝姑娘
    薛蟠
    金桂
    宝蟾
    香菱
    薛蝌
    岫烟
    宝琴

    因为需要把人物的别称替换成人物的全名,所以新建了一个字典文本,可以直接读取文本,然后用eval()函数转换成dict,转换后的dict:
    {'珍大奶奶':'尤氏','惜春':'贾惜春','四姑娘':'贾惜春','秦氏':'秦可卿','可卿':'秦可卿','蓉大奶奶':'秦可卿','史太君':'贾母','老祖宗':'贾母','老太太':'贾母','宝玉':'贾宝玉','宝二爷':'贾宝玉','熙凤':'王熙凤','凤姐':'王熙凤','琏二奶奶':'王熙凤','之孝':'林之孝','元春':'贾元春','娘娘':'贾元春','二姑娘':'贾迎春','迎春':'贾迎春','探春':'贾探春','三姑娘':'贾探春','宫裁':'李纨','黛玉':'林黛玉','林姑娘':'林黛玉','林妹妹':'林黛玉','子腾':'王子腾','湘云':'史湘云','史大姑娘':'史湘云','姨太太':'薛姨妈','宝姐姐':'薛宝钗','宝丫头':'薛宝钗','宝姑娘':'薛宝钗','金桂':'夏金桂','岫烟':'邢岫烟','宝琴':'薛宝琴'}

    全名为value,别称为key,为什么不反过来全名为key呢?因为全名对应了很多别称,而key不能重复,否则转换成列表时会自动删除重复。

    程序源码

    import jieba
    from wordcloud import WordCloud
    
    def getFile():
        f = open('D:\Python练习\计算机二级教材(python)\小说txt\红楼梦.txt','r',encoding = 'utf-8')
        txt = f.read()
        f.close()
        jieba.load_userdict('D:\Python练习\计算机二级教材(python)\分词词典\红楼梦分词.txt')
        all_words = jieba.lcut_for_search(txt)
        words = []
        for i in all_words:
            if i in keyWord():
                words.append(i)
        return words
    
    def keyWord():
        f = open('D:\Python\分词词典\红楼梦分词.txt','r',encoding = 'utf-8')
        txt = f.read()
        f.close()
        name = txt.split()
        return name
    
    def changeWord(words):
        with open('D:\Python\分词词典\红楼梦替换词典.txt','r',encoding = 'utf-8') as f:
            txt = f.read()
        word_dict = eval(txt)
        keys = []
        values = []
        for k,v in word_dict.items():
            keys.append(k)
            values.append(v)
        for i in words:
            if i in keys:
                words.append(values[keys.index(i)])
        last_word = []
        for ch in words:
            if ch not in keys:
                last_word.append(ch)
        new_words = ' '.join(last_word)
        return last_word,new_words
    
    def wordCount(last_word):
        counts = {}
        for word in last_word:
            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("{0:<10}{1:>5}".format(word,count))
    
    def wordCloud(new_words):
        fontpath = 'STHUPO.TTF'
        wc = WordCloud(font_path = fontpath,
                       width=800,
                       height=600,
                       max_words=50,
                       max_font_size=150,
                       background_color = 'white', #背景板颜色
                       collocations = False,#去除重复单词 
                       ).generate(new_words) 
        wc.to_file('D:\Python\红楼梦人物词云.png')  
    
    def main():
        words = getFile()
        last_word,new_words = changeWord(words)
        wordCount(last_word)
        wordCloud(new_words)
    
    main()
    

    输出前10位人物和出场次数:

    贾宝玉 4050
    贾母 2726
    王熙凤 1774
    林黛玉 1579
    薛宝钗 1248
    袭人 1131
    王夫人 1011
    贾政 927
    贾琏 766
    平儿 683

  • 相关阅读:
    css 负边距 小记
    javascript Array 方法学习
    使用自定义字体 @font-face 小试
    mongodb 基本指令学习 (2)
    mongodb 基本指令学习
    ASP.NET MVC AJAX调用JsonResult方法并返回自定义错误信息
    MVC MVVM Knockout 常遇问题总结
    关于 mvc 中 连字符
    在一般处理程序中,把Form Post过来的表单集合转换成对象 ,仿 MVC post,反射原理
    EF经验分享_jimmyzzc
  • 原文地址:https://www.cnblogs.com/1124-/p/12638944.html
Copyright © 2020-2023  润新知