自然语言理解实验的报告

上传人:1332****573 文档编号:134282367 上传时间:2022-08-12 格式:DOC 页数:29 大小:154KB
收藏 版权申诉 举报 下载
自然语言理解实验的报告_第1页
第1页 / 共29页
自然语言理解实验的报告_第2页
第2页 / 共29页
自然语言理解实验的报告_第3页
第3页 / 共29页
资源描述:

《自然语言理解实验的报告》由会员分享,可在线阅读,更多相关《自然语言理解实验的报告(29页珍藏版)》请在装配图网上搜索。

1、 .wd.分词系统工程报告 课程:自然语言理解 姓名:王佳淼 学号:2011914 班级:信息安全11-1 日期:2013-11-2实验一 宋词字统计一研究背景本实验所涉及的研究背景是利用计算机来“鉴赏宋词。主要针对宋词这种特殊的汉语诗歌体裁,开展了有关自动生成算法及其实现方法的探索性研究。通过对大量语料的学习,来自动生成宋词。由于宋词自身的特性,能够在经过大量预料学习后,利用在宋词当中出现频率较高的词语或者单字排列组合来生成宋词。二实验所采用的开发平台及语言工具实验在WIN7的环境下利用VC+编程。三系统设计(1) 算法 基本思想从文本中字符,判断是否为中文字符全角字符,假设为全角字符那么根

2、据需要继续读取,即读取两个或三个字。利用map容器来存储统计结果。(2) 流程图(3) 代码字统计 #include #include #include #include using namespace std; /宋词的统计 void display_map(map &wmap); ofstream ofs(c:fenciout2.txt); int main() cout开场:endl; const char *szInputFileName=c:Text.txt; ifstream ifs(szInputFileName); string szTemp;string str1,str2,

3、str3,str;char a10;/ map wmap; /统计双字的 while (ifs)while(ifs.peek()=n) ifs.get();while(ifs.peek()= ) ifs.get();while(!ifs.peek()&0x80) ifs.get();ifs.get(a,3, );if(a0&0x80)str1=a;while(ifs.peek()=n) continue;while(ifs.peek()= ) continue;while(!ifs.peek()&0x80) ifs.get();ifs.get(a,3, );if(a0&0x80) str2=a

4、; if(str1!=,&str1!=。&str1!=&str1!=!&str1!=&str2!=,&str2!=。&str2!=&str2!=!&str2!=) szTemp=str1+str2; wmapszTemp+; if(ifs.peek()!=n&ifs.peek()!= ) ifs.seekg(-2,ios:cur);ifs.close();/三字ifstream ifs1(szInputFileName); while (ifs1) while(ifs1.peek()=n) ifs1.get();while(ifs1.peek()= ) ifs1.get();while(!if

5、s1.peek()&0x80) ifs1.get();ifs1.get(a,3, );if(a0&0x80)str1=a;while(ifs1.peek()=n) continue;while(ifs1.peek()= ) continue;while(!ifs1.peek()&0x80) ifs1.get();ifs1.get(a,3, );if(a0&0x80) str2=a;else continue;while(ifs1.peek()=n) continue;while(ifs1.peek()= ) continue;while(!ifs1.peek()&0x80) ifs1.get(

6、);ifs1.get(a,3, );if(a0&0x80) str3=a;else continue; if(str1!=,&str1!=。&str1!=&str1!=!&str1!=&str2!=,&str2!=。&str2!=&str2!=!&str2!=&str3!=,&str3!=。&str3!=&str3!=!&str3!=) szTemp=str1+str2+str3; wmapszTemp+; if(ifs1.peek()!=n&ifs1.peek()!= ) ifs1.seekg(-4,ios:cur);ifs1.close();/单字ifstream ifs2(szInput

7、FileName); while (ifs2)while(ifs2.peek()=n) ifs2.get();while(ifs2.peek()= ) ifs2.get();while(!ifs2.peek()&0x80) ifs2.get();ifs2.get(a,3, );if(a0&0x80)str=a;if(str!=,&str!=。&str!=&str!=!&str!=) szTemp=str; wmapszTemp+;ifs2.close(); display_map(wmap); return false; void display_map(map &wmap) int sum=

8、0; map:const_iterator map_it; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /统计总数 sum+=map_it-second; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /计算词频 cout(first,second); coutsecond/(sum-1)endl; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /计算词频 ofs(first,second); ofsseco

9、nd/sumendl; 宋词生成 #include #include #include #include using namespace std; void display_map(map &wmap); 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;/ /统计双字的 whil

10、e (ifs)while(ifs.peek()=n) ifs.get();while(ifs.peek()= ) ifs.get();ifs.get(a,3, );if(a0&0x80)str1=a;while(ifs.peek()=n) continue;while(ifs.peek()= ) continue;ifs.get(a,3, );if(a0&0x80) str2=a; if(str1!=,&str1!=。&str1!=&str1!=!&str1!=&str2!=,&str2!=。&str2!=&str2!=!&str2!=) szTemp=str1+str2; wmapszTem

11、p+; if(ifs.peek()!=n&ifs.peek()!= ) ifs.seekg(-2,ios:cur);ifs.close(); / display_map(wmap); /单字ifstream ifs1(szInputFileName); while (ifs1)while(ifs1.peek()=n) ifs1.get();while(ifs1.peek()= ) ifs1.get();ifs1.get(a,3, );if(a0&0x80)str=a;if(str!=,&str!=。&str!=&str!=!&str!=) szTemp=str; wmappszTemp+;if

12、s1.close(); / display_map(wmapp);int as;while(1)cout请随意输入一个数来创造宋词:(输入0时退出)as;if(as=0) return 0; ci(as);coutendlendl;cout-endl;coutendlendl; return false; void ci(int a) cout 如梦令endl; map:iterator map_it; for(int i=0;i3;i+) map_it=wmap.begin(); for(int j=0;j(rand()+a*2)%(wmap.size();j+) map_it+; cout

13、first; cout。; for(i=0;i3;i+) map_it=wmap.begin(); for( int j=0;jrand()%(a);j+) map_it+; coutfirst; cout。; for(i=0;i2;i+) map_it=wmap.begin(); for( int j=0;jrand()%(wmap.size();j+) map_it+; coutfirst; map_it=wmapp.begin(); for( int j=0;j(rand()+a*3)%(wmapp.size();j+) map_it+; coutfirst; cout,; for(i=

14、0;i3;i+) map_it=wmap.begin(); for( int j=0;j(rand()+a)%(wmap.size();j+) map_it+; coutfirst; cout。; map_it=wmap.begin(); for( j=0;jfirst; couttemp。temp。; for(i=0;i3;i+) map_it=wmap.begin(); for( int j=0;j(a*rand()%(wmap.size();j+) map_it+; coutfirst; cout。endl; void display_map(map &wmap) map:const_i

15、terator map_it; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) cout(first,second)endl; 四系统演示与分析1截图字统计:宋词生成如梦令:2结果分析五对次实验的感想、意见和建议通过此次实验,能熟练利用MAP容器,为接下来的两个实验打好根基。也能对汉字进展操作,清楚的了解到汉字在计算机中的存储方式有别于字符型。利用位运算&来与0x80进展比对以区分全角字符和半角字符。但因为将字作为了map的key值,所以输出的列并不是按照出现频率由大到小,这是可以进展改进的方面。在宋词生成的程序中,主要是利用随机输入

16、的数字来产生伪随机数,以便利用产生的伪随机数选择不同出现频率的词组来生成宋词。我觉得可以改进的方面是,在统计时就能用程序自动获取不同词牌名的不同格式,在生成宋词时能选择不同的词牌名以生成不同宋词,使程序更加智能。实验二 人民日报词频统计一研究背景词是自然语言中能够独立运用的最小单位,是自然语言处理的 基本单位。自动词法分析就是利用计算机对自然语言的形态 (morphology) 进展分析,判断词的构造和类别等。而词频统计是分词系统的根基和关键,只有在正确、准确、快速的词频统计的情况下才能很好的进展分词算法。二实验所采用的开发平台及语言工具实验在WIN7的环境下利用VC+编程。三系统设计1算法

17、基本思想从文本中字符,判断是否为中文字符全角字符,假设为全角字符那么根据需要继续读取,即读取两个或三个字。利用map容器来存储统计结果。(2) 流程图3代码 #include #include #include #include #include #include using namespace std; /人民日报的词频统计 typedef pair PAIR; vector vecpair; void display_map(map &wmap); ofstream ofs(c:fenciout.txt); int cmp(const PAIR& x, const PAIR& y)/vec

18、tor的sort降序排列 return x.secondy.second; int main() cout开场:endl; const char *szInputFileName=c:cidian.txt; ifstream ifs(szInputFileName); string szTemp;string str1,str2,str3,str;char a100;/ map wmap; map wmapok; /统计 while (ifs)szTemp=;int i=0;ifsai;/逐个字符读入if(ifs.eof()break;if(!(ai&0x80)/非中文continue;if(

19、!(ai&0xB0)/除去空格ifsai;continue;while(ai!=/)/读取szTemp+=ai;i+;ifsai;wmapszTemp+;/对应字频加1ifs.close();/map 根据value排序map:const_iterator curr; for(curr=wmap.begin();curr!=wmap.end();+curr)vecpair.push_back(make_pair(curr-first,curr-second); sort(vecpair.begin(),vecpair.end(),cmp);/调用排序函数,那么vecpair中的first是词,

20、而且降序排列for(int i = 0 ;ivecpair.size();i+) ofs vecpairi.first , vecpairi.second endl; display_map(wmap);return; void display_map(map &wmap) int sum=0; map:const_iterator map_it; for (map_it=wmap.begin(); map_it!=wmap.end();map_it+) /统计总数 sum+=map_it-second; for (map_it=wmap.begin(); map_it!=wmap.end()

21、;map_it+) /计算词频,在界面上输出,此时是无序的 cout(first,second); coutsecond/sumendl; 四系统演示与分析1截图排序后:2结果分析五对次实验的感想、意见和建议在这次实验后,能含有分词字符的文件进展读取,利用语料来训练程序,并将结果保存在文件当中,以便实验三可以使用。而且能够进展排序,按照value的值,即词语出现次数由高到低进展排序。美中缺乏的是,程序运行速度有待提高。由于map是按照键值排序的,所以引入了vector,并利用vector的sort函数进展排序,熟悉了这两种容器的使用,提高了对c+库函数的认识。实验三 人民日报分词一研究背景自动

22、词法分析就是利用计算机对自然语言的形态 (morphology) 进展分析,判断词的构造和类别等。自动分词是汉语句子分析的根基,而且,词语的分析具有广泛的应用词频统计,词典编纂,文章风格研究等二模型方法正向最大匹配算法 (Forward MM, FMM)。这种算法使得程序简单易行,开发周期短,而且仅需要很少的语言资源词表,不需要任何词法、句法、语义资源。三系统设计1算法 基本思想FMM 算法描述:(1) 令 i=0,当前指针 pi 指向输入字串的初始位置,执行下面的操作:(2) 计算当前指针 pi到字串末端的字数即未被切分字串的长度n,如果n=1,转(4),完毕算法。否那么,令 m=词典中最长

23、单词的字数,如果nm, 令 m=n;(3)从当前 pi起取m个汉字作为词 wi,判断:(a) 如果 wi 确实是词典中的词,那么在wi 后添加一个切分标志,转(c);(b) 如果 wi 不是词典中的词且 wi 的长度大于1,将wi从右端去掉一个字,转(a)步;否那么wi 的长度等于1,那么在wi 后添加一个切分标志单字,执行 (c)步;(c) 根据 wi 的长度修改指针 pi的位置,如果 pi指向字串末端,转(4),否那么,i=i+1,返回 (2);(4) 输出切分结果,完毕分词程序。(2) 流程图图1.分词流程图图2.FMM算法流程图3代码 #include #include #includ

24、e #include #include #include using namespace std; /人民日报的词频统计 typedef pair PAIR; vector vecpair; ofstream ofs(c:fenciout.txt); int cmp(const PAIR& x, const PAIR& y) return x.secondy.second; int main() cout开场:endl; const char *szInputFileName=c:cidian.txt; ifstream ifs(szInputFileName); string szTemp;

25、string str1,str2,str3,str;char a100;/ map wmap; map wmapok; /统计 while (ifs)szTemp=;int i=0;ifsai;/逐个字符读入if(ifs.eof()break;if(!(ai&0x80)/非中文continue;if(!(ai&0xB0)/除去空格ifsai;continue;while(ai!=/)szTemp+=ai;i+;ifsai;wmapszTemp+;/对应字频加1ifs.close();/map 根据value排序map:const_iterator curr; for(curr=wmap.beg

26、in();curr!=wmap.end();+curr)vecpair.push_back(make_pair(curr-first,curr-second); sort(vecpair.begin(),vecpair.end(),cmp);/调用排序函数,那么vecpair中的first是词,而且降序排列for(int i = 0 ;ivecpair.size();i+) ofsvecpairi.firstendl; ofs.close();ifstream infile2;infile2.open(c:fenciout.txt,ios:in);if(!infile2)cerr文件翻开错误e

27、ndl;exit(1);vectorarr1,arr2;/1是读取词典,2是存储分好的句子string word;string text=台湾是中国领土不可分割的一局部,这是大势所趋。;cout原句是:台湾是中国领土不可分割的一局部,这是大势所趋。endl=0;i-=2)if(find(arr1.begin(),arr1.end(),temp1)!=arr1.end()temp1+=/;arr2.push_back(temp1);p1=i;break;elsetemp1=temp2.substr(0,i-2);temp2=temp2.substr(p1);/还没有分的赋值给temp1temp1

28、=temp2;cout分词结果为:endl;for(vector:iterator iter=arr2.begin();iter!=arr2.end();+iter)cout*iter;coutendlendlendl;return; 四系统演示与分析1截图对于语料库中没有出现的词语:(2) 结果分析在测试的范围内,对于语料库中含有的句子能完美分词,但对于一些句子中含有非语料库词语的情况并不能很好的完成分词。但这一缺陷可以通过加大语料库,加强语料训练来弥补。对于未登录词语,在程序中并没有加以实现,所以在测试中并没有进展着方面测试。五对次实验的感想、意见和建议通过这次实验,能顺利对测试句子进展分

29、词。利用实验二的词频统计结果和FMM算法对语句进展分词操作,由于FMM算法的缺陷,以及语料信息不全等众多因素,分词时,召回率不是很高。可以考虑采用双向最大匹配算法来进展分词,确信可以弥补这一缺陷,尽可能大的消除奇异。这次实验使得我对FMM算法的认识有了一定程度上的加深,对分词的各类算法都有了较深入的接触。感想与建议自然语言理解是人工智能研究的一个重要方面,可以认为它一门新兴的边缘学科。它研究能实现人与计算机之间用自然语言进展有效通信的各种理论和方法。我是信息安全的学生,这门课程其实并不是信息安全专业的特色课程。选修这门课程的原因有两个,一是因为对人工智能研究的好奇和兴趣,人工智能有很好很广阔的

30、开展前景,我相信这门课程会对我以后的开展起到不小的帮助;二是因为在做与此相关的创新工程,工程是关于在语音中屏蔽敏感非法字符的。通过选修这门课程,我能熟练对汉字进展操作和比对,对分词中经常遇到的各类歧义情况有了深入的了解,例如交集型歧义和组合型歧义在分词时候应该注意什么,对于未登录词的处理方法等。孙晓教师为人幽默,讲课条理清楚,内容全面,深入浅出的讲解了自然语言理解这门课程。在第一节课上课的时候还带了360随身WIFI,活泼课堂气氛,增强了师生互动。PPT上的例子不仅能很好的反响自然语言理解这门课程的特色,而且就来自于生活当中,十分有趣,让人忍俊不禁。孙晓教师也为我们提供了很多的课外相关书籍以及

31、实验所需的各类语料信息,这让我们可以更好的在课外学习并深入领悟自然语言理解这门课程。但由于课程的时间安排问题,使得很多的课时被挤掉,所以对于自然语言理解的讲解有限。教师在课堂上对于很多问题都是点到为止,例如在讲到宋词的自动生成时,教师讲解了关于宋词字统计,以及生成简易宋词的方法,但对于如何生成完美的,能符合平仄构造、满足押韵的方法并没有详细讲解。我还希望教师能够提供一些良好的关于汉语分词系统的开源代码,以便我们能够更加深入的了解各类分词算法在实际生活中的运行。虽然有一些小方面还可以进展改进,但总的来说,这是一门让我受益良多的课程,不仅提高了我理论上的知识水平,开阔了我的眼界,而且通过实验课程,提升了我的编程水平,训练了我的编程思维,增强了我以后的社会竞争力。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!