【文字匹配算法】分词匹配 最大 正向/逆向/双向 匹配
正向最大匹配
def forward_match(text,item_dict):
"""
:param text: 分词文本
:param item_dict: 指导分词
"""
resList = [] # 存放结果
LongWord = max([len(word) for word in item_dict]) # 计算指导词语中最长长度
# 读取测试文本最大值开始递减 匹配
while text:
word = text[:LongWord] # 进行缩减最大值文本
# 当word不在item中进行
# 1:匹配到直接存入结果
# 2:没有匹配到 就开始缩减文本匹配
while word not in item_dict:
if len(word) == 1: # 匹配边缘单词 直接添加到结果中
break
word = word[:-1]
resList.append(word) # 添加到结果中
# 在最大文本中删除掉这个存入的值
text = text[len(word):]
return resList
最大逆向匹配
def backward_match(text,item_dict):
"""
:param text: 分词文本
:param item_dict: 指导分词
"""
resList = [] # 存放结果
LongWord = max([len(word) for word in item_dict]) # 计算指导词语中最长长度
# 读取测试文本最大值开始递减 匹配
while text:
word = text[-LongWord:] # 进行缩减最大值文本
# 当word不在item中进行
# 1:匹配到直接存入结果
# 2:没有匹配到 就开始缩减文本匹配
while word not in item_dict:
if len(word) == 1: # 匹配边缘单词 直接添加到结果中
break
word = word[1:]
resList.append(word) # 添加到结果中
# 在最大文本中删除掉这个存入的值
text = text[:-len(word)]
return resList
最大双向匹配
def bidirectional_match(text, item_dict):
f = forward_match(text, item_dict)
b = backward_match(text, item_dict)
if len(f) < len(b):
return f
elif len(f) > len(b):
return b
else:
# 如果正向和逆向匹配结果长度不同,选择词数目较少的
if sum([len(word) == 1 for word in f]) < sum([len(word) == 1 for word in b]):
return f
else:
return b # 都相等时逆向匹配优先级更高
Python全栈(后端、数据分析、脚本、爬虫、EXE客户端) / 前端(WEB,移动,H5) / Linux / SpringBoot / 机器学习
分类:
常见算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2020-10-30 【Python】 安装词云库一直报错出现DDL错误的解决办法