【文字匹配算法】分词匹配 最大 正向/逆向/双向 匹配

正向最大匹配

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          # 都相等时逆向匹配优先级更高
posted @   PythonNew_Mr.Wang  Views(159)  Comments(0Edit  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-10-30 【Python】 安装词云库一直报错出现DDL错误的解决办法
点击右上角即可分享
微信分享提示