python 最大匹配分词

11 篇文章 0 订阅

参考博客参考博客

# given a dict
li = ["北京大学","生前","来","应聘","大学生","前来","北京"]

dic = {w:i for i,w in enumerate(li)}
print(dic) 

forward max matching

窗口从前面开始滑动,每次取maxlength
匹配不上也是舍弃后面的

# forward max matching
# given the longest word in dict , the length is 4
# string: test string
max_length = 5
string = "北京大学生前来应聘"
# store the answers
ans = []
while len(string)>0:
    right = max(len(string), max_length)
    sub_string = string[:right]
    
    while len(sub_string)>0:
        if sub_string in dic:
            ans.append(sub_string)
            string = string[len(sub_string):]
            break
        else:
            sub_string = sub_string[:len(sub_string)-1]
print(ans)

[‘北京大学’, ‘生前’, ‘来’, ‘应聘’]

后向匹配

窗口从最后面开始滑动,匹配不上是舍弃前面的

# backward max matching
res = []
max_length = 5
string = "北京大学生前来应聘"
while len(string) > 0:
    l = len(string)
    if len(string) < max_length:
        sub_string = string
    else:
        sub_string = string[len(string) - max_length:]

    while len(sub_string) > 0:
        if sub_string in dic:
            res.append(sub_string)
            string = string[:l - len(sub_string)]
            break
        else:
            sub_string = sub_string[1:]
print(res[::-1])

[‘北京’, ‘大学生’, ‘前来’, ‘应聘’]

双向匹配

算法流程:

比较正向最大匹配和逆向最大匹配结果 如果分词数量结果不同,那么取分词数量较少的那个 如果分词数量结果相同 分词结果相同,可以返回任何一个 分词结果不同,返回单字数比较少的那个

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值