一.项目信息
| 课程 | <https: edu.cnblogs.com="" campus="" gdgy="" cse2021=""> |
| --------|------------------------------- ---------------------------- |
| 作业要求| <https: edu.cnblogs.com="" campus="" gdgy="" cse2021="" homework="" 12254=""> |
| 作业目标| <熟悉并掌握个人项目开发流程> |
|github|https://github.com/CS-200225/CS-200225|
二.个人开发时间估算
PSP2.1 | 预计耗时 | 实际耗时 |
---|---|---|
Planning | 20 | 20 |
Estimate | 20 | 90 |
Development | 200 | 200 |
Analysis | 15 | 60 |
Design Spec | 30 | 30 |
Design Review | 10 | 10 |
Design | 40 | 40 |
Coding | 40 | 60 |
Code Review | 30 | 30 |
Test | 15 | 10 |
Reporting | 60 | 40 |
Test Repor | 20 | 40 |
Size Measurement | 10 | 10 |
Postmortem & Process Improvement Plan | 10 | 20 |
Summary | 505 | 660 |
三.算法、模块接口设计与实现
1.jieba库
(1)jieba库概述
jieba是优秀的中文分词第三方库
- 中文文本需要通过分词获得单个的词语
- jieba是优秀的中文分词第三方库,需要额外安装
- jieba库提供三种分词模式,最简单只需掌握一个函数
(2)jieba分词的原理
Jieba分词依靠中文词库
- 利用一个中文词库,确定汉字之间的关联概率
- 汉字间概率大的组成词组,形成分词结果
- 除了分词,用户还可以添加自定义的词组
(3)jieba分词的算法
一、基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
1. 根据dict.txt生成trie树。字典在生成trie树的同时, 也把每个词的出现次数转换为了频率;
2. 对待分词句子, 根据dict.txt生成的trie树, 生成DAG, 实际上通俗的说, 就是对待分词句子, 根据给定的词典进行查词典操作, 生成几种可能的句子切分。jieba的作者在DAG中记录的是句子中某个词的开始位 置, 从0到n-1(n为句子的长度), 每个开始位置作为字典的键, value是个list, 其中保存了可能的词语的结束位置(通过查字典得到词, 开始位置+词语的长度得到结束位置)注:所以可以联想到,jieba支持全模 式分词,能把句子中所有的可以成词的词语都扫描出来
例如:{0:[1,2,3]} 这样一个简单的DAG, 就是表示0位置开始, 在1,2,3位置都是词, 就是说0~1, 0~2,0~3这三个起始位置之间的字符, 在dict.txt中是词语.可看示例切分词图。
2.Jaccard相似度算法
accard index, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号 J(A,B) 表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。
3.流程图
4.代码如下
四.单元测试
五.性能测试
六.总结与反思
本次项目是我人生中第一次做项目,不懂的地方有太多太多,做起来的时候遇到的问题比想象中的多得多,最后在一个个解决他们的过程中有一种无与伦比的成就感,这次使用的是python,相比于java和c++简单了很多,这一次我也是大概了解了做项目的流程和步骤,第一次做项目做的不够好,下次我会把项目做得更好一些,每次进步一些。