自然语言处理NLP_中文分词_双向最大匹配算法

代码中导入的FMM和BMM,请参考我之前发的文章
FMM
BMM

"""
    双向最大匹配算法
"""

#导入正向最大匹配算法和逆向最大匹配算法
import FMM
import BMM

#词典元素存储变量
dict_words = []

#初始化函数,载入词典
def init():
    with open("dict/dict.txt","r",encoding="utf-8") as dict_input:
        for word in dict_input:
            dict_words.append(word.strip())

#分词函数
def cut_words(words_input,dict_words):
    #分词
    fmm_cut_word_list = FMM.cut_words(words_input,dict_words)
    bmm_cut_word_list = BMM.cut_words(words_input,dict_words)

    #两种分词的分词结果
    fmm_cut_word_list_size = len(fmm_cut_word_list)
    bmm_cut_word_list_size = len(bmm_cut_word_list)

    #分词结果变量
    cut_words_list = []

    if fmm_cut_word_list_size != bmm_cut_word_list_size:
        if fmm_cut_word_list_size > bmm_cut_word_list_size:
            cut_words_list = bmm_cut_word_list
        else:
            cut_words_list = fmm_cut_word_list
    else:
        fmm_single = 0
        bmm_single = 0
        isSame = True
        for i in range(len(bmm_cut_word_list)):
            if isSame and fmm_cut_word_list[i] not in bmm_cut_word_list:
                isSame = False
            if len(fmm_cut_word_list[i]) == 1:
                fmm_single += 1
            if len(bmm_cut_word_list[i]) == 1:
                bmm_single += 1
        if isSame:
            cut_words_list = fmm_cut_word_list
        if fmm_single > bmm_single:
            cut_words_list = bmm_cut_word_list
        else:
            cut_words_list = fmm_cut_word_list
    return cut_words_list

#主函数
def main():
    init()
    while True:
        print("请输入需要切分的序列:")
        words_input = input()
        if not words_input:
            break
        result = "/".join(cut_words(words_input, dict_words))
        print("分词结果:")
        print(result)

#测试函数
if __name__ == "__main__":
    main()

你可能感兴趣的:(自然语言处理NLP_中文分词_双向最大匹配算法)