《C++课程设计》报告

C++课程设计》报告

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

、题目说明
1设计目标

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

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

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

(c)  C-1C1

例如,对于给定的字符序列“新华社记者”,需要依次对字符序列中的每一个字符分别应用三个模板抽取相应的特征,当考虑字符“社”时,模板(a)产生的特征是:C-2=新、C-1=华、C0=社、C1=记、C2=者。模板(b)产生的特征是C-2C-1=新华、C-1C0=华社、C0C1=社记、C1C2=记者。模板(c)产生的特征是C-1C-1=华记。这样,字符序列中的任意一个字符根据这三个特征模板就对应一个特征向量,而一个字符序列就会对应一个特征向量序列。为进一步便于处理,我们还将根据特征模板所生成的所有特征值存入一个特征字典中,每个特征值将在特征字典会对应一个序号,如特征字典中第五个特征是C-1C0=华社,则该特征的序号即为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

 

 

 

 

 

清翔兔   

2006220

阅读更多
个人分类: C++学习(原创)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭