Bean_sprout的第一次编程作业

第一次编程作业

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 120
· Estimate · 估计这个任务需要多少时间 10 5
Development 开发
· Analysis · 需求分析 (包括学习新技术) 240 300
· Design Spec · 生成设计文档
· Design Review · 设计复审 30 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 30
· Design · 具体设计 240 240
· Coding · 具体编码 600 800
· Code Review · 代码复审 30 60
· Test · 测试(自我测试,修改代码,提交修改) 120 120
Reporting 报告
· Test Repor · 测试报告 30 30
· Size Measurement · 计算工作量 30 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
· 合计 1430 2765

二、计算机模块接口

2.1 计算模块接口的设计与实现过程

2.1.1 思路

  • 敏感词出现的可能有很多种可能,如***、T M等针对这个情况,我觉得建立一个汉字结合拼音的字典树可以很方便的进行查找,但是在后面的进程出现了一个问题,我不是很解决。

  • 我的想法就是讲文本内容读出然后进行一个一个的字符进行读写,然后进入树中搜索,然后碰到数字、字符等影响判断的就进行跳过,在检测长度与树中对应长度相等时就是说明查找得到敏感词。

  • 对于字的拆分我只需要将词库中的加入树中即可。

2.1.2 代码段

  • 设计有三个类一个用文本处理,一个类作为单纯的保存节点,一个类树类进行建树与进行敏感词的搜索

  • 文本处理没有什么感觉主要就是进行读与写

  • 主要就是对建树的操作

	# 传入敏感词
	def P_Work(self, phrase_store):
        pass
    # 将敏感词转换为对应的矩阵便于后续插入字典树中
    def str2matrix(self, phrase):
        pass
    # 递归建树,获取每一行的
    def insertKey(self, layer: int):
       	pass
    # 递归建树将汉字、拼音以及拼音首字母合在一起,例如"汉字", ”汉Z",...
    def recursionInsertKey(self, row_now: int, layer: int, phrase: str):
        pass
     # 将所有模式串插入树中
    def insert(self, word, source: str):
        pass
    # 传入文本一段一段的文字,搜索每一段的敏感词
    def search(self, s: str, line: int):
        pass
    # 利用节点存储的字符长度信息,获取敏感词及其在搜索串内的坐标
    def matched(self, node, s, cur_pos, count: int, line: int):
  • 因为我是对每一段中逐个字符开始搜索,然后我在谐音处理的时候发生很多的不愉快,因为将文字转为拼音的时候会出现很多个字符,不可以通过原有函数进行搜索,不想改变树的结构,便考虑再开一个函数进行鉴别,奈何挣扎失败。

2.1.3计算模块接口部分的性能改进

  • 目前还没有什么想法希望可以大家帮助。

2.1.4计算模块部分单元测试展示

if __name__ == "__main__":    
    tmp = Trie()    
    tmp.P_Work(["邪教"])    
    tmp.search(s="你好我是邪教,这个也是x教,这个还是邪 教", line=1)
    print(tmp.line_result)
    print(tmp.word_result)
    print(tmp.source_result)
    结果:
    [1, 1, 1]
    ['邪教', '邪教', '邪教']
    ['邪教', 'x教', '邪 教']
if __name__ == "__main__":    
    tmp = Trie()    
    tmp.P_Work(["邪教","小屁孩"])    
    tmp.search(s="你好我是邪教,这个也是x教,这个还是邪 教,大家好这是小屁123孩", line=1)    
    tmp.search(s="xiao屁孩,大家好这是小屁1234孩", line=2)    
    print(tmp.line_result)    
    print(tmp.word_result)    
    print(tmp.source_result)
    结果:
    [1, 1, 1, 1, 2, 2]
    ['邪教', '邪教', '邪教', '小屁孩', '小屁孩', '小屁孩']
    ['邪教', 'x教', '邪 教', '小屁123孩', 'xiao屁孩', '小屁1234孩']

三、心得体会

  • 在编码前一定要计划好程序结构,不然之后的代码修改就非常难受,还不一定能够解决,麻了麻了。结合要去一定要多看,多读,多参考,这样才能找到进行更好的选择,选择更加合适自己的算法。虽然这个过程非常煎熬,做出来的东西也不怎么样,但是在这个过程中学习到了挺东西,勉强控制了这个骂人的心。
posted @ 2021-09-16 19:19  Bean_sprout  阅读(63)  评论(0)    收藏  举报