zoukankan      html  css  js  c++  java
  • 计算机与软件工程 作业四

    作业要求 第四周作业
    代码规范 课程目标
    作业帮助 了解并遵守代码规范复审 掌握结对编程
    参考文献 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

  • 相关阅读:
    编译问题----宏定义一定显示未定义
    低级错误记录-程序更新后,没有显示想要的结果
    云编译的优点-普及云编译
    telecommunication communication 的区别
    学习EPC架构演进历史知识
    EOF与feof的区别
    epoll惊群问题-解决思路
    epoll多路复用机制的学习
    进程组与组长进程
    记录博客开始
  • 原文地址:https://www.cnblogs.com/1124-/p/12638944.html
Copyright © 2011-2022 走看看