随笔都是学习笔记
随笔仅供参考,为避免笔记中可能出现的错误误导他人,请勿转载。

代码实现:

# 正向匹配
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)

输出结果:

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

  

posted on 2022-04-27 14:50  时间完全不够用啊  阅读(172)  评论(0编辑  收藏  举报