分析一套源代码的代码规范和风格并讨论如何改进优化代码
---恢复内容开始---
我的工程实践课题为“针对特定领域设计一套摘要自动生成系统”,我选取了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)注释往往比没有注释更糟糕
---恢复内容结束---