1、分词系统工程报告课程:自然语言理解姓名:王佳淼学号:2011914班级:信息安全 11-1日期:2013-11-2实验一 宋词字统计一研究背景本实验所涉及的研究背景是利用计算机来“鉴赏”宋词。主要针对宋词这种特殊的汉语诗歌体裁,开展了有关自动生成算法及其实现方法的探索性研究。通过对大量语料的学习,来自动生成宋词。由于宋词自身的特性,能够在经过大量预料学习后,利用在宋词当中出现频率较高的词语或者单字排列组合来生成宋词。二实验所采用的开发平台及语言工具实验在 WIN7 的环境下利用 VC+编程。三系统设计(1)算法基本思想从文本中字符,判断是否为中文字符(全角字符) ,若为全角字符则根据需要继续读
2、取,即读取两个或三个字。利用 map 容器来存储统计结果。(2)流程图(3)代码字统计#include #include #include #include using namespace std; /宋词的统计void display_map(map ofstream ofs(“c:fenciout2.txt“); int main() cout wmap; /统计双字的while (ifs)while(ifs.peek()=n) ifs.get();while(ifs.peek()= ) ifs.get();while(!ifs.peek()ifs.get(a,3, );if(a0whil
3、e(ifs.peek()=n) continue;while(ifs.peek()= ) continue;while(!ifs.peek()ifs.get(a,3, );if(a0if(str1!=“,“wmapszTemp+;if(ifs.peek()!=nifs.close();/三字ifstream ifs1(szInputFileName);while (ifs1)while(ifs1.peek()=n) ifs1.get();while(ifs1.peek()= ) ifs1.get();while(!ifs1.peek()ifs1.get(a,3, );if(a0while(if
4、s1.peek()=n) continue;while(ifs1.peek()= ) continue;while(!ifs1.peek()ifs1.get(a,3, );if(a0else continue;while(ifs1.peek()=n) continue;while(ifs1.peek()= ) continue;while(!ifs1.peek()ifs1.get(a,3, );if(a0else continue;if(str1!=“,“wmapszTemp+;if(ifs1.peek()!=nifs1.close();/单字ifstream ifs2(szInputFile
5、Name);while (ifs2)while(ifs2.peek()=n) ifs2.get();while(ifs2.peek()= ) ifs2.get();while(!ifs2.peek()ifs2.get(a,3, );if(a0if(str!=“,“wmapszTemp+;ifs2.close();display_map(wmap); return false; void display_map(map map:const_iterator map_it; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /统计总数 su
6、m+=map_it-second; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /计算词频 coutfirstsecondsecond/(sum-1)firstsecondsecond/sum #include #include #include using namespace std; void display_map(map void ci(int a); map wmap; map wmapp; int main() cout“开始:“endl;const char *szInputFileName=“c:Text.txt“; ifstream ifs(szInputFileName); string szTemp,szTempp;string str1,str2,str;char a10;/统计双字的while (ifs)while(ifs.peek()=n) ifs.get();while(ifs.peek()= ) ifs.get();ifs.get(a,3, );if(a0while(ifs.peek()=n) continue;while(ifs.peek()= ) continue;ifs.get(a,3, );