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

下载本文档

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

文档简介

自然语言理解课程实验报告姓 名 赵子豪20112686所在学院计算机与信息学院专业年级2011级电子信息工程报告提交时间 联系电子信箱 实验一、中文分词1、 实验内容用最大匹配算法设计分词程序实现对文档分词,并计算该程序分词的正确率、召回率及F-测度。实验数据:(1)wordlist.txt 词表文件 (2)pku_test.txt 未经过分词的文档文件(3)pku_test_gold.txt 经过分词的文档文件2、 实验所采用的开发平台及语言工具开发平台:Eclipse软件语言工具:Java语言3、 实验的核心思想和算法描述核心思想:正向最大匹配算法 (Forward MM, FMM)算法描述: 正向最大匹配法算法如下所示:逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子:输入例句:S1=计算语言学课程有意思 ;定义:最大词长MaxLen = 5;S2= ;分隔符 = “/”;假设存在词表:,计算语言学,课程,意思,;最大逆向匹配分词算法过程如下:(1)S2=;S1不为空,从S1右边取出候选子串W=课程有意思;(2)查词表,W不在词表中,将W最左边一个字去掉,得到W=程有意思;(3)查词表,W不在词表中,将W最左边一个字去掉,得到W=有意思;(4)查词表,W不在词表中,将W最左边一个字去掉,得到W=意思(5)查词表,“意思”在词表中,将W加入到S2中,S2= 意思/,并将W从S1中去掉,此时S1=计算语言学课程有;(6)S1不为空,于是从S1左边取出候选子串W=言学课程有;(7)查词表,W不在词表中,将W最左边一个字去掉,得到W=学课程有;(8)查词表,W不在词表中,将W最左边一个字去掉,得到W=课程有;(9)查词表,W不在词表中,将W最左边一个字去掉,得到W=程有;(10)查词表,W不在词表中,将W最左边一个字去掉,得到W=有,这W是单字,将W加入到S2中,S2=“ /有 /意思”,并将W从S1中去掉,此时S1=计算语言学课程;(11)S1不为空,于是从S1左边取出候选子串W=语言学课程;(12)查词表,W不在词表中,将W最左边一个字去掉,得到W=言学课程;(13)查词表,W不在词表中,将W最左边一个字去掉,得到W=学课程;(14)查词表,W不在词表中,将W最左边一个字去掉,得到W=课程;(15)查词表,“意思”在词表中,将W加入到S2中,S2=“ 课程/ 有/ 意思/”,并将W从S1中去掉,此时S1=计算语言学;(16)S1不为空,于是从S1左边取出候选子串W=计算语言学;(17)查词表,“计算语言学”在词表中,将W加入到S2中,S2=“计算语言学/ 课程/ 有/ 意思/”,并将W从S1中去掉,此时S1=;(18)S1为空,输出S2作为分词结果,分词过程结束。4、 系统主要模块流程、源代码/* 2013.11.28 中文分词 赵子豪*/import java.io.*;import java.util.Vector;public class WordSequencepublic static void main(String args)tryFileInputStream fis=new FileInputStream(f:pku_test.txt);InputStreamReader SR=new InputStreamReader(fis);BufferedReader BR=new BufferedReader(SR);String pku=;while( (pku=BR.readLine()!=null) Sequence pku_test=new Sequence(pku); System.out.println( );catch(IOException e)System.out.print(e);class Sequencestatic final int WORD_MAX_LENGTH = 9; static Vector ve=new Vector(); FileWriter FW=new FileWriter(f:mypuk_test.txt,true); String seq=null;public Sequence(String str) throws IOExceptionclass LoadDictionarypublic LoadDictionary(FileReader reader) throws IOExceptionBufferedReader stream=new BufferedReader(reader);String LD=null;while(LD=stream.readLine()!=null)ve.add(LD);FileReader list=new FileReader(f:wordlist.txt); LoadDictionary Dic=new LoadDictionary(list);StringBuffer sb = new StringBuffer();String s = null;int num=str.length();if(num=WORD_MAX_LENGTH) int i,j=0;while (jnum)for( i=0;i+j=WORD_MAX_LENGTH) i=j+WORD_MAX_LENGTH; for(;ij;i-) seq=str.substring(j,i); if(ve.contains(seq)|(i-j=1) System.out.print(seq+ ); sb.append(seq+ ); j=i; break ; while (jnum)for( i=0;i+jnum;i+)seq=str.substring(j,num-i); if(ve.contains(seq)|(num-i-j=1) System.out.print(seq+ ); sb.append(seq+ ); j+=num-i-j; break ; s=sb.toString();FW.write(s);FW.close(); 程序说明:程序由两个类组成,公共类WordSequence和类Sequence,类Sequence主要实现对一个字符串进行分词。思路是:首先,把词表中的词存储在一个Vector对象中,这一步很关键。因为Vector类中提供了一个contains函数可以方便的判断词表中是否有所对照的字符串。然后,根据字符串的长短对其按照正向最大匹配法进行处理。最后,在main()方法中,定义一个文件字符流,利用readLine()函数没读一行,声明一个Sequence对象,对这行字符串进行处理。具体程序见上。5.实验结果及分析实验结果: 实验分析:从上述结果可以看出,基本上程序输出的结果是正确的,只有少数词存在一些误差。而这些误差对于这个算法是完全允许的。实验二、分词与词性标注系统ICTCLAS1. 实验内容实验数据:pku_test.txt 未经过分词的文档文件调用ICTCLAS程序对其中的文档进行分词2. 实验所采用的开发平台及语言工具开发平台:ICTCLAS50_Windows_64_JNI、eclipse软件语言工具:Java语言3. 系统主要模块流程、源代码/*2013.11.28 分词与词性标注系统ICTCLAS 赵子豪*/import ICTCLAS.I3S.AC.ICTCLAS50;import java.util.*;import java.io.*; public class WSpublic static void main(String args)tryICTCLAS50 testICTCLAS50 = new ICTCLAS50();String argu = .;if (testICTCLAS50.ICTCLAS_Init(argu.getBytes(GB2312) = false)System.out.println(Init Fail!);return;String Inputfilename = F:pku_test.txt;byte Inputfilenameb = Inputfilename.getBytes();String Outputfilename = F:test_result.txt;byte Outputfilenameb = Outputfilename.getBytes();testICTCLAS50.ICTCLAS_FileProcess(Inputfilenameb, 2, 2,Outputfilenameb);catch (Exception ex) 程序说明: 本程序通过调用ICTCLAS系统来实现对字符串分词并加标注。程序的实现很简单,只是声明一个ICTCLAS50对象并初始化,然后调用其中的ICTCLAS_FileProcess函数即可实现对F:pku_test.txt文件进行分词并加标注。5.实验结果及分析实验结果:共同/d 创造/v 美好/a 的/ude1 新/a 世纪/n /wp 二/m /w /w 一年/m 新年/t 贺词/n (/wkz 二/m /w /w /w 年/n 十二月/t 三十一日/t )/wky (/wkz 附/v 图片/n 1/a 张/q )/wky 女士/n 们/k ,/wd 先生/n 们/k ,/wd 同志/n 们/k ,/wd 朋友/n 们/k :/wm 2001年/m 新年/t 钟声/n 即将/d 敲响/v 。/wj 人类/n 社会/n 前进/vi 的/ude1 航船/n 就要/d 驶入/v 21/m 世纪/n 的/ude1 新/a 航程/n 。/wj 中国/ns 人民/n 进入/v 了/ule 向/p 现代化/vn 建设/vn 第三/m 步/qv 战略/n 目标/n 迈进/vi 的/ude1 新/a 征程/n 。/wj 在/p 这个/rz 激动人心/bl 的/ude1 时刻/n ,/wd 我/rr 很/d 高兴/a 通过/p 中国/ns 国际/n 广播电台/n 、/wn 中央人民广播电台/nt 和/cc 中央电视台/nt ,/wd 向/p 全国/n 各族/rz 人民/n ,/wd 向/p 香港特别行政区/ns 同胞/n 、/wn 澳门特别行政区/ns 同胞/n 和/cc 台湾/ns 同胞/n 、/wn 海外/s 侨胞/n ,/wd 向/p 世界/n 各国/rzs 的/ude1 朋友/n 们/k ,/wd 致以/v 新/a 世纪/n 第一/m 个/q 新年/t 的/ude1 祝贺/vn !/wt结果分析:结果是非常准确的。而且在实际运行时可以发现运行速度特别快。在实验一中我们编的程序运行完要好几分钟,而这个程序只需不到10秒。其中的算法比较便捷。实验三、基于语言模型的音字转换1. 实验内容设计一个基于语言模型的音字转换系统,根据拼音实验数据:pku_test_gold.txt 经过分词的文档文件2. 实验所采用的开发平台及语言工具开发平台:Eclipse软件语言工具:Java语言3.实验的核心思想和算法描述给定拼音串:jin ji ti zhi gai ge可能的汉字串:紧济体质改革 经济体质改革 经济体制改革使用 2-gram计算:p(CString1) =p(紧)p(济|紧)p(体质|济)p(改革|体质)p(CString2) =p(经济)p(体质|经济)p(改革|体质)p(CString3) =p(经济)p(体制|经济)p(改革|体制)比较p(CString1),p(CString2),p(CString3)4. 系统主要模块流程、源代码/*2013.11.28 基于语言模型的音字转换 赵子豪*/import java.io.*;import java.util.Vector;public class WordSequencepublic static void main(String args)tryString pku1= 紧济体质改革; Sequence pku_test1=new Sequence(pku1); String pku2= 经济体质改革; Sequence pku_test2=new Sequence(pku2); String pku3= 经济体制改革; Sequence pku_test3=new Sequence(pku3); catch(IOException e)System.out.print(e);class Sequencestatic final int WORD_MAX_LENGTH = 9; double T_test=1.00000000; static Vector ve=new Vector(); String seq=null;public Sequence(String str) throws IOExceptionclass LoadDictionarypublic LoadDictionary(FileReader reader) throws IOExceptionBufferedReader stream=new BufferedReader(reader);String LD=null;while(LD=stream.readLine()!=null)ve.add(LD);FileReader list=new FileReader(F:wordlist.txt); LoadDictionary Dic=new LoadDictionary(list);int num=str.length();String fenci=new String6;int k=0;if(num=WORD_MAX_LENGTH) int i,j=0;while (jnum)for( i=0;i+j=WORD_MAX_LENGTH) i=j+WORD_MAX_LENGTH; for(;ij;i-) seq=str.substring(j,i); if(ve.contains(seq)|(i-j=1) System.out.print(seq+ ); j=i; break ; while (jnum)for( i=0;i+jnum;i+)seq=str.substring(j,num-i); if(ve.contains(seq)|(num-i-j=1) System.out.print(seq+ ); j+=num-i-j; break ; FileReader Fder=new FileReader(F:pku_test_gold.txt); BufferedReader BR=new BufferedReader(Fder); String strInfo= ; String puk=; while( (puk=BR.readLine()!=null) strInfo+=puk; String strSplit = /; String a = dong_split(strInfo, strSplit); System.out.println(a.length); int chk=0,cnk=a.length; for(k=1;k6;k+) if(fencik!=null) System.out.println(fenci+k+: + fencik); if(k=1)chk=0; for(int n=0;na.length;n+) if(an.equals(fencik) chk+; elsechk=0; for(int n=1;na.length;n+) if(an.equals(fencik)&(an-1.equals(fencik-1) chk+; System.out.println(chk); if(chk=0)T_test=0; break;else T_test*=(double)chk/cnk; cnk=chk; System.out.println(T_test=+T_test); public static String dong_split(String strInfo, String strSplit) int size = 1; for(int k = 0; k 1) index = strInfo.indexOf(strSplit); if (index0) strTemp = strInfo.substring(0, index); strInfo = strInfo.substring(index+1

温馨提示

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

评论

0/150

提交评论