Python实现——实现逆向最大匹配分词算法,即从右向左扫描,找到最长的词并切分。

题目内容:
实现逆向最大匹配分词算法,即从右向左扫描,找到最长的词并切分。如句子“研究生命的起源”,逆向最大匹配分词算法的输出结果为“研究 生命 的 起源”。

输入格式:
第一行是以utf-8格式输入的词表,每个词之间以空格分隔。
接下来是若干行以utf-8格式输入的中文句子。

输出格式:
以utf-8格式输出的逆向最大匹配的分词结果,每个词之间使用空格分隔。每个输入对应一行输出。

输入样例:
你 我 他 爱 北京 天安门 研究 研究生 命 生命 的 起源
研究生命的起源
我爱北京天安门

输出样例:
研究 生命 的 起源
我 爱 北京 天安门

注:以下是Python3.8的代码实现,如果要用Py2实现需要作相应修改。

#字典生成
def load_dic(s):
    words=s.split()
    word_dic=set()
    max_length=1
    for word in words:
        word_dic.add(word)
        if len(word)>max_length:
            max_length=len(word)
    return max_length, word_dic

#逆向最大匹配分词
def fmm_word_seg(sentence, word_dic, max_length):
    end=len(sentence)
    words=[]
    while end>0:
        for begin in range(max(end-max_length, 0),end):
            word=sentence[begin:end]
            if word in word_dic or end==begin+1:
                words.append(word)
                break
        end=begin
    return words

max_len, word_dic=load_dic(input())
for line in sys.stdin:
    words=fmm_word_seg(line, word_dic, max_len)
    for i in range(len(words)-1,0,-1):
        print (words[i],end=' ')
    print (words[0])

亦可参考博客:中文分词

你可能感兴趣的:(python,python,自然语言处理,nlp)