中文分词程序说明文档

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中文分词程序说明文档

北京师范大学计算机系03级03281047 刘川

程序说明:

本程序根据一个中文字库对所给的文章进行分词。采用的算法是正向最大匹配算法和反向最大匹配算法。可以实现屏幕分词和文件分词两项功能。

开发环境:

Visual Studio 6.0中Win32 SDK平台,C语言。

界面介绍:

主界面

文件分词对话框

文件下有“打开”,“保存”,“退出”三个选项;

打开:打开某一文档,默认后缀是txt文本文档。

保存:保存编辑控件窗口里的内容到文件。

退出:退出分词程序。

编辑下有“撤销”,“剪贴”,“复制”,“粘贴”,“删除”,“全部选定”等一些文件编辑常用选项;

分词下有“屏幕分词”,“文件分词”两个选项;

屏幕分词:对编辑控件窗口内的内容进行分词,并将结果显示到屏幕上。

文件分词:输入原文件和目的文件名,进行文件分词,结果不在屏幕中显示。

算法选择下“正向最大匹配算法”,“反向最大匹配算法”两个选项;

正向最大匹配算法:用正向最大匹配算法进行文件分词或是屏幕分词,是默认选项。

反向最大匹配算法:用反向最大匹配算法进行文件分词或是屏幕分词。

帮助下是作者的一些信息。

算法介绍:

对字典用库函数sort()进行快排,查找时使用二分查找。

正向最大匹配算法:因为词典里的词最长是18个汉字,即36个字节,所以从文章最开始取36个字节,进行匹配,如果成功,则输出到结果数组里,重新读入36个字节进行判断;

如果不成功,将字节数减1,继续进行匹配,如果字节数减少到2,进行判断,若第1个字节小于0,说明这两个字节是不能识别的汉字,输入到结果数组里,如果不是,则说明是第一个字节西文标点或数字等,将其输入到结果数组里,剩余继续匹配。

以上这个过程一直进行到分析完毕,将识别符与与识别符之间、识别符与与非识别符之间用分隔符“|”分开,标志位mask用来标记识别符与非识别符。

反向最大匹配算法:与正向最大匹配算法类似,只是从文章的尾部开始进行分析。一直进行到文章头部结束。

由于所采用的屏幕控件所能容纳的大小有限,最多为65535个字节,所以,考虑到极端情况,为了使分词结果能在屏幕上完全的显示出来,本程序只允许打开字节数在32768以下的文章,如果超出,给出警告信息,同时只显示其前面32768个字节。

而文件分词没有屏幕控件的限制,可以进行无限大小的分词,正向分词结果后缀默认为源文件+_pos, 反向分词结果后缀默认为源文件+_neg。

一些改进:

排序使用的系统库函数sort(),快排算法,排序的效率很高。

考虑到分词结果界面的美观性,非识别符之间不加分隔符,另外,数字是在词典中的,但本程序把数字作为非识别符,比如12345当作是一个词,这样做也是符合大多数的情况的。

考虑到实际应用字典文件和应用程序要放在一起,有些不方便,于是本程序将字典文件作成了wordlist.cpp文件(用Word排版),这样把字典和程序结合在了一起,方便了使用。

不足之处:

本程序采用的窗口为Win32 SDK平台自带的编辑控件,功能有限,一些控制字符在屏幕上显示不出来,但保存到文件时又能显示正确。

本程序的算法上没用经过仔细斟酌,反向分词时移动数组挺多,在处理大文件,如2、3M(三、四十万级文本)的文件时,显得比较慢。

由于本人第一次用Win32 SDK平台编程,对Windows编程比较陌生,花了大量时间学习和向同学请教,整个程序的界面不是很美观。

这个程序历时近1个月,其间花了很多心血,由于快到期末,时间很紧,本人还有英语考试,故未能继续美化界面和设计算法,只实现了正向和反向最大匹配分词两种算法,未能对歧义性等问题进行深一步的研究,整个程序也肯定会有不足之处,请老师谅解。

20005-11-30

22:16

相关文档
最新文档