自然语言理解实验报告.doc_第1页
自然语言理解实验报告.doc_第2页
自然语言理解实验报告.doc_第3页
自然语言理解实验报告.doc_第4页
自然语言理解实验报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

词频统计与简单中文分词工程报告姓 名学 号所在学院计算机与信息学院专业年级计算机10-4班报告提交时间 2013年11月17日实验一:中文分词一、研究背景所谓汉语分词,就是将中文语句中的词汇切分出来的过程。由于汉语的书写习惯,汉语语句中词与词之间的标志是隐含的,英文的单词与单词之间有空格,所以不存在分词问题。而中文的每一句中,词与词之问是没有空格的,因而必须采用某种技术将其分开。雅虎中文网页搜索技术部总监张勤认为:中文分词是中文搜索技术的基础,只有做好了分词,才能有好的搜索。可见,掌握了优秀的分词技术就可以在中文搜索中占有一席之地。分词技术作为自然语言处理的基础环节,同时也是关键环节之一,它的质量好坏直接影响到后续处理步骤的效果。汉语分词工作看似细微,但作为计算机自然语言处理的第一步,它的关键作用是不容忽视的。如今汉语分词己成为自然语言处理的研究热点与难点。互联网绝大部分需要分词,其中典型的实例有:内容分析。这方面主要包括了机器翻译、广告推荐、内容监控等。现在的翻译技术,无论是在线的还是单机的,在翻译句子或段落的时候总会让我们不知所措,语法错误明显,词不达意等等。究其根本原因就是因为中文分词技术的滞后和一些多义词汇选义的把握。中文分词的其中一个重要功能就是为词语的计量分析,词频的统计提供可靠的依据,比如汉语中最常用的词是哪个。这使我们可以做一些广告推荐(哪些广告被更多次的提起)等。说明本工程所涉及的研究背景,包括主要涉及领域,主要研究方法,主要存在问题,现有解决方案等等,可以自行补充其他内容二、模型方法本工程采用正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配,如果匹配上,则切分出一个词。三、系统设计假设句子:,某一词,m 为词典中最长词的字数。(1) 令 i=0,当前指针cutbegin指向输入字串的初始位置,执行下面的操作:(2) 计算当前指针cutbegin到字串末端的字数(即未被切分字串的长度)len,如果n=1,转(4),结束算法。否则,令 m=词典中最长单词的字数,如果lenm, 令 m=n;(3)从当前cutbegin起取m个汉字作为词 temp,判断: (a) 如果temp确实是词典中的词,则在temp后添加一个切分标志,转(c); (b) 如果temp不是词典中的词且temp的长度大于1,将wi 从右端去掉一个字,转(a)步;否则(temp的长度等于1),则在temp后添加一个切分标志,将temp作为单字词添加到词典中,执行 (c)步; (c) 根据 wi 的长度修改指针cutbegin的位置,如果cutbegin指向字串末端,转(4),否则, i=i+1,返回 (2);(4) 输出切分结果,结束分词程序。源程序代码如下:#include#include#include#includeusing namespace std;const int maxlen=8*2; /定义最大词长为8个汉字void error(const char * p,const char * p2=)std:cerrp p2n;exit(-1);int main(int argc,char*argv)std:ifstream dic(dictionary.txt,ios_base:in);if(!dic)error(不能打开dic文件);std:ifstream from(from.txt,ios_base:in);if(!from)error(不能打开from文件);std:ofstream to(to.txt,ios_base:out);if(!to)error(不能打开to文件);char ch;string s_dic;string s_from;string s1,s2;while(getline(dic,s1)s_dic+=s1;s_dic+=n;while(getline(from,s2)s_from+=s2;/s_from+=n;int len=maxlen;int cutbegin=0;string temp;int s_from_length=s_from.length();/couts_from;while(cutbegins_from_length)temp=s_from.substr(cutbegin,len);if(s_dic.find(temp)!=-1)cutbegin=cutbegin+len;len=maxlen;totemp ;std:couttemp ;elseif(len=2)cutbegin=cutbegin+len;len=maxlen;totemp ;std:couttemp ;elselen=len-2;std:coutendl;if(!dic.eof()error(有错误发生n);return 1;四、系统演示与分析实验分析: 从上述结果可以看出,基本上程序输出的结果是正确的,只有少数词存在一些误差。而这些误差对于这个算法是完全允许的。可见,正向最大匹配法并不能做到完美。有时逆向最大匹配法会比正向最大匹配法四处结果要好很多五、对本门课的感想、意见和建议通过这门课程的学习,我获益良多。从刚开始的迷茫到后来的豁然开朗,让我在学习的过程中感受到获得知识的乐趣。在上级实验中老师和学长的悉心指导也给了很大帮助。学习自然语言理解,让我对计算机的用途和功能有了更大程度上的理解,开拓了我的视野。实验二:词频统计一、研究背景在人们用语言进行交际活动时,语言成分的使用显示出一定的规律性,因此可使用统计方法对其进行研究统计,语言学采用概率论、数理统计以及信息论等数学工具来研究语言成分出现的概率和频率,从而揭示语言的统计规律。从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好地反应成词的可信度。这就是词频统计的基本原理,这种技术发展至今已经有许多不同的统计原理。词频统计法也就是向量空间模型采用的相似度计算方法。许多搜索引擎都以索引项的词频和位置作为相关度的判定标准,采用前述的词频加权方法来计算相关度。一个词在网页文档中出现的频率越高,它代表该文档主题的程度就越大,其作为索引项的准确性也就越高,权值就越大。因此词频统计在网络搜索中意义重大。二、模型方法本工程采用基于分词系统的词频统计方法,建立结构体struct DATAstring str1000;int num1000;分别存储文本中出现的词和次数进行统计。三、系统设计源代码如下/ cipin.cpp : 定义控制台应用程序的入口点。/#include stdafx.h#include#include#include#include#includeusing namespace std;/定义常量const int maxlen=8*2; const int maxdata=100;/定义结构体保存读入的词struct DATAstring str1000;int num1000;void error(const char * p,const char * p2=)std:cerrp p2n;exit(-1);int main(int argc,char*argv)/打开字典文件std:ifstream dic(D:wordlist_2.txt,ios_base:in);if(!dic)error(Open wordlist_2.txt file lost!);else cerr Open wordlist_2.txt file success! endl ;/打开材料文件std:ifstream from(D:source.txt,ios_base:in);if(!from)error(Open source.txt file lost!);else cerr Open source.txt file success! endl ;/打开输入文件std:ofstream to(D:des.txt,ios_base:out);if(!to)error(Open des.txt file lost!);else cerr Open des.txt file success! endl ;DATA data;string s_dic;string s_from;string s1,s2;/初始化data结构体for(int i=0;imaxdata;i+)data.stri=;data.numi=0;/从字典问件中读出一行存到s_dic中while(getline(dic,s1)s_dic+=s1;s_dic+=n;/从资料文件中读取一行,添加到s_form后面while(getline(from,s2)s_from+=s2;int cut=0;int len=maxlen;int cutbegin=0;string temp;int s_from_length=s_from.length();while(cutbegins_from_length)bool isnew=true; /判断标记,看不是不第一次出现temp=s_from.substr(cutbegin,len);if(s_dic.find(temp)!=-1)cutbegin=cutbegin+len;len=maxlen;for(int i=0;imaxdata;i+)if(data.stri=temp)data.numi+;isnew=false;if(isnew=true)data.strcut=temp;data.numcut+;cut+;elseif(len=2)cutbegin=cutbegin+len;len=maxlen;for(int i=0;imaxdata;i+)if(data.stri=temp)data.numi+;isnew=false;if(isnew=true)data.strcut=temp;data.numcut+;cut+;elselen=len-2;for(int j=0;jmaxdata;j+)if(data.strj!=)to setw(4) data.strj setw(3) data.numj n ;std:cout setw(4) data.strj setw(3) data.numj n ;std:coutendl;if(!dic.eof()error(Wrong!n);return 1;四、系统演示与分析在对“四是四,十是十,十四是十四,四十是四十。莫把四字说成十,休将十字说成四。若要分清四十和十四,经常练说十和四。”这一句话的处理

温馨提示

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

评论

0/150

提交评论