分析一套源代码的代码规范和风格并讨论如何改进优化代码

---恢复内容开始---

我的工程实践课题为“针对特定领域设计一套摘要自动生成系统”,我选取了github上一个同类型项目来分析代码规范。

开源项目链接:https://github.com/physi-cs/TextRank4ZH

1.(1)目录结构

example给出了两个示例应用程序

text为一个二级目录

 

 分别给出了整个程序测试用的文章与程序内各函数的测试函数

textrank4zh为一个二级目录

 

 包含项目依赖的主要函数,分别实现了词的权重迭代,句向量的权重排序等功能

 

 

HISTORY.md文件记录了此工程项目的版本更新内容与接口变化

LINCESE文件声明了其他人使用此开源项目的权限

README.md说明了此工程的安装方法,卸载方法,其依赖的库,对不同python版本的兼容性,简单介绍了textrank算法的工作原理, 并对关键词提取,关键短语和摘要生成分别进行了介绍,给出示例代码和运行结果,以及API

 

 (2)文件名/函数名/类名/变量名命名风格

 


def sort_words(vertex_source, edge_source, window = 2, pagerank_config = {'alpha': 0.85,}):
  sorted_words = [] word_index = {} index_word = {} _vertex_source = vertex_source _edge_source = edge_source words_number = 0

  函数名变量名都遵循了命名代表含义,且下划线分隔语义使得关键信息一目了然。

 (3)接口定义规范

    def analyze(self, text, 
                window = 2, 
                lower = False,
                vertex_source = 'all_filters',
                edge_source = 'no_stop_words',
                pagerank_config = {'alpha': 0.85,}):
        """分析文本

        Keyword arguments:
        text       --  文本内容,字符串。
        window     --  窗口大小,int,用来构造单词之间的边。默认值为2。
        lower      --  是否将文本转换为小写。默认为False。
        vertex_source   --  选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点。
                            默认值为`'all_filters'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。关键词也来自`vertex_source`。
        edge_source     --  选择使用words_no_filter, words_no_stop_words, words_all_filters中的哪一个来构造pagerank对应的图中的节点之间的边。
                            默认值为`'no_stop_words'`,可选值为`'no_filter', 'no_stop_words', 'all_filters'`。边的构造要结合`window`参数。
        """
        
        # self.text = util.as_text(text)

  以对关键词分析的类中的一个成员函数为例,函数封装了功能实现,调用时给出指定参数即可,部分参数给出默认参数,缺省时可按默认值传入

2.符合代码规范和风格一般要求之处

注释规范清楚,详细记录了函数功能,版本更新的改动

变量名函数名等名称能准确体现其含义

不同类函数分成多个文件,使用时在主函数import

 

3.同类编程语言或项目在代码规范和风格的一般要求

 

①标识符应当直观且可以拼读,下划线用来分隔变量名字中的作用域标注和变量的语义,可望文知意。

②代码不使用Tab而使用4个空格,在VS2005和其他的一些编辑工具中都可以定义Tab键扩展成为几个空格键。不用 Tab键的理由是Tab键在不同的情况下会显示不同的长度。

③不要把不同的变量定义在一行上

④所有的类型/类/函数名都用Pascal形式(所有单词的第一个字母都大写),所有的变量都用Camel形式(第一个单词全部小写,随后单词随Pascal格式)

⑤注释是用来解释程序做什么(What),为什么这样做(Why),以及要特别注意的地方的。复杂的注释应该放在函数头,很多函数头的注释都是解释参数的类型等的,如果程序正文已经能够说明参数的类型in/out等,就不要重复。一个误导的(Misleading)注释往往比没有注释更糟糕

 

---恢复内容结束---

posted @ 2019-10-11 19:20  Ai_vril  阅读(240)  评论(0编辑  收藏  举报