赞
踩
Step 1 假定分词词典中的最长词有i个汉字字符,则用被处理的当前字串中的前i个字作为匹配字段,查找字典。
Step 2 若字典中存在这样一个i字词,则匹配成功;否则,失败,将匹配字段中的最后一个字符去掉, 对剩下字串进行匹配。
Step 3 如此进行下去,直到匹配成功,即切分出一个词或剩余字串长度为0。
不停的匹配,直到文档被扫描完为止。
原理与MM类似
Step 1 假定分词词典中的最长词有i个汉字字符,从文档末端开始匹配扫描,每次取最末端的i个字作为匹配字段,查找字典。
Step 2 若字典中存在这样一个i字词,则匹配成功;否则,失败,将匹配字段中的最前面一个字符去掉, 对剩下字串进行匹配。
Step 3 如此进行下去,直到匹配成功,即切分出一个词或剩余字串长度为0。
不停的匹配,直到文档被扫描完为止。
给定字典,[‘研究’,’研究生’, ’生命’,’命’,’的’,‘起源’]
实现正向最大匹配法或逆向最大匹配法,以实现对“研究生命的起源”这个串的分词,对比两种方法在切分“研究生命的起源”的差异
# -*- coding: utf-8 -*- """ Created on Sun Feb 23 22:38:30 2020 @author: """ dic_list=['研究', '命', '的', '起源', '研究生', '生命'] #分词字典列表 sentence="研究生命的起源" #待分词的句子 ans_forward=[] #存放正向匹配的结果 ans_reverse=[] #存放逆向匹配的结果,相当于栈 max_length=3 #分词字典中最大长度字符串的长度 """ 要是分词字典列表中最大长度字符串的长度一眼看不出来,可采用下一行的形式 max_length=len(sorted(dic_list, key=lambda x: len(x))[-1]) """ #1、正向最大匹配 len_row=len(sentence) #len_orw为当前为划分句子的长度 while len_row>0: #当前待划分句子长度为0时,结束划分 divide = sentence[0:max_length] #从前向后截取长度为max_length的字符串 while divide not in dic_list: #当前截取的字符串不在分词字典中,则进循环 if len(divide)==1: #当前截取的字符串长度为1时,说明分词字典无匹配项 break #直接保留当前的一个字 divide=divide[0:len(divide)-1] #当前截取的字符串长度减一 ans_forward.append(divide) #记录下当前截取的字符串 sentence = sentence[len(divide):] #截取未分词的句子 len_row = len(sentence) #记录未分词的句子的长度 print("\'正向最大匹配\'的分词结果为:",ans_forward) #2、逆向最大匹配 sentence="研究生命的起源" len_row=len(sentence) while len_row>0 : divide = sentence[-max_length:] while divide not in dic_list: if len(divide)==1: break divide=divide[1:] #注意这里缩短截取字符串是缩短前部分,保留后部分 ans_reverse.append(divide) sentence = sentence[0:len(sentence)-len(divide)] len_row = len(sentence) print("\'逆向最大匹配\'的分词结果为:",ans_reverse[::-1])#注意是倒序输出
2、numpy等其他python相关知识参考资料(莫烦python)
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。