Bean_sprout的第一次编程作业
2024-09-08 18:46:42
一、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 思路
敏感词出现的可能有很多种可能,如falungong、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孩']
三、心得体会
- 在编码前一定要计划好程序结构,不然之后的代码修改就非常难受,还不一定能够解决,麻了麻了。结合要去一定要多看,多读,多参考,这样才能找到进行更好的选择,选择更加合适自己的算法。虽然这个过程非常煎熬,做出来的东西也不怎么样,但是在这个过程中学习到了挺东西,勉强控制了这个骂人的心。
最新文章
- 【Junit 报错】No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
- 关于iBatis.NET连接各数据库时提示没找到数据库驱动的依赖文件
- Communication - 02.Call U
- MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程
- node.js创建服务器报错
- SqlParameter[] 添加
- 【Android 界面效果34】Android里Service的bindService()和startService()混合使用深入分析
- js中call和apply的用法和区别
- Ubuntu配置Android编译环境
- Android ViewPager实现图片标题轮播和点击事件
- X-Windows桌面
- 使用location.href跳转页面在火狐浏览器中报错404
- AtCoder Grand Contest 027 (AGC017) D - Modulo Matrix 构造
- [LeetCode] Reaching Points 到达指定点
- 转载:揪出MySQL磁盘消耗迅猛的真凶
- 云栖大会day2总结 上午
- file上传图片,base64转换、压缩图片、预览图片、将图片旋转到正确的角度
- Lambda的前世今生
- Oracle的安装与配置
- CDQZ.OPENJUDGE DataStructure22