




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
k=0k=0k=0k=0实验二、中文分词MAXLEN=4importcodecs#importsys#语料corpus=codecs.open('F:\\2018课件\自然语言处理'lkX—自然语言处理实验'分词实验\pku_test.txt','r','UTF-8')corpusReader=corpus.read()corpus.close()#字典dic=codecs.open('F:\\2018课件'自然语言处理\lkx_自然语言处理实验'分词实验\word_freq_list.tXt','r','UTF-8')diclines=dic.readlines()dic.close()#分别存储四字词、三字词和二字词char_4=[]char_3=[]char_2=[]foriindiclines:iflen(i.decode().split('\r\n','rb')[0])==4:char_4.append(i.decode().split('\r\n')[0])eliflen(i.decode().split('\r\n')[0])==3:char_3.append(i.decode().split('\r\n')[0])else:char_2.append(i.decode().split('\r\n')[0])char_4=set(char_4)char_3=set(char_3)char_2=set(char_2)sentences=[]corpuslines=corpusReader.split('\r\n')forsentenincorpuslines:sentences.append(senten)print('Pleasewaitafewseconds...')temp=''segResult=codecs.open('divide_result.txt','w','utf-8')j+=1j+=1whilek!=len(sentences):i=0whilei<len(sentences[k]):ifi+MAXLEN<len(sentences[k]):possible_word=sentences[k][i:i+MAXLEN].split('\r\n')[0]ifpossible_wordinchar_4:temp+=possible_word+''#segResult.write(possible_word+'')i+=MAXLENcontinueifi+3<len(sentences[k]):possible_word=sentences[k][i:i+3].split('\r\n')[0]ifpossible_wordinchar_3:temp+=possible_word+''#segResult.write(possible_word+'')i+=3continueifi+2<len(sentences[k]):possible_word=sentences[k][i:i+2].split('\r\n')[0]ifpossible_wordinchar_2:temp+=possible_word+''#segResult.write(possible_word+'')i+=2continuepossible_word=sentences[k][i]temp+=possible_word+''#segResult.write(possible_word+'')i+=1#segResult.write('\r\n')k+=1temp=temp.strip()segResult.write(temp)segResult.close()print('Segmentationends,calculatingprecisionrate,recallrateandf-score.')segResult=codecs.open('divide_result.txt','r','utf-8')my=segResult.read()segResult.close()gold_corpus=codecs.open('此处为金标分词结果路径‘,‘r','utf-8')gold=gold_corpus.read()gold_corpus.close()gold_split_enter=gold.split('\r\n')gold=''foriingold_split_enter:gold+=igold_list=gold.strip().split('')my_list=my.split('')gold_len=len(gold_list)my_len=len(my_list)correct=0gold_before=''my_before=''i=1j=1gold_before+=gold_list[0]my_before+=my_list[0]ifgold_before==my_beforeandgold_list[0]==my_list[0]:correct+=1#sys.stdout.write(my_list[0])whileTrue:ifgold_before==my_beforeandgold_list[i]==my_list[j]:correct+=1#sys.stdout.write(my_list[j])gold_before+=str(gold_list[i])my_before+=str(my_list[j])i+=1j+=1eliflen(gold_before)<len(my_before):gold_before+=str(gold_list[i])i+=1eliflen(gold_before)>len(my_before):my_before+=str(my_list[j])j+=1elifgold_before==my_beforeandgold_list[i]!=my_list[j]:gold_before+=str(gold_list[i])my_before+=str(my_list[j])i+=1ifi>=len(gold_list)andj>=len(my_list):breakprecision=correct/my_lenrecall=correct/gold_lenf_score=2*precision*recall/(precision+recall)print('precisionrate:',precision)print('recallrate:',recall)print('f-score:',f_score)1、实验内容用最大匹配算法设计分词程序实现对文档分词,并计算该程序分词的召回率。可以输入任意句子,显示分词结果。实验数据:(1)word_freq_list.txt分词词典(2)pku_test.txt未经过分词的文档文件(3)pku_test_gold.txt经过分词的文档文件2、实验所采用的开发平台及语言工具开发平台:任意语言工具:任意3、实验的核心思想和算法描述核心思想:最大匹配算法算法描述:正向最大匹配法算法如下所示:逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子:输入例句:S1="计算语言学课程有意思";定义:最大词长MaxLen=5;S2=""分隔符="/”;假设存在词表:…,计算语言学,课程,意思,…;最大逆向匹配分词算法过程如下:(1)S2="";S1不为空,从S1右边取出候选子串W="课程有意思";(2)查词表,W不在词表中,将亚最左边一个字去掉,得到W="程有意思";(3)查词表,W不在词表中,将亚最左边一个字去掉,得到W="有意思";(4)查词表,W不在词表中,将亚最左边一个字去掉,得到W="意思"(5)查词表,“意思”在词表中,将W加入到52中,S2="意思/",并将W从S1中去掉,此时S1="计算语言学课程有";(6)S1不为空,于是从51左边取出候选子串亚="言学课程有";(7)查词表,W不在词表中,将亚最左边一个字去掉,得到W="学课程有";(8)查词表,W不在词表中,将亚最左边一个字去掉,得到W="课程有";(9)查词表,W不在词表中,将亚最左边一个字去掉,得到W="程有";(10)查词表,W不在词表中,将亚最左边一个字去掉,得到W="有",这W是单字,将W加入到52中,S2=“/有/意思”,并将W从S1中去掉,此时S1="计算语言学课程";(11)S1不为空,于是从51左边取出候选子串W="语言学课程";(12)查词表,W不在词表中,将亚最左边一个字去掉,得到W="言学课程";(13)查词表,W不在词表中,将亚最左边一个字去掉,得到W="学课程";(14)查词表,W不在词表中,将亚最左边一个字去掉,得到W="课程";(15)查词表,“意思”在词表中,将亚加入到S2中,S2=“课程/有/意思/”,并将W从S1中去掉,此时S1="计算语言学";(16)S1不为空,于是从S1左边取出候选子串W="计算语言学";(17)查词表,“计算语言学”在词表中,将亚加入到S2中,S2=“计算语言学/课程/有/意思/”,并将W从S1中去掉,此时S1="";(18)51为空,输出S2作为分词结果,分词过程结束。importcodecs获得分词字典,存储为字典形式f1=codecs.open('F:\\2018课件\自然语言处理'lkX—自然语言处理实验'分词实验\word_freq_list.txt','r',encoding='gbk')dic={}while1:line=f1.readline()iflen(line)==0:breakterm=line.strip().replace('\r\n','')#去除字符串两侧的换行符,避免取最大分词长度时出差错dic[term]=1f1.close获得需要分词的文本,为字符串形式f2=codecs.open('F:\\2018课件\自然语言处理'lkX—自然语言处理实验\分词实验\pku_test.txt','r',encoding='gbk')chars=f2.read().strip().replace('\r\n','')#去除字符串两侧的换行符,避免截词时出差错f2.close#获得停用词典,存储为字典形式f3=codecs.open('stoplis.tXt','r',encoding='gbk')stoplis={}while1:line=f3.readline()iflen(line)==0:breakterm=line.strip()stoplis[term]=1f3.close#正向最大匹配分词算法遍历分词字典,获得最大分词长度max_chars=0forkeyindic:iflen(key)>max_chars:max_chars=len(key)#定义一个空列表来存储分词结果words=[]n=0whilen<len(chars):matched=0foriinrange(max_chars,0,-1):s=chars[n:n+i]#判断所截取字符串是否在分词词典和停用词典内ifsindic:ifsinstoplis:matched=1n=n+ibreakels
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 1 More practice &Culture corner 教学设计 2023-2024学年沪教牛津版英语七年级下册英语
- 乳腺结节诊疗规范
- 千图网与人民币知识普及
- 2025年河北省保定市徐水区中考一模语文试题(原卷版+解析版)
- 二零二四年11月种鸽交易电子合同防篡改水印标准
- 普通家庭住宅装修合同
- 2025年网络广告投放合同模板
- 2025企业办公租赁合同简易版
- 与银行签正式合同标准文本
- 保健器械租赁合同标准文本
- 专升本思政复习指导试题及答案
- 2025年涂料销售合同模板
- 2024年昆明渝润水务有限公司招聘考试真题
- 2025-2030中国小武器和轻武器行业市场发展趋势与前景展望战略研究报告
- 高中主题班会 高考励志冲刺主题班会课件
- 2025年部编版新教材语文一年级下册第一、第二次月考试题带答案(各一套)
- 8.1薪火相传的传统美德 教学设计-2024-2025学年统编版道德与法治七年级下册
- 用纸箱做鸟窝课件
- 巡视巡察课件2025
- 2025江苏南京市金陵饭店股份限公司招聘高频重点模拟试卷提升(共500题附带答案详解)
- 2025年中考物理知识点归纳
评论
0/150
提交评论