题目内容:
实现逆向最大匹配分词算法,即从右向左扫描,找到最长的词并切分。如句子“研究生命的起源”,逆向最大匹配分词算法的输出结果为“研究 生命 的 起源”。
输入格式:
第一行是以utf-8格式输入的词表,每个词之间以空格分隔。
接下来是若干行以utf-8格式输入的中文句子。
输出格式:
以utf-8格式输出的逆向最大匹配的分词结果,每个词之间使用空格分隔。每个输入对应一行输出。
输入样例:
你 我 他 爱 北京 天安门 研究 研究生 命 生命 的 起源
研究生命的起源
我爱北京天安门
输出样例:
研究 生命 的 起源
我 爱 北京 天安门
我的无法通过的错误的解答:
#coding=utf-8
def word_seg(sentence,word_dic,max_length):
begin=0
words=[]
sent = unicode(sentence,'utf-8' );
end=len(sent);
while end>0:
for begin in range( max(end-max_length,0) ,end ,1 ):
word =sent[begin:end]
if word in word_dic or end==begin+1:
words.append(word)
break
end=begin
return words
def load_dic_text(text):
lst=[];
lst=text.split(' ')
word_dic=set()
max_length=1
for one_word in lst:
word=unicode(one_word.strip(),'utf-8')
word_dic.add(word)
if len(word)>max_length:
max_length=len(word)
return max_length,word_dic
# print load_dic('lexicon.dic')
s=raw_input()
max_len,dic= load_dic_text(s)
stopword = ''
for s in iter(raw_input, stopword):
my_list= word_seg(s,dic,max_len);
my_list.reverse();
new_s="";
new_list=[];
for on in my_list:
new_s=new_s+on+" ";
print new_s[0:len(new_s)-1]