python練習問題--辞書と集合
1543 ワード
タイトル内容:
逆方向最大マッチング分詞アルゴリズム,すなわち右から左にスキャンし,最長の語を見つけて分割する.文「生命の起源を研究する」のように、逆最大マッチング分詞アルゴリズムの出力結果は「生命の起源を研究する」である.
入力形式:
最初の行はutf-8形式で入力されたワードテーブルで、各ワード間はスペースで区切られています.
次はutf-8形式でいくつかの行に入力された中国語の文です.
出力フォーマット:
utf-8形式で出力される逆最大一致の分詞結果で、各語間にスペース区切りが使用されます.各入力は1行の出力に対応します.
サンプルを入力:
あなたと私は彼が北京の天安門を愛して生命の生命の起源を研究します
生命の起源を研究する
私は北京の天安門が好きだ
出力サンプル:
生命の起源を研究する
私は北京の天安門が好きだ
私のパスできないエラーの答え:
なぜか分かりませんが、
逆方向最大マッチング分詞アルゴリズム,すなわち右から左にスキャンし,最長の語を見つけて分割する.文「生命の起源を研究する」のように、逆最大マッチング分詞アルゴリズムの出力結果は「生命の起源を研究する」である.
入力形式:
最初の行はutf-8形式で入力されたワードテーブルで、各ワード間はスペースで区切られています.
次はutf-8形式でいくつかの行に入力された中国語の文です.
出力フォーマット:
utf-8形式で出力される逆最大一致の分詞結果で、各語間にスペース区切りが使用されます.各入力は1行の出力に対応します.
サンプルを入力:
あなたと私は彼が北京の天安門を愛して生命の生命の起源を研究します
生命の起源を研究する
私は北京の天安門が好きだ
出力サンプル:
生命の起源を研究する
私は北京の天安門が好きだ
私のパスできないエラーの答え:
#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]
なぜか分かりませんが、