中文分词程序说明文档
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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