软件工程之词频统计

代码: https://github.com/jackroos/word_frequency

how you collaborate: working separately?  pair programming? VS Live Share? other style?

首先我们一起讨论了代码结构,如何用python实现来更快的进行词频统计。然后是分工合作,队友负责python实现,我负责代码复审、单元测试、回归测试,同时我们采用了结对编程的方式对代码的瓶颈一起进行了分析和优化。

how do you discuss design guideline, coding convention and reach agreement?

我们在设计代码的模块的时候,遵循每个模块的功能相对独立的原则,代码风格都用pycharm, 4个空格缩进,函数名能尽量看出功能等等。因此,根据这个规则,我们一起设计了各个模块的功能和接口

  • freq_dict.py : 所有freq类的父类,实现topk 以及文件递归路径等功能
  • charater_freq_dict.py: 实现字母频率统计
  • word_freq_dict.py: 词频统计,指称stop word
  • phrase_freq_dict.py: 短语频率统计,支持stop word和动词原形变化
  • preprocessing.py: 对读入文件各种parse到我们想要的格式,比如word list,过滤stop-word等等

how did the two of you aim high and try to deliver the optimal result with your own time constraints?  is this the best your could do?  what prevent you from doing your best?

在项目开始之前,要充分的讨论,然后各自发挥强项,感觉效率还是很高的,另外从中我感觉自己从队友的设计什么的学到了挺多的。代码因为是python所以很多地方不是很好优化,我们主要从多进程来优化,如果有更多的时间,可能有进一步的优化,但我感觉优化的空间不大。

list 3 strengths  and 1 weak area of your partner

对python很熟悉,接口模块设计的比较清晰,思路很清楚;写代码比较粗心

how do you use profile tools to find the performance bottleneck and improve speed? show some screenshots of your analysis

在一开始的时候我们就打算采用多进程来并行处理多个文件,在代码写好之后,用cProfile和gprofdot进行性能测试分析,我们发现处理多个文件的时候,代码似乎并没有并行起来:

我们发现时间主要花在进程等待获取锁上面,python多进程会把共享的变量object_lists每个都复制一份,这样每次复制一份parse后的sentence list会花费很多时间,因此我们把parse_raw_text_to_sentences移到函数内,在函数内计算sentence list, 参数复制的是 text_path_list, 快了很多。

修改之前:

    def _get_freq_dict_for_text(self, index):

        cnt = Counter()
        object_list = self.object_lists[index]

修改之后:

    def _get_freq_dict_for_text(self, index):

        cnt = Counter()
        object_list = parse_raw_text_to_sentences(self.text_path_list[index])

时间提升了一半:

单元测试/回归测试

见github

原文地址:https://www.cnblogs.com/mttblog/p/9898062.html

时间: 2024-10-16 22:13:38

软件工程之词频统计的相关文章

软件工程第二次作业 词频统计

1.项目名称:词频统计 2.代码地址:https://coding.net/u/songyuu/p/python_wf/git 3.代码如下: 1 import os 2 import re 3 import collections 4 #print(os.getcwd()) #显示wf.py路径 5 #print(os.listdir())#显示目录下的文件 6 file_name=input("wf ") 7 if not os.path.isfile(file_name+'.tx

软件工程第二周作业----词频统计

实验要求: 统计文件中出现过的单词数目,并按数目和字典顺序排序,将结果输出到指定文件中.需要统计单词的文件名从命令行输入. 实验分工: 代码编写&测试:张文杰 博客编写:朱昱青 实验思路: 1.在主函数中打开输入和输出文件,获得文件的指针,然后以指针为参数调用count()函数进行词频统计. 2.在count()函数中,利用while循环,不断从文件中分离出可能是单词的字符串(也就是被分隔符隔开的连续字母和数字),然后进一步判断该字符串是否是一个单词.如果是,再查看这个单词是否出现过,如果出现过

第一周 词频统计

这是我的第一篇博客,说起来有些惭愧,作为一个程序猿竟然至今没写过一篇技术博客.在这里,先向读到这篇博客的读者致歉,原谅我粗糙的表达能力. 在读研究生之前,“程序员”对我来说,只是三个字的组合,我并不了解程序员的世界,也不知道一个程序员的基本素养(这个词是从亮哥那听来的,但是是从杨老师那了解的).在这里,我要向我的导师--杨贵福老师表示深深的感谢,他教会了我许多作为一个程序员应有的工作的态度以及责任. 接下来谈谈我第一次上我导师的课的感受.我现在是研二,两年来我从没听过我的导师上的课.上周五是我第

201671030102陈飞 词频统计软件项目报告

我的GitHub仓库 链接 1需求分析 根据实验二 软件工程个人项目分析 1.程序可读入文本文件,且文本文件大小不定,文件路径为相对路径 2.指定单词词频统计功能,可多个输入并且输出柱状图 3.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt. 4.可按文本中词频数降序显示前k个单词的词频及单词 5.使用java开发,且jdk环境为jdk8u161,jre环境为jre8u161 2功能设计 ·基本功能: 1.指定单词词频统计功能 2.高频词统计功能 3.

201671010454词频统计软件项目报告

一.课程名称:2016级计算机科学与工程学院软件工程(西北师范大学) 二.课程要求:实验二 软件工程个人项目 三.实验目标: (1)掌握软件项目个人开发流程. (2)掌握Github上发布软件项目的操作方法. 四.实验内容: (一)需求分析 程序可读入任意英文文本文件,改文件中英文词数大于等于1个,且能读取容纳英文原版<哈利波特>10万词以上的文章. 指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. 高

201671010441徐浩杰 词频统计软件项目报告

实验二.软件工程个人项目 一.需求分析 尝试按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发.软件基本功能要求如下: •程序可读入任意英文文本文件,该文件中英文词数大于等于1个. •程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. •指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. •高频词统计功能:用户从键盘输入高

201671010410 冯婷秀 词频统计软件项目报告

一.需求分析 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. 4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词. 5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件res

201671010431+词频统计软件项目报告

一.需求分析 按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发.软件基本功能要求如下: 1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 2.程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图. 4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行

201671010416 焦少梅 实验二 词频统计项目

实验二 软件工程个人项目 实验目的与要求 掌握软件项目开发流程 掌握Github上发布软件项目的操作方法. 实验内容和步骤 任务1: 需求分析: 尝试按照<构建之法>第2章中2.3所述PSP流程,使用JAVA编程语言,独立完成一个英文文本词频统计的软件开发 程序可读入任意英文文本文件,该文件中英文词数大于等于1个. 程序需要很壮健,能读取容纳英文原版<哈利波特>10万词以上的文章. 指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词运行程序的统计功能可显