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

下载本文档

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

文档简介

实验一、中文分词一、实验内容用正向最大匹配法对文档进行中文分词,其中:wordlist.txt词表文件pku_test.txt未经过分词的文档文件pku_test_gold.txt经过分词的文档文件二、实验所采用的开发平台及语言工具VisualC++6.0三、实验的核心思想和算法描述本实验的核心思想为正向最大匹配法,其算法描述如下假设句子:S=CC…C,某一词w=CC…C,m为词典12ni12m中最长词的字数。令i=0,当前指针pi指向输入字串的初始位置,执行下面的操作:计算当前指针pi到字串末端的字数(即未被切分字串的长度)n,如果n=1,转(4),结束算法。否则,令m二词典中最长单词的字数,如果n<m,令m=n;从当前pi起取m个汉字作为词wi,判断:如果wi确实是词典中的词,则在wi后添加一个切分标志,转(c);如果wi不是词典中的词且wi的长度大于1,将wi从右端去掉一个字,转(a)步;否则(wi的长度等于1),则在wi后添加一个切分标志,将wi作为单字词添加到词典中,执行(c)步;根据wi的长度修改指针pi的位置,如果pi指向字串末端,转(4),否则,i=i+1,返回(2);输出切分结果,结束分词程序。四、系统主要模块流程、源代码1)正向最大匹配算法

D2^D2+WDL=DL-W(2)原代码如下//Dictionary.h#include<iostream>档D1辑D2^D2+WDL=DL-W(2)原代码如下//Dictionary.h#include<iostream>档D1辑出结果D2丛Di主过■幵t取于"in#include<fstream>usingnamespacestd;classCDictionarypublic:CDictionary();//将词典文件读入并构造为一个哈希词典~CDictionary();intFindWord(stringw);//在哈希词典中查找词

private:stringstrtmp;//读取词典的每一行stringword;//保存每个词stringstrword[55400];};//将词典文件读入并CDictionary::CDictionary(){ifstreaminfile("wordlist.txt");//打开词典if(!infile.is_open())//打开词典失败则退出程序{cerr<<"Unabletoopeninputfile:"<<"wordlist.txt"<<"--bailingout!"<<endl;exit(-1);}inti=0;while(getline(infile,strtmp))//读入词典的每一行并将其添加入哈希中{strword[i++]=strtmp;}infile.close();}CDictionary::~CDictionary(){}//在哈希词典中查找词,若找到,则返回,否则返回intCDictionary::FindWord(stringw){inti=0;while((strword[i]!=w)&&(i<55400))i++;if(i<55400)return1;elsereturn0;}//主程序main.cpp#include"Dictionary.h"#defineMaxWordLength14//最大词长为个字节(即个汉字)#defineSeparator""//词界标记CDictionaryWordDic;//初始化一个词典//对字符串用最大匹配法(正向)处理stringSegmentSentence(strings1){strings2="";//用s2存放分词结果strings3=s1;intl=(int)s1.length();//取输入串长度intm=0;while(!s3.empty()){intlen=(int)s3.length();//取输入串长度if(len>MaxWordLength)//如果输入串长度大于最大词长{len=MaxWordLength;//只在最大词长范围内进行处理stringw=s3.substr(0,len);//(正向用)将输入串左边等于最大词长长度串取出作为候选词intn=WordDic.FindWord(w);//在词典中查找相应的词while(len>1&&n==0)//如果不是词{intj=len-1;while(j>=0&&(unsignedchar)w[j]<128){j--;}if(j<1){break;}len-=1;//从候选词右边减掉一个英文字符,将剩下的部分作为候选词w=w.substr(0,len);//正向用n=WordDic.FindWord(w);}s2+=w+Separator;//(正向用)将匹配得到的词连同词界标记加到输出串末尾s3=s1.substr(m=m+w.length(),s1.length());//(正向用)从s1-w处开始}returns2;}intmain(intargc,char*argv[]){stringstrtmp;//用于保存从语料库中读入的每一行stringline;//用于输出每一行的结果ifstreaminfile("pku_test.txt");//打开输入文件if(!infile.is_open())//打开输入文件失败则退出程序{cerr<<"Unabletoopeninputfile:"<<"pku_test.txt"<<"--bailingout!"<<endl;exit(-1);}ofstreamoutfile1("SegmentResult.txt");//确定输出文件if(!outfile1.is_open()){cerr<<"Unabletoopenfile:SegmentResult.txt"<<"--bailingout!"<<endl;exit(-1);}while(getline(infile,strtmp))//读入语料库中的每一行并用最大匹配法处理{line=strtmp;line=SegmentSentence(line);//调用分词函数进行分词处理outfile1<<line<<endl;//将分词结果写入目标文件cout<<line<<endl;}infile.close();outfile1.close();return0;}五、实验结果及分析(1)、实验运行结果

回"G:\学习课程\大三\自然语言理解侯验1中文分词'Debugs文分i^.exe'21略战

入驶步的化••进现前-片们向O友社了

附朋O类入

(,人进、香祝外台向诲的电:年IZ--TTI--■_1播新广民胞人同个际回"G:\学习课程\大三\自然语言理解侯验1中文分词'Debugs文分i^.exe'21略战

入驶步的化••进现前-片们向O友社了

附朋O类入

(,人进、香祝外台向诲的电:年IZ--TTI--■_1播新广民胞人同个际国族湾一各台第国中国和纪全世过胞新通向同二1们。民人日志响同敲国口纪—中刻和的世三,将程时、新即e征台国月们的电胞各的二声程新十生钟心播界兴,区致高政台行,很视—电别们我特央友,中门朋澳中各济端几国新经开我程国去的进全,好过。良设设,头在划建建势得计下取们年优化展我五代代导发发现现领开•个的义和的大强九主快加第会放党部社开产较西步了共一快革持口进成加改国保完中施设,义续实建利主在继胜会会署制社社•济部法,经康国年民利主上小我国顺民以和的类争好

人战美展的个

发一类续人造

继创着扰

是困业-_「&望纪愿世高崇同20共的服

的歳展

民,

人与Tnr

国成平

各和造Odu-础设是,整和基建的调,斗设的面•世推义奋性建全年意略绩段L,结战明成了阶-志团文纪的题界文进己纟世有20仍纪至

世时平难

和苦突民冲人和国各争战为成种各世受新饱好先航的人广区世美年年新动政O,新进激民行向)的迈人

创O们年个别,二纪标这央特!有人构创困界同士01世目中胞去具结。年己的对贫世们里共1女20在港侨贺过族面往我丈世标的神得入展世问•望的民精取进发新造希,面往(2)实验结果分析在基于字符串匹配的分词算法中,词典的设计往往对分词算法的效率有很大的影响。正向最大匹配分词算法是最基本的字符串匹配算法之一,它能够保证将词典中存在的最长复合词切分出来。实验二:ICTCLAS汉语分词系统说明一、 实验内容调用ICTCLAS程序对其中的文档进行分词,并标注词性(实验数据包含1个文件:pku_test.txt未经过分词的文档文件)二、 实验所采用的开发平台及语言工具VisualC++6.0ICTCLAS汉语分词系统/中科院计算所ICTCLAS5.0接口文档三、 实验的核心思想和算法描述分词系统的主要是思想是先通过CHMM(层叠形马尔可夫模型)进行分词,通过分层,既增加了分词的准确性,又保证了分词的效率.共分五层,如下图一所示:基本思路:先进行原子切分,然后在此基础上进行N-最短路径粗切分,找出前N个最符合的切分结果,生成二元分词表,然后生成分词结果,接着进行词性标注ICTCLAS程序软件使用:(1)・在函数里加入对ICTCLAS50.lib的引用#ifndefOS_LINUX#include<Windows.h>#pragmacomment(lib,"ICTCLAS50.lib")//ICTCLAS50.lib库加入到工程中#endif(2).ICTCLAS_APIboolICTCLAS_FileProcess函数的调用ICTCLAS_APIboolICTCLAS_FileProcess(//文本文件的读取//目标文件的存放//文本文件的读取//目标文件的存放constchar*pszDstFileName,eCodeTypesrcCodeType=CODE_TYPE_UNKNOWN, //类型);boolbEnablePOS=false//true);boolbEnablePOS=false//true表示可以标注词性3).ICTCLAS5.0接口文档中的示例^include<string.h>4include<srdlib.h>^include<string.h>4include"ICTCLAS^O.h"intmaintint char*argv」)| WWsW/W Iif(!lCTCLAS_Init())printf("Initfails\n"):vwwwwwwreturn~1:ICTCLASFileFrocessCTest.txt","Testresult,tzt"CODETYPEGB,1)ICTCLAS_ExitO:return0:Output:Pleasechfickthe^esVesuhWt"四、系统源代码/************(1).在函数里加入对ICTCLAS50.lib的引用********/#ifndefOS_LINUX#include<Windows.h>#pragmacomment(lib,"ICTCLAS50.lib")//ICTCLAS50.lib库加入到工程中#endif#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<string>#include"ICTCLAS50.h"usingnamespacestd;intmain(intargc,char*argv[]){if(!ICTCLAS_Init()){printf("Initfails\n");return-1;}ICTCLAS_FileProcess("pku_test.txt","Test_result.txt",CODE_TYPE_GB,true);//分别表示读取所需分次的文件、存放分词结果的文件、类型、标注词性printf("Initok\n"); //分词结束后输出提示ICTCLAS_Exit();return0;}五、实验结果及分析(1)分词前s(

文中济制我在经法「「,主划年头民计-势和年的s(

文中济制我在经法「「,主划年头民计-势和年的展设五「文造义发建个段切创意的明九阶一,志快文第展的业标较神了发造事纪央政!有持精成的创高世中行贺具保「完新往崇21、别祝中续端利的以的入台特的程继开胜设类展驶旺门年违济好‘幽人发要播澳新设经良上化展与就「广、个建民得础代发平船程际胞一化国取基现续和航征国同第代•发的义继进的新国区纪现斗开绩主••推进的中政世和奋大成会是,前进过行新放结部得社望题一附:会迈通别以开团西取快愿问O{们社标兴特致革民「年加同困01友类目高港,改人施几,共贫二日朋人略很香们义族实去会的和,「战我向友主各署过社民争十们响步,,朋会国部在康人战纪三志敲三刻民的社全利们小国的世月同糊第时人国国,顺珂设各类新二,即设的族各我下整「建界人的十们声建心各界是导调强面世着好年生钟化人国世,领性加全,扰美O先年代动全向年的略步了纪困造O,新现激向!_党战一入世纪创O们年向个,胞的产的进进新世「希苦愿外一同二士01了这台侨去共构设已对20界们的祝平民共—女20入在视外过国结建国面服世我突地和人词新片年图人区电海成个果美克的z TTest_result.txt-记事本文件(F)编辑旧格式(0)直看㈣帮助(H)共同/d创造/v美好/a的/udel新/a世纪/n /wp二/mO/wO/w—年/m新年/t»B/t)/wky(/wkzPH/v图片/n贺词冷 . . .B/t)/wky(/wkzPH/v图片/n(/wkz—/mO/wO/wO/w年/n十二月/t三十1/a张/q)/wky _ _前进/vi的/udel航船/ns同胞/n、/wn澳门特别i二/n,/wd[S]/p应界/n女士/n们/k,/wd先生/n们/k,/wd同志/n们/k,/wd朋友/nff]/k:/wm2001年/皿新牟/t钟声/n即蒋/d敲响/"v□/wj人类/n社会/n/n就要/d驶X/v21/m世纪7nfih/udel新/aM®/n□/wj申国/ns人民/u进入/vT/ule向/p孤代化/"vn建设/vn第三/mz^/qv鮫啥/n自标/n迈琏/vi的/udelM/a征程/n□/wj在/p这个/rz激动人心/bl的/udel时刻/n,/wd我/r工很/d高兴/a通过/p中国/ns国际/n广'播电台/n、/wn中央人民广播电台Alt和/cc申奂电视台/nt,/wd向/p全国/n#^/rz人良/n,/wd向/p香港特别行政谊/ns行政区前进/vi的/udel航船/ns同胞/n、/wn澳门特别i二/n,/wd[S]/p应界/n各国/rzsfih/udel朋友/n们/k,/wd致以/vWf/a应纪/n第—/m个/q新年/t的/udel祝贺/wn!/wt _ _ _过去/t的/udel—年/皿,/wd是/vshi我国/n社会主义/n改革/vn开放/vn和/cg现代化/vn建设/"vn途程?n中/f具看7牛赫志/n意义/n的/udel—牵/m□/wj在/p申国共产党/nt的/udel领导/n下7f,/wd全国/n客簇/rz人民/n囱结奋斗/vn,/wd国民经旁/n继续人葆转人较/dJ^/a的/udel爱展/vn势头/n,/wd经洙/n结构/n的/udel战略性/n谪敕/v顺利/ad部署/w实施h□/wj西前/f大/d笄爱/v取得/v良好/a开端/n□/wj橹神文明/n建设/vn和/cc民主/a法制/n建设/vn建(2)实验结果分析ICTCLAS是中科院计算所研发的中文分词软件,这个软件在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是公认的当今最好的中文分词软件。综合性能:ICTCLAS2011分词速500KB/S左右,分词精度98.45%。ICTCLAS分词系统是个NB的系统,效率奇高,比自己搞字典,分词算法效率高了很多倍,用起来也是非常简单的,但有一点不完美的是,该源代码没有配套的文档,阅读起来可能有一定的障碍,尤其是对C/C++不熟的人来说.实验三:基于语言模型的音字转换说明一.实验内容:1、实验数据包含1个文件:pku_test_gold.txt经过分词的文档文件2、设计一个基于语言模型的音字转换给定拼音串:jinjitizhigaige可能的汉字串:紧济体质改革经济体质改革经济体制改革使用2-gram计算:p(CStringl)=p(紧)Xp(济丨紧)Xp(体质|济)Xp(改革|体质)p(CString2)=p(经济)Xp(体质|经济)Xp(改革|体质)P(CString3)=p(经济)Xp(体制|经济)Xp(改革|体制)比较p(CStringl),p(CString2),p(CString3)二.实验所用的开发平台及语言工具VisualC++6.0三.实验的核心思想和算法描述1•先分别统计出“紧”、“经”、“济”、“体”、“制”、“质”、“改”、“革”这几个字出现的个数2.再计算出各个字出现的概率3•然后计算出在“紧”字出现概率下“济”字出现的条件概率乘上在“济”字出现是“体质、出现的条件概率以及“体质、出现时“改革、出现的条件概率的乘积,即为该句话出现的概率四.系统主要模块流程、源代码#include<iostream>#include<fstream>#include<string>usingnamespacestd;stringwstr[210000];voidmain(){intj=0,num=0;stringstr; //存放读入的词ifstreaminfile("pku_test_gold.txt");//打开输入文件if(!infile.is_open())//打开输入文件失败则退出程序{cerr<<"Unabletoopeninputfile:"<<"pku_test_gold.txt"<<"--bailingout!"<<endl;exit(-1);}while(getline(infile,str,''))//读入每一个词放入字符串数组中{inti=0;while(str.length()!=0){if((unsignedchar)str[i]>=128){wstr[j++]=str.substr(i,2);i+=2;cout<<wstr[j-1]<<"";str=str.substr(i,str.length()-2);i=0;}else{wstr[j++]=str.substr(i,1);i++;cout<<wstr[j-1]<<"";str=str.substr(i,str.length()-1);i=0;}}}num=j;cout〈〈"总的词数"〈〈num〈〈endl;

intjin=0,ji=0,tizhi1=0,tizhi2=0,jingji=0,jinji=0,jtzh1=0,tzh1gg=0,tzh2gg=0,jjtzh1=0,jjtzh2=0;inti=0;while(wstr[i].length()!=0){if(wstr[i]=="紧"){jin++;if(wstr[i+l]=二"济")jinji++;}else{if(wstr[i]=="济"){ji++;if(wstr[i+l]=二"体")if(wstr[i+2]=二"质")jtzh1++;}else{if(wstr[i]=="体"){if(wstr[i+l]=二"质"){tizhi1++;if(wstr[i+2]=二"改")if(wstr[i+3]=二"革")tzh1gg++;}else{if(wstr[i+l]=二"制"){tizhi2++;if(wstr[i+2]=二"改")//紧出现的次数加1//紧济出现的次数加1//紧出现的次数加1//紧济出现的次数加1//济出现的次数加1//济体质出现的次数加1//体质出现的次数加1//体质改革出现次数加1//体制出现的次数加1tzh2gg++; //体制改革出现的次数加1}else{if(wstr[i]=="经"){if(wstr[i+l]=二"济"){jingji++; //经济出现的次数加1if(wstr[i+2]=二"体"){if(wstr[i+3]=二"质")jjtzh1++;//经济体质出现的次数加1else{if(wstr[i+3]=二"制")jjtzh2++;//经济体质出现的次数加1}}}}}}}i++;}cout〈〈"'紧'的出现次数二"〈〈jin〈〈endl;cout〈〈"'紧济'的出现次数"〈〈jinji〈〈endl;cout〈〈"'济'的出现次数"〈〈ji〈〈endl;cout〈〈"'济体质'的出现数"〈〈jtzhl〈〈endl;cout〈〈"'体质'的出现次数"〈〈tizhil〈〈endl;cout〈〈"'体质改革’的出现次数"〈〈tzhlgg〈〈endl;cout〈〈"'经济'的出现次数"〈〈jingji〈〈endl;cout〈〈"'经济体质’的出现次数"〈〈jjtzhl〈〈endl;cout〈〈"'经济体制’的出现次数"〈〈jjtzh2〈〈endl;cout〈〈"'体制'的出现次数"〈〈tizhi2〈〈endl;cout〈〈"'体制改革’的出现次数"〈〈tzh2gg〈〈endl;if((jin!=0)&&(jinji!=0)&&(jtzh1!=0)&&(tzh1gg!=0))cout〈〈"p(CStringl)=p(紧)Xp(济|紧)Xp(体质|济)Xp(改革|体质)="〈〈jin〈〈7"〈〈num〈〈"*"〈〈jinji〈〈7"〈〈"jin"〈〈"*"〈〈jtzhl〈〈"/"〈〈ji〈〈"*"〈〈tzhlgg〈〈"/"〈〈tizhil〈〈"="〈〈(float)jin/num*jinji/jin*jtzhl/ji*tzhlgg/tizhil〈〈endl;else

cout〈〈"p(CStringl)=p(紧)Xp(济|紧)Xp(体质|济)Xp(改革|体质)=0"〈〈endl;if((jingji!=0)&&(jjtzh1!=0)&&(tzh1gg!=0))cout〈〈"p(CString2)=p(经济)Xp(体质|经济)Xp(改革|体质)="〈〈jingji〈〈7"〈

温馨提示

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

最新文档

评论

0/150

提交评论