正向进行中文分词匹配:
# -*- coding: utf-8 -*-
# 待分词语句
str_1='研究生命的起源'
# 最大长度
M=3
# 词典列表
list_1=['研究','研究生','生命','命','的','起源']
# 字符串载体
list_2=['研','究','生','命','的','起','源']
# 找到起始定位点
i=0
# 找需匹配的切片进行匹配
while i<=len(str_1)-(len(str_1)%M):
if i+M<len(str_1):
z=i+M
else:
z=len(str_1)
k=len(list_2)-len(str_1)
while z>i:
if str_1[i:z] in list_1[:]:
list_2.insert(z+k,'/')
i=z
break;
else:
z-=1
if z==i+1:
list_2.insert(z+k,'/')
i+=1
# 将载体的数据还原为字符串
str=''
for i in list_2:
str+=i
# 去掉头部和尾部的/
print(str.strip('/'))
运行结果截图:
逆向进行中文分词匹配:
# -*- coding:utf-8 -*-
# 待分词语句
str_1='研究生命的起源'
# 最大字符数
M=3
# 词典列表
list_1=['研究','研究生','生命','命','的','起源']
# 字符串载体
list_2=['研','究','生','命','的','起','源']
# 找到起始定位点
i=0
# 找需匹配的切片进行匹配
while i>len(str_1)%M-len(str_1):
if abs(i-M)<=len(str_1):
z=i-M
else:
z=-len(str_1)
k=len(list_2)-len(str_1)
while z<i:
if i==0:
if str_1[z:] in list_1:
list_2.insert(z-k,'/')
i=z
break;
else:
if str_1[z:i] in list_1:
list_2.insert(z-k,'/')
i=z
break;
if z==i-1:
list_2.insert(z-k,'/')
i+=1
z+=1
# 将载体上数据还原为字符串
str_2=''
for i in list_2:
str_2+=i
# 去掉头部和尾部的/
print(str_2.strip('/'))
运行结果截图:
敬请指正!