《C++课程设计》报告

C++课程设计》报告

—— 基于模板的文本特征抽取器程序

、题目说明
1设计目标

为便于实现对文本的处理,经常需要将文本中的字符序列转换成一个特征向量的序列。一般先给出一系列特征模板,如下面给出了三个特征模板:

(a)  Cn (n= -2,-1,0,1,2 )

(b)  CnCn+1( n=-2,-1,0,1)

(c)  C -1C 1

例如,对于给定的字符序列“新华社记者”,需要依次对字符序列中的每一个字符分别应用三个模板抽取相应的特征,当考虑字符“社”时,模板(a)产生的特征是:C-2=新、C-1=华、C0=社、C1=记、C2=者。模板(b)产生的特征是C -2C -1=新华、C -1C 0=华社、C 0C 1=社记、C 1C 2=记者。模板(c)产生的特征是C -1C -1=华记。这样,字符序列中的任意一个字符根据这三个特征模板就对应一个特征向量,而一个字符序列就会对应一个特征向量序列。为进一步便于处理,我们还将根据特征模板所生成的所有特征值存入一个特征字典中,每个特征值将在特征字典会对应一个序号,如特征字典中第五个特征是C -1C 0=华社,则该特征的序号即为5。这样,我们就可以将前面的每一个字符所对应的特征向量转换为一个数字向量(即向量中的每个数字元素表示的是该特征在特征字典中的序号),任意一段文本则可以转换为一个序号向量的序列。

2、功能设计要求

(a) 对一个指定的文本文件,能够根据前述的三个特征模板将文本文件中的字符序列转换为一个相应的特征向量序列(特征向量为序号向量)。

(b) 能够保存和打开特征字典的内容和特征向量序列的内容。

(c) 每个模板均应该对应一个类(class),其中模板(a)和(b)的括号内偏移值要求参数化。

(d) 文本内的字符序列要求以句子为处理单位,每句产生一个特征向量序列。要求每句对应一个实例(Instance)类,整个文本则对应一个实例序列类(InstanceSequence)。

二、设计说明

1、设计概述

(a) 开发平台: Microsoft Visual Studio .NET 2003VC7.0

(b) 参考书籍: C++标准程序库》、《C++ Primer》、《TCPL》等

(c) 开发周期: 五天(构思、雏形、修改、再修改、完善)

2、处理流程

......

(此处详见PDF文档)

三、程序优缺点

1、程序的优点

(a) 支持中英文混合文本,和超长文章(最好不要超过一千万汉字)。

(b) 支持对多个符号进行分句处理,目前可根据句号“。”、问号“?”、感叹号“!”分句,并可随意添加更多需要的分句符号。

(c) 对特征模版定义了基类,且当前的ABC三模版对所有值全部参数化,使今后添加其它模版更加简便。

(d) 可对SentenceIns独立于本程序实例化,极大地方便程序今后的复用。

(e) 程序做到精简,所有代码总和仅9K

2、遇到的问题

程序编写过程中,大约四分之三的时间,都用来解决测试程序时出现各种边缘状态,通过验证大量文本,对90%以上可能出现的意外情况都有所考虑。

现举例说明分句函数调试中,出现的几个情况:

①测试某段文本,当出现句子“真便宜!)这令”后,出现严重乱码错误。经过仔细排查,发现是分句函数引起的问题,原因是“!”的后一个字节,和“)”的前一个字节,正好是句号“。”的两个字节,由此导致错误分句。查出此错误后,顺利解决此问题。

②测试某段文本,检查文本向量序列时,发现其句数,与真实情况不符。经过排查,程序某处,pos值应该为-1才能应对所有可能出现的情况。

3、存在的缺陷

(a) 无法对双符号结尾特殊情况正确分句:例一:“你真棒!”。正确分句应该是在“后引号”之后,而目前程序会在感叹号后分句。例二:“你真是!?”,正确的应该是在“问号”之后,而目前的程序会对“感叹号”、“问号”进行两次分句。

(b) 程序能对全中文、中英文混合的文本进行处理,但还无法对全英文的文本有效处理。

(c) 程序执行效率欠低,对超过30万字的文本处理显得非常吃力。

六、代码下载

     本程序代码下载地址:http://i1984.com/cpluspluscourse_05.rar

   本报告PDF版式下载地址:http://i1984.com/cpluspluscourse_05.pdf

 

 

 

   

清翔兔   

2006 220

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
课程设计题目: 1、自拟题目的原则: (1)设计的课题能够体现面向对象基本思想:类、继承、多态性、模板等。 (2)根据自己对面向对象基本概念、原理和机制的理解,自拟题目和设计内容。 (3)选题的难易程度要适当,以在规定时间内经过努力可以完成为宜。 2、参考选题: 参考选题多为管理系统类,大家也可自拟游戏类或数学计算等其他类型题目,只要能体现oop思想。 (1)复数计算器 运用C++语言描述数据类、复数类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立数据类、复数类 2)数据、复数信息的初始化 3)复数信息的输出 4)将复数信息保存为文件 5)求复数的绝对值 6)实现复数的加、减、乘、除、乘方、自加、自减等运算 (2)字符串处理系统 运用C++语言描述数据类、字符串类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立数据类、字符串类 2)数据、字符串信息的初始化 3)字符串信息的输出 4)将字符串信息保存为文件 5)获得字符串长度 6)在字符串中查找一个字符 7)在字符串中查找另外一个字符串 8)比较字符串 (3)学生信息管理 运用C++语言描述学生类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值