版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二、中文分词 MAXLEN=4
importcodecs
#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')
k=0
whilek!=len(sentences):
i=0
whilei<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+=MAXLEN
continue
ifi+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+=3
continue
ifi+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+=2
continue
possible_word=sentences[k][i]
temp+=possible_word+''
#segResult.write(possible_word+'')
i+=1
#segResult.write('\r\n')
k+=1
temp=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+=i
gold_list=gold.strip().split('')
my_list=my.split('')
gold_len=len(gold_list)
my_len=len(my_list)
correct=0
gold_before=''
my_before=''
i=1
j=1
gold_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+=1
j+=1
eliflen(gold_before)<len(my_before):
gold_before+=str(gold_list[i])
i+=1
eliflen(gold_before)>len(my_before):
my_before+=str(my_list[j])
j+=1
elifgold_before==my_beforeandgold_list[i]!=my_list[j]:
gold_before+=str(gold_list[i])
my_before+=str(my_list[j])
i+=1
j+=1
ifi>=len(gold_list)andj>=len(my_list):
break
precision=correct/my_len
recall=correct/gold_len
f_score=2*precision*recall/(precision+recall)
print('precisionrate:',precision)
print('recallrate:',recall)
print('f-score:',f_score)实验内容用最大匹配算法设计分词程序实现对文档分词,并计算该程序分词的召回率。可以输入任意句子,显示分词结果。实验数据:(1)word_freq_list.txt分词词典(2)pku_test.txt未经过分词的文档文件(3)pku_test_gold.txt经过分词的文档文件实验所采用的开发平台及语言工具开发平台:任意语言工具:任意实验的核心思想和算法描述核心思想:最大匹配算法算法描述:正向最大匹配法算法如下所示:逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子:输入例句: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作为分词结果,分词过程结束。importcodecs
#获得分词字典,存储为字典形式
f1=codecs.open('F:\\2018课件\自然语言处理\lkx_自然语言处理实验\分词实验\word_freq_list.txt','r',encoding='gbk')
dic={}
while1:
line=f1.readline()
iflen(line)==0:
break
term=line.strip().replace('\r\n','')#去除字符串两侧的换行符,避免取最大分词长度时出差错
dic[term]=1
f1.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:
#break
#term=line.strip()
#stoplis[term]=1
#f3.close
#正向最大匹配分词算法
#遍历分词字典,获得最大分词长度
max_chars=0
forkeyindic:
iflen(key)>max_chars:
max_chars=len(key)
#定义一个空列表来存储分词结果
words=[]
n=0
whilen<len(chars):
matched=0
foriinrange(max_chars,0,-1):
s=char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 班级反腐倡廉教育的推进计划
- 有效的现金流管理方案计划
- 社区发展动力计划
- 科学教育活动的有效组织计划
- 房屋中介咨询服务合同范本
- 开发区写字楼出租合同范本
- 斗门区摩托车转让合同范本
- 律师咨询服务合同范本
- 京东快递外包合同范本
- 四川省眉山市(2024年-2025年小学五年级语文)人教版竞赛题(上学期)试卷及答案
- 《会议摄影要点》PPT课件
- 国家自然科学基金申请经验交流PPT课件
- Shopping购物英语学习PPT课件
- 基于UbD理论小说叙事视角的群文阅读设计
- 内分泌系统和营养代谢性疾病总论PPT课件
- 抓斗式挖泥船疏浚施工方案(共7页)
- 专业化销售流程之寻找准主顾及约访
- 抹灰整改通知单
- 半导体简答题
- 某水库新建码头初步设计
- 学习能力的培养ppt课件
评论
0/150
提交评论