简单论文查重项目

一.项目信息


| 课程 | <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.流程图
第一次个人项目_github

4.代码如下
第一次个人项目_第三方库_02

第一次个人项目_中文分词_03

四.单元测试
第一次个人项目_中文分词_04
第一次个人项目_trie树_05

五.性能测试
第一次个人项目_github_06
六.总结与反思
本次项目是我人生中第一次做项目,不懂的地方有太多太多,做起来的时候遇到的问题比想象中的多得多,最后在一个个解决他们的过程中有一种无与伦比的成就感,这次使用的是python,相比于java和c++简单了很多,这一次我也是大概了解了做项目的流程和步骤,第一次做项目做的不够好,下次我会把项目做得更好一些,每次进步一些。