python练习题--字典和集合

时间:2023-02-24 00:21:51

题目内容:

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


输入格式:

第一行是以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]
    

我不知道为什么,