最大匹配算法(自己写词典版)

'''
(分词算法)正向最大匹配算法
'''
if __name__ == '__main__':

    ch_dict = ['山西','农业','大学','山西农业','农业大学','山西农业大学','是','一所','百年','老校','百年老校']       #中文的词典库,用于匹配句子中的词语
    sentence = '山西农业大学是一所百年老校'          #例句,需要进行分词
    segment_list = []                      #存放分词后的分词词组

    #例句不为空时,循环地进行分词操作
    while len(sentence) >= 1:
        # 最大匹配单词的长度为6,
        max_match_len = 6
        #当匹配单词长度大于1时,循环判断分词
        while max_match_len > 1:

            #判断前 max_match_len 个字符是否存在于字典
            if sentence[0:max_match_len] in ch_dict:
                segment_list.append(sentence[0:max_match_len])              #追加到分词词组中
                sentence = sentence[max_match_len:len(sentence)]            #将符合的词语从原例句中截取
                break                   #退出循环,重新从max_match_len最长匹配数开始匹配截取

            max_match_len -= 1          #max_match_len累减,开始匹配4个字符,3个字符,,,

        #只剩下一个汉字时,说明当前不再存在任何符合的词语,直接截取一个汉字作为词组
        if max_match_len == 1:
            segment_list.append(sentence[0:1])          #追加单个汉字词语
            sentence = sentence[1:len(sentence)]        #截取例句

	#输出存放分词的列表
    print(segment_list)
    #输出进行分词后的例句
    print('/'.join(segment_list))               #我们/经常/有意见/分歧

'''
(分词算法)后向最大匹配算法
'''

if __name__ == '__main__':

    ch_dict = ['山西','农业','大学','山西农业','农业大学','山西农业大学','是','一所','百年','老校','百年老校']      #中文的词典库,用于匹配句子中的词语
    sentence = '山西农业大学是一所百年老校'          #例句,需要进行分词
    segment_list = []                      #存放分词后的分词词组

    #例句不为空时,循环地进行分词操作
    while len(sentence) >= 1:
        # 最大匹配单词的长度为5,当然实际意义从3开始即可,因为词典最大单词长度为3
        max_match_len = 6
        #当匹配单词长度大于1时,循环判断分词
        while max_match_len > 1:

            #判断前 max_match_len 个字符是否存在于字典
            if sentence[-max_match_len:] in ch_dict:
                segment_list.append(sentence[-max_match_len:])              #追加到分词词组中
                sentence = sentence[:-max_match_len]            #将符合的词语从原例句中截取
                break                   #退出循环,重新从max_match_len最长匹配数开始匹配截取

            max_match_len -= 1          #max_match_len累减,开始匹配4个字符,3个字符,,,

        #只剩下一个汉字时,说明当前不再存在任何符合的词语,直接截取一个汉字作为词组
        if max_match_len == 1:
            segment_list.append(sentence[-1:])          #追加单个汉字词语
            sentence = sentence[:-1]                    #截取例句

    # 输出进行分词后的例句
    print('/'.join(segment_list))

    #对分词列表进行倒序
    segment_list = segment_list[::-1]
    #再次输出进行分词后的例句
    print('/'.join(segment_list))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值