2024年3月21日发(作者:)
实验一 词频统计
一,模型方法
本词频统计代码的主要方法如下:
(1)本程序的开发环境是VS2010,使用的编程语言是C++。
(2)不采用char*类型的字符串而采用
C++标准程序库中的string类,是因为它和
前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,它集成的
操作函数足以完成我们大多数情况下(甚至是100%)的需要。因此我采用字符串作为数据
处理类型,在程序中主要用来存储 每次从文件流中读取的一段字符串swhole,临时保存
单个词语的sdanci,保存所有不重复单词的sdanciwh,保存抽取出的高频单词的spaixu。
(3)使用
string
类的函数
substr(nstart,nlength)来从字符串中截取指定长度字符串。
(4)使用
string
类的函数find(s)来查找指定字符串。
(5)使用长整型数组count[alength]存储每个单词对应的频度
(6)词频统计思想:每次从语料中读取一段到swhole中,从头开始,首先判断
将要取的四个字节(即两个中文字符)是否包含中文标点,若全是汉字则截取这
四个字节存入sdanci,在sdanciwh中查找是否存在该单词,如果已存在,就将频
度数组count[]相应位加1,如果不存在就将该词添加到
sdanciwh,同时将总单词数
ndanci+1。
(7)本程序采用快速排序算法进行排序,关于针对单词和频度同时进行排序的技巧详见第
三部分系统设计。
(8)利用一个变量来实现系统功能的转换,如定义整型变量dancil来规定程序统计的是单
字,双字,或是三字的词语。
二,系统设计
系统详细的设计流程主要分为两部分,一是读取文本文件并进行单词频度统计。
二是对统计到的单词频度进行处理,筛选出高频词汇并输出到文本中。
(一)单词频度统计的具体流程:
(1)系统初始化:定义各种变量类型,分为全局变量和局部变量,设定程序的
文件输入输出流并初始化。全局变量主要用来设定可以控制程序功能和执行程度
的变量。如alength可以控制程序扫描文档的终止位置,b[maxnum]是用来存储
参与排序的临时数组变量。
(2)每次从文件流中读入一段数据,若这段数据是一个宋词词牌名,则直接从
文件流中读取下一段数据,因为词牌名并不参与词频统计。
(3)针对这一段数据,开始统计词频。比如“犹解嫁东风”这句话,可能的二
字组合是“犹解”“解嫁”“嫁东”“东风”,每次读取两个字,然后先在词库中查
找是否已存在该词,若存在则将频度数组相应位加一,若不存在,则将该词加入
到词库中,并将单词数量加一。注意:这里的词库采用一个字符串来存储所有读
取到的不重复词语。
(4)关于(3)中的标点处理。比如“高频词汇,数组”这个字符串,我们不能
让程序将“汇,”与“,数”识别为一个词语。我的处理是当字符位置变量读取
到“汇”字之前时就自动将该变量移到“数”前,为防止移动后再次遇到标点,
还应做到自动跳过前方的一个标点。这些在处理代码中已十分清楚。
关于单词频度统计的系统流程图(使用亿图制作)如下:
发布评论