• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

中文分词算法—最大匹配法 python实现-附代码

python 海叔叔 4年前 (2021-11-23) 34次浏览 已收录 0个评论

技术标签: python 算法 自然语言处理 双向最大匹配法 中文分词算法
1 正向最大匹配法FMM
2 反向最大匹配法BMM
3 双向最大匹配法
4 python实现代码
5 参考文献

user_dict = ['我们', '在', '在野', '生动', '野生', '动物园', '野生动物园', '物','园','玩']
sentence = '我们在野生动物园玩'
def FMM(user_dict, sentence):
    """
    Author: t4ngw
    param user_dict: 用户分词词典
    param sentence: 需分词句子
    """
    result = []
    max_length = max([len(item) for item in user_dict]) #5
    start = 0
    while start != len(sentence):
        index = start + max_length
        if index > len(sentence):
            index = len(sentence)
        for i in range(index, start, -1):
            if (sentence[start:i] in user_dict) or (len(sentence[start:i]) == 1):
                result.append(sentence[start:i])
                break   
        start = i
    return result
 def BMM(user_dict, sentence):
    """
    Author: t4ngw
    param user_dict: 用户分词词典
    param sentence: 需分词句子
    """
    result = []
    max_length = max([len(item) for item in user_dict]) #5
    start = len(sentence)
    while start != 0:
        index = start - max_length
        if index < 0:
            index = 0
        for i in range(index, start):
            if (sentence[i:start] in user_dict) or (len(sentence[i:start]) == 1):
                result.append(sentence[i:start])
                break
        start = i
    return result
 def Twoway_maximum_match(user_dict, sentence):
    """
    Author: t4ngw
    param user_dict: 用户分词词典
    param sentence: 需分词句子
    """
    FMM_ = FMM(user_dict, sentence)
    BMM_ = BMM(user_dict, sentence)
    if (len(FMM_)) != (len(BMM_)):
        if (len(FMM_)) <= (len(BMM_)):
            return FMM_
        else:
            return BMM_
    else:
        FMM_single = 0
        BMM_single = 0
        for i in range(len(FMM_)):
            if len(FMM_[i]) == 1:
                FMM_single += 1
        for j in range(len(BMM_)):
            if len(FMM_[i]) == 1:
                BMM_single += 1 
        if FMM_single > BMM_single:
            return BMM_single
        else:
            return FMM_single
 Twoway_maximum_match(user_dict, sentence)
 out[1]: ['玩', '野生动物园', '在', '我们']

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:中文分词算法—最大匹配法 python实现-附代码
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址