• 第一次个人编程作业


    Github链接

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

    流程图

    实现过程

    采用相似度度量来计算两篇文本的相似程度,该值越小,说明文本的相似度越小,反之则说明相似度越大。
    余弦相似度是相似度度量的其中一种。假定a和b是两个n维向量,a是(x1, x2, ..., xn),b是 (y1, y2, ..., yn),a与b的夹角的余弦值越接近1,说明夹角越接近0度,即两个向量越相似,称之为"余弦相似性"。余弦值越大,说明两文本越相似。
    样例:
    string str1 = "卢森堡商务部就此事件可能对印度大使馆造成的负面影响感到抱歉。",
    string str2 = "此事件对印度大使馆造成了一定的负面影响,卢森堡外交部感到抱歉并公开道歉。"
    1、首先进行IK分词
    str1:卢森堡/商务部/就此/此事/事件/可能/能对/印度大使馆/造成/负面影响/感到/抱歉
    str2:此事/事件/对/印度大使馆/造成了/一定的/负面影响/卢森堡/商务部/感到/抱歉/公开/开道/道歉
    2、列出两个文本中所有不重复的词的个数为18个
    3、得到str1,str2的向量。所有词18个,每个句子分出的词在这18个词中,则为1,不在则为0,如“卢森堡”,str1中有,为1,str2中有,为1。而“一定的”str1中没有,为0,str2中有,为1。所以分词后的句子转化为如下对应的数值向量X,Y。
    X = (1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0)
    Y = (0,1,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,1)
    4、根据公式,计算两数值向量的余弦值为0.667135。该值即可以用来刻画这两篇文本的相似程度,约为66.7%。

    2、计算模块接口部分的性能测试



    程序主要执行的部分在main函数中,这与我们的程序本身和预期相符。

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


    部分单元测试代码:

    namespace UnitTest1
    {
    	TEST_CLASS(UnitTest1)
    	{
    	public:
    		
    		TEST_METHOD(TestMethod1)
    		{
    				//文件名
    				char fn1[] = "orig.txt";
    				char * fn = fn1;
    				string str1;
    				str1 = file_string(fn);
    				char fn2[] = "orig_0.8_mix.txt";
    				char * fnn = fn2;
    				string str2;
    				str2 = file_string(fnn);
    				ofstream fout;
    				fout.open("output.txt");
    				fout << cosine::txtcompare(str1, str2);
    				fout.close();
    				
    		}
    	};
    }
    

    4、计算模块部分异常处理说明

    所给出的文件不存在或为空时:

    int main()
    {
    	//文件名
    	char fn1[] = "orig1.txt";//没有该文件
    	char * fn = fn1;
    	string str1;
    	str1 = file_string(fn);
    	char fn2[] = "orig_0.8_mix.txt";
    	char * fnn = fn2;
    	string str2;
    	str2 = file_string(fnn);
    	ofstream fout;
    	fout.open("output.txt");
    	fout << cosine::txtcompare(str1, str2);
    	fout.close();
    	system("pause");
    }
    

    输出结果如下:

    5、PSP表格

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

    6、总结

    作为一个菜鸡,本次个人编程作为对我是一个巨大的挑战。看到作业的时候整个人是懵逼的。作业的要求中的各种内容都是第一次接触。我花了大量的时间去搜索相关的知识点和一些工具的使用,说来惭愧,VS2017我还是头一回使用,也有很多不熟悉的地方。关于github的操作还很生疏,之后还需要在不断的实践中加以巩固。另,自己掌握的编程语言和算法实在太有限,给我带来了很多阻碍,希望在以后的学习中能够不断深入学习和加强吧。

  • 相关阅读:
    NYOJ 123士兵杀敌(四)(树状数组)(插线问点)
    NYOJ 634万里挑一(优先队列)
    NYOJ 119士兵杀敌(三)(RMQ问题)(ST表)
    NYOJ 116士兵杀敌(二)(树状数组)(插点问线)
    迁移anaconda导致原来jupyter notebook无法使用
    Anaconda安装
    pandas注意点
    群与双线性映射
    numpy.cov() 协方差计算方法
    Annoy模型
  • 原文地址:https://www.cnblogs.com/yuqiao1120/p/13682341.html
Copyright © 2020-2023  润新知