代码中导入的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()