第一次个人编程作业
|
这个作业属于哪个课程 |
<https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering> |
|
这个作业要求在哪里 |
<https://edu.cnblogs.com/campus/gdgy/InformationSecurity1912-Softwareengineering/homework/12146> |
|
这个作业的目标 |
完成个人编程作业编码部分,设计出一个查重的程序
|
1.代码链接
https://github.com/XXisoso/3219005452

2.PSP表格
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
10 |
10 |
|
· Estimate |
· 估计这个任务需要多少时间 |
10 |
10 |
|
Development |
开发 |
480 |
690 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
300 |
420 |
|
· Design Spec |
· 生成设计文档 |
20 |
30 |
|
· Design Review |
· 设计复审 |
20 |
30 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
30 |
|
· Design |
· 具体设计 |
20 |
60 |
|
· Coding |
· 具体编码 |
60 |
60 |
|
· Code Review |
· 代码复审 |
20 |
20 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
40 |
|
Reporting |
报告 |
60 |
80 |
|
· Test Repor |
· 测试报告 |
20 |
30 |
|
· Size Measurement |
· 计算工作量 |
20 |
20 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
30 |
|
|
· 合计 |
550 |
780 |
3.计算模块接口的设计与实现过程
算法实现所依赖的第三方库
- jieba.0.42.1
支持三种分词模式:
精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
实现思路
- 首先通过jieba.cut函数将文章分词,然后分别统计各个词汇的出现的次数,然后再依据网络上下载的中文停用词库对分词进行关键词筛选并赋予权重,此处权重标准为:预测主题能力越强,权重就越大,反之,权重就越小。最后通过加权算出相似度。



使用的算法
- TF-IDF(term frequency–inverse document frequency,词频-逆向文件频率)是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
TF-IDF的主要思想是:如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
相关接口
提取主要关键字

计算权重

计算相似度

测试代码


结果及运行时间

遇到的问题
-
文档编码问题
在使用中文停用文档的时候,编码问题,由于网络上下载的文件txt默认的不是utf8编码,导致生成了错误:
(错误的截图)
解决方案:将该文档重新另存为utf8编码即可 -
读取文件问题
由于是刚开始使用python,除了出现一些语法错误外,相关的一些函数也不是特别熟悉,导致刚开始使用codecs.open函数时,并没有在编码部分的参数写成encoding="utf-8",而是普通的"uft-8",导致函数报错。 -
编程初期
本来我是打算用Java写这个程序(下图),但是刚开始写了一点之后感觉没有思绪,于是我想去网上学习学习别人的算法和例子,然后发现用python写好像更容易一点,于是我开始临时自学python,因为时间比较赶,我对python也是刚入手,导致这次的程序还是有很多不尽人意的地方

4.总结
不足之处
- 接口没有分类明确
我花了大量篇幅在main文件,我应该将各种接口分类好,这样看起来会更加美观,以后使用起来也会更加方便 - 对于python其实还有很多函数也没有理解好
我还没有好好巩固好这个知识,这次我是看着csdn网站别人的操作和算法才最后勉强理解好这个项目,这只能说明我现在能力还不够,还需要继续努力
收获
- 新学习了python语言的很多知识
- 编程实践能力有了极大的提升
- 在网上学习了很多有趣的算法和例子
- 对自我认知有了更清晰的认识
- 对做一个项目的整个过程有了一个更清晰的认知

浙公网安备 33010602011771号