代码实现:
# 正向匹配
def getRes1(s1, dic, maxLen, s2):
while len(s1) > 0:
w = s1[:maxLen]
while w not in dic and len(w) > 1:
w = w[:-1]
s2 = s2 + [w]
s1 = s1[len(w):]
return s2
# 逆向匹配
def getRes2(s1, dic, maxLen, s2):
while len(s1) > 0:
w = s1[-maxLen:]
while w not in dic and len(w) > 1:
w = w[1:]
s2 = [w] + s2
s1 = s1[:-len(w)]
return s2
# 读取字典
def getDic():
with open("data/字典.txt", "r", encoding="utf-8") as f:
dic = [i.split(" ")[0] for i in f.readlines()]
return dic
# 双向匹配
def getRes3(s1, dic, maxLen, s2):
res1 = getRes1(s1, dic, maxLen, s2)
res2 = getRes2(s1, dic, maxLen, s2)
len1 = len(res1)
len2 = len(res2)
if len1 > len2: # 返回长度小的
return res2
elif len1 < len2: # 返回长度小的
return res1
else: # 长度相同,返回单字少的,默认返回逆向
res1_len = 0
res2_len = 0
for i in res1:
if len(i) == 1:
res1_len += 1
for i in res2:
if len(i) == 1:
res2_len += 1
if res1_len < res2_len:
return res1
else:
return res2
def getR(sen, min, max):
for i in sen: # 语句
d = getDic() # 获取词典
for j in range(min, max + 1): # 从最小到最大
mLen = j
s2 = []
res1 = getRes1(i, d, mLen, s2)
res2 = getRes2(i, d, mLen, s2)
res3 = getRes3(i, d, mLen, s2)
print("maxLen = " + str(j) + " -------正向 = " + str(res1))
print("maxLen = " + str(j) + " -------逆向 = " + str(res2))
print("maxLen = " + str(j) + " -------双向 = " + str(res3))
print("\n")
if __name__ == '__main__':
sen = ["四川大学生活方便面对一环","咱们连长说明天下午回营里修整","结婚的和尚未结婚的","研究生命的起源", "北京大学生前来应聘", "天青色等烟雨而我在等你", "假面骑士的精神永远存在"]
min = 2 # 最小分词数量
max = 5 # 最大分词数量
getR(sen, min, max)
输出结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | maxLen = 2 -------正向 = ['四川', '大学', '生活', '方便', '面对', '一', '环'] maxLen = 2 -------逆向 = ['四川', '大学', '生活', '方便', '面对', '一', '环'] maxLen = 2 -------双向 = ['四川', '大学', '生活', '方便', '面对', '一', '环'] maxLen = 3 -------正向 = ['四川', '大学生', '活', '方便面', '对', '一', '环'] maxLen = 3 -------逆向 = ['四川', '大学', '生活', '方便', '面对', '一', '环'] maxLen = 3 -------双向 = ['四川', '大学', '生活', '方便', '面对', '一', '环'] maxLen = 4 -------正向 = ['四川大学', '生活', '方便面', '对', '一', '环'] maxLen = 4 -------逆向 = ['四川大学', '生活', '方便', '面对', '一', '环'] maxLen = 4 -------双向 = ['四川大学', '生活', '方便', '面对', '一', '环'] maxLen = 5 -------正向 = ['四川大学', '生活', '方便面', '对', '一', '环'] maxLen = 5 -------逆向 = ['四川大学', '生活', '方便', '面对', '一', '环'] maxLen = 5 -------双向 = ['四川大学', '生活', '方便', '面对', '一', '环'] maxLen = 2 -------正向 = ['咱们', '连长', '说明', '天下', '午', '回', '营里', '修整'] maxLen = 2 -------逆向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 2 -------双向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 3 -------正向 = ['咱们', '连长', '说明', '天下', '午', '回', '营里', '修整'] maxLen = 3 -------逆向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 3 -------双向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 4 -------正向 = ['咱们', '连长', '说明', '天下', '午', '回', '营里', '修整'] maxLen = 4 -------逆向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 4 -------双向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 5 -------正向 = ['咱们', '连长', '说明', '天下', '午', '回', '营里', '修整'] maxLen = 5 -------逆向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 5 -------双向 = ['咱们', '连长', '说', '明天', '下午', '回', '营里', '修整'] maxLen = 2 -------正向 = ['结婚', '的', '和尚', '未结', '婚', '的'] maxLen = 2 -------逆向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 2 -------双向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 3 -------正向 = ['结婚', '的', '和尚', '未结', '婚', '的'] maxLen = 3 -------逆向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 3 -------双向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 4 -------正向 = ['结婚', '的', '和尚', '未结', '婚', '的'] maxLen = 4 -------逆向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 4 -------双向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 5 -------正向 = ['结婚', '的', '和尚', '未结', '婚', '的'] maxLen = 5 -------逆向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 5 -------双向 = ['结婚', '的', '和', '尚未', '结婚', '的'] maxLen = 2 -------正向 = ['研究', '生命', '的', '起源'] maxLen = 2 -------逆向 = ['研究', '生命', '的', '起源'] maxLen = 2 -------双向 = ['研究', '生命', '的', '起源'] maxLen = 3 -------正向 = ['研究生', '命', '的', '起源'] maxLen = 3 -------逆向 = ['研究', '生命', '的', '起源'] maxLen = 3 -------双向 = ['研究', '生命', '的', '起源'] maxLen = 4 -------正向 = ['研究生', '命', '的', '起源'] maxLen = 4 -------逆向 = ['研究', '生命', '的', '起源'] maxLen = 4 -------双向 = ['研究', '生命', '的', '起源'] maxLen = 5 -------正向 = ['研究生', '命', '的', '起源'] maxLen = 5 -------逆向 = ['研究', '生命', '的', '起源'] maxLen = 5 -------双向 = ['研究', '生命', '的', '起源'] maxLen = 2 -------正向 = ['北京', '大学', '生前', '来', '应聘'] maxLen = 2 -------逆向 = ['北京', '大', '学生', '前来', '应聘'] maxLen = 2 -------双向 = ['北京', '大', '学生', '前来', '应聘'] maxLen = 3 -------正向 = ['北京', '大学生', '前来', '应聘'] maxLen = 3 -------逆向 = ['北京', '大学生', '前来', '应聘'] maxLen = 3 -------双向 = ['北京', '大学生', '前来', '应聘'] maxLen = 4 -------正向 = ['北京大学', '生前', '来', '应聘'] maxLen = 4 -------逆向 = ['北京', '大学生', '前来', '应聘'] maxLen = 4 -------双向 = ['北京', '大学生', '前来', '应聘'] maxLen = 5 -------正向 = ['北京大学', '生前', '来', '应聘'] maxLen = 5 -------逆向 = ['北京', '大学生', '前来', '应聘'] maxLen = 5 -------双向 = ['北京', '大学生', '前来', '应聘'] maxLen = 2 -------正向 = ['天青', '色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 2 -------逆向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 2 -------双向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 3 -------正向 = ['天青', '色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 3 -------逆向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 3 -------双向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 4 -------正向 = ['天青', '色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 4 -------逆向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 4 -------双向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 5 -------正向 = ['天青', '色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 5 -------逆向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 5 -------双向 = ['天', '青色', '等', '烟雨', '而', '我', '在', '等', '你'] maxLen = 2 -------正向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 2 -------逆向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 2 -------双向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 3 -------正向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 3 -------逆向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 3 -------双向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 4 -------正向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 4 -------逆向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 4 -------双向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 5 -------正向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 5 -------逆向 = ['假面', '骑士', '的', '精神', '永远', '存在'] maxLen = 5 -------双向 = ['假面', '骑士', '的', '精神', '永远', '存在'] 进程已结束,退出代码为 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)