自然语言理解课程实验报告_第1页
自然语言理解课程实验报告_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

PAGE6/NUMPAGES6自然语言理解课程实验报告实验一、中文分词

一、实验内容

用正向最大匹配法对文档进行中文分词,其中:

(1)wordlist.txt词表文件

(2)pku_test.txt未经过分词的文档文件

(3)pku_test_gold.txt经过分词的文档文件

二、实验所采用的开发平台及语言工具

VisualC++6.0

三、实验的核心思想和算法描述

本实验的核心思想为正向最大匹配法,其算法描述如下

假设句子:,某一词,m为词典

中最长词的字数。

(1)令i=0,当前指针pi指向输入字串的初始位置,执行下面的操作:

(2)计算当前指针pi到字串末端的字数(即未被切分字串的长度)n,如果n=1,

转(4),结束算法。否则,令m=词典中最长单词的字数,如果n

#include

#include

usingnamespacestd;

classCDictionary

{

public:

CDictionary();//将词典文件读入并构造为一个哈希词典~CDictionary();

intFindWord(stringw);//在哈希词典中查找词

private:

stringstrtmp;//读取词典的每一行

stringword;//保存每个词

stringstrword[55400];

};

//将词典文件读入并

CDictionary::CDictionary()

{

ifstreaminfile("wordlist.txt");//打开词典

if(!infile.is_open())//打开词典失败则退出程序

{

cerrMaxWordLength)//如果输入串长度大于最大词长{

len=MaxWordLength;//只在最大词长范围内进行处理}

stringw=s3.substr(0,len);//(正向用)将输入串左边等于最大词长长度串取出作为候选词

intn=WordDic.FindWord(w);//在词典中查找相应的词

while(len>1

while(j>=0

}

if(j

#pragmacomment(lib,"ICTCLAS50.lib")//ICTCLAS50.lib库加入到工程中#endif

(2).ICTCLAS_APIboolICTCLAS_FileProcess函数的调用

ICTCLAS_APIboolICTCLAS_FileProcess(

constchar*pszSrcFileName,//文本文件的读取

constchar*pszDstFileName,//目标文件的存放

eCodeTypesrcCodeType=CODE_TYPE_UNKNOWN,//类型

boolbEnablePOS=false//true表示可以标注词性);

(3).ICTCLAS5.0接口文档中的示例

四、系统源代码

/************(1).在函数里加入对ICTCLAS50.lib的引用********/

#ifndefOS_LINUX

#include

#include

#include

#include

#include

#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)分词前

分词后:

(2)实验结果分析

ICTCLAS是中科院计算所研发的中文分词软件,这个软件在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名,是公认的当今最好的中文分词软件。

综合性能:ICTCLAS2011分词速500KB/s左右,分词精度98.45%。

ICTCLAS分词系统是个NB的系统,效率奇高,比自己搞字典,分词算法效率高了很多倍,用起来也是非常简单的,但有一点不完美的是,该源代码没有配套的文档,阅读起来可能有一定的障碍,尤其是对C/C++不熟的人来说.

实验三:基于语言模型的音字转换说明

一.实验内容:

1、实验数据包含1个文件:

pku_test_gold.txt经过分词的文档文件

2、设计一个基于语言模型的音字转换

给定拼音串:jinjitizhigaige

可能的汉字串:紧济体质改革

经济体质改革

经济体制改革

使用2-gram计算:

p(CString1)=p(紧)×p(济|紧)×p(体质|济)×p(改革|体质)

p(CString2)=p(经济)×p(体质|经济)×p(改革|体质)

p(CString3)=p(经济)×p(体制|经济)×p(改革|体制)

比较p(CString1),p(CString2),p(CString3)

二.实验所用的开发平台及语言工具

VisualC++6.0

三.实验的核心思想和算法描述

1.先分别统计出“紧”、“经”、“济”、“体”、“制”、“质”、“改”、“革”这几个字出现的个数

2.再计算出各个字出现的概率

3.然后计算出在“紧”字出现概率下“济”字出现的条件概率乘上在“济”字出现是“体质”出现的条件概率以及“体质”出现时“改革”出现的条件概率的乘积,即为该句话出现的概率

四.系统主要模块流程、源代码

#include

#include

#include

usingnamespacestd;

stringwstr[210000];

voidmain()

{

intj=0,num=0;

stringstr;//存放读入的词

ifstreaminfile("pku_test_gold.txt");//打开输入文件

if(!infile.is_open())//打开输入文件失败则退出程序

{

cerr=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;

int

jin=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++;//紧出现的次数加1

if(wstr[i+1]=="济")

jinji++;//紧济出现的次数加1}

else

{

if(wstr[i]=="济")

{

ji++;//济出现的次数加1

if(wstr[i+1]=="体")

if(wstr[i+2]=="质")

jtzh1++;//济体质出现的次数加1}

else

{

if(wstr[i]=="体")

{

if(wstr[i+1]=="质")

{

tizhi1++;//体质出现的次数加1

if(wstr[i+2]=="改")

if(wstr[i+3]=="革")

tzh1gg++;//体质改革出现次数加1

}

else

{

if(wstr[i+1]=="制")

{

tizhi2++;//体制出现的次数加1

if(wstr[i+2]=="改")

if(wstr[i+3]=="革")

tzh2gg++;//体制改革出现的次数加1

}

}

}

else

{

if(wstr[i]=="经")

{

if(wstr[i+1]=="济")

{

jingji++;//经济出现的次数加1

if(wstr[i+2]=="体")

{

if(wstr[i+3]=="质")

jjtzh1++;//经济体质出现的次数加1

else

{

if(wstr[i+3]=="制")

jjtzh2++;//经济体质出现的次数加1

}

}

}

}

}

}

}

i++;

}

cout<<"'紧'的出现次数="<<jin<<endl;

cout<<"'紧济'的出现次数"<<jinji<<endl;

cout<<"'济'的出现次数"<<ji<<endl;

cout<<"'济体质'的出现数"<<jtzh1<<endl;

cout<<"'体质'的出现次数"<<tizhi1<<endl;

cout<<"'体质改革'的出现次数"<<tzh1gg<<endl;

cout<<"'经济'的出现次数"<<jingji<<endl;

cout<<"

温馨提示

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

评论

0/150

提交评论