题目内容:
实现逆向最大匹配分词算法,即从右向左扫描,找到最长的词并切分。如句子“研究生命的起源”,逆向最大匹配分词算法的输出结果为“研究 生命 的 起源”。
输入格式:
第一行是以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])
亦可参考博客:中文分词