赞
踩
编译原理实验二:Python实现中文分词–正向最大匹配和逆向最大匹配
最大匹配法:最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描(为提升扫描效率,还可以跟据字数多少设计多个字典,然后根据字数分别从不同字典中进行扫描)。
文档整理如下:
最大正向匹配代码如下:
# -*- coding: utf-8 -*- """ Created on Fri Feb 21 16:25:22 2020 @author: lenovo """ import numpy as np #处理词典库获得列表 def get_dic(): f=open("F:/学习文件/编译原理/实验二/词典文档.txt",'r') file_open=f.read().split()#按照空格处理文件 f.close() chars=list(set(file_open))#去重之后获得列表 return chars dic=get_dic() def readfile(): max_length=0 for i in dic: max_length=max(max_length,len(i))##获得最大长度 zz=max_length f=open("F:/学习文件/编译原理/实验二/测试文档.txt",'r') ff=open("F:/学习文件/编译原理/实验二/生成文档.txt",'w') lines=f.readlines() f.close() for line in lines:#分别对每一行进行正向最大匹配处理 max_length=zz my_list=[] len_hang=len(line) while len_hang>0: tryW=line[0:max_length]##切割字符串 while tryW not in dic: if len(tryW)==1:#长度为1的时候就直接退出 break; tryW=tryW[0:len(tryW)-1] my_list.append(tryW) line=line[len(tryW):] len_hang=len(line) for i in my_list: ff.write(i+" ") ff.close() readfile()
结果如下:
逆向最大匹配代码如下:
# -*- coding: utf-8 -*- """ Created on Fri Feb 21 19:04:54 2020 @author: lenovo """ import numpy as np #处理词典库获得列表 def get_dic(): f=open("F:/学习文件/编译原理/实验二/词典文档.txt",'r') file_open=f.read().split() f.close() chars=list(set(file_open)) return chars dic=get_dic() def readfile(): max_length=0 for i in dic: max_length=max(max_length,len(i))##获得最大长度 zz=max_length f=open("F:/学习文件/编译原理/实验二/测试文档.txt",'r') ff=open("F:/学习文件/编译原理/实验二/生成文档逆向最大匹配.txt",'w') lines=f.readlines() f.close() for line in lines:#分别对每一行进行逆向最大匹配处理 max_length=zz my_list=[] len_hang=len(line) while len_hang>0: tryW=line[max(0,len_hang-max_length):len_hang]#防止溢出 while tryW not in dic: if len(tryW)==1: break; tryW=tryW[1:len(tryW)]#这里注意,一直是从1开始的 my_list.append(tryW) line=line[0:len_hang-len(tryW)] len_hang=len(line) while len(my_list): tt=my_list.pop()#这里类似栈的操作 ff.write(tt+" ") ff.close() readfile()##012345
结果如下:
逆向需要考虑一些下标的变化,防止溢出。
努力加油a啊,(o)/~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。