タイトル:N文は、それぞれの文は、現在、再び一緒に短い文スプライシングに隣接する文のように最小数を必要とし、長さは、スプライシングが完了した後、文の長さ、まだmより大きくない、そして、Mに等しい未満の長さよりも、あります最小分散。スプライシングを探しています。
問題解決のための(自分自身アウトの質問の要件に沿ってsent_comb3セグメンテーション):
#- * -コーディング:UTF-8 - * - インポートNPとしてnumpyの DEF sent_comb1(= 35 MAX_LEN sent_lens、 ): "" " 先求总长的平均长度、再切分""" 場合 <=(sent_lens)和MAX_LEN : リターン[リスト(sent_lens)] avg_len = SUM(sent_lens)// np.ceil(和(sent_lens)/ MAX_LEN) RLTS = [] のため sent_len にsent_lens: もし(ない RLTS)又は RLTS(及び和(RLTS [ - 1])> = avg_len): rlts.append([sent_len]) のelifSUM(RLTS [-1])+ sent_len <= MAX_LEN: RLTS [ -1 ] .append(sent_len) 他: rlts.append([sent_len]) 戻りRLTS DEF sent_comb2(sent_lens、MAX_LEN = 35 ): "" " ファースト両者のそれぞれの平均長さを求め、次にスライス"" " IF SUM(sent_lens)を<= MAX_LEN: リターン[リスト(sent_lens)] small_sent_lens = [] のため sent_len にsent_lens: IF SUM(small_sent_lens)+ sent_len> 2 * MAX_LEN: BREAK small_sent_lens.append(sent_len) small_sent_lens_sum = SUM(small_sent_lens) avg_len = small_sent_lens_sum // np.ceil(small_sent_lens_sum / MAX_LEN) RLTS = [] RLT = [] ながらlenは(sent_lens): sent_len = sent_lens [0] であれば和(RLT) > = avg_len: rlts.append(RLT) rlts.extend(sent_comb2(sent_lens)) ブレーク のelif和(RLT)+ sent_len <= MAX_LEN: rlt.append(sent_len) sent_lens = sent_lens [1:] 他: rlts.append(RLT) rlts.extend(sent_comb2(sent_lens)) BREAK リターンRLTS DEF sent_comb3(= 35 MAX_LEN sent_lens、 :) "" " 次に、分割前、および2つのそれぞれの平均長さを決定し、そしてセグメンテーションは、2つの同じ停止動作の結果まで、上記の手順を繰り返し"" " IF SUM(sent_lens)<= :MAX_LEN リターン[一覧(sent_lens)] RLTS = [] のために sent_len にsent_lens: IF ないRLTS: rlts.append ([sent_len]) のelif SUM(RLTS [-1])+ sent_len <= -1 MAX_LEN。 RLTS [] .append(sent_len) 他: rlts.append([sent_len]) 一方TRUE: new_rlts = [RLTS [0] 、I = 1 ながら、 iが< lenの(RLTS): small_sent_lens = new_rlts [-1] + RLTS [I] avg_len = SUM(small_sent_lens)// 2 RLT = [] ながらlenは(small_sent_lens): sent_len = small_sent_lens [0] であれば和(RLT)> = avg_len: ブレーク elifの合計(RLT)+ sent_len <= MAX_LEN: rlt.append(sent_len) small_sent_lens = small_sent_lens [1 :] 他: ブレーク new_rlts [ -1] = RLT new_rlts.append(small_sent_lens) I + = 1 の場合 new_rlts == RLTS: ブレーク RLTS = new_rlts 戻りRLTS DEF ()主要: MAX_LEN = 35 #sent_lens = np.random.randint(1、MAX_LEN、サイズ= 20) sent_lens = [7、11、12、31、1、1、26、2、7、22、1、14、28、1、1、34、24、32、10、31 ] #sent_lens = [34、1 、34、1、30、1] 印刷(sent_lens) インポートはtimeit START_TIME = timeit.default_timer() comb_rlt1 = sent_comb1(sent_lens、MAX_LEN = MAX_LEN) プリント(timeit.default_timer() - START_TIME) プリント(comb_rlt1) #のプリント([ comb_rlt1])における櫛のための合計(櫛) START_TIME = timeit.default_timer() comb_rlt2 = sent_comb2(sent_lens、MAX_LEN = MAX_LEN) 印刷(timeit.default_timer() - START_TIME) プリント(comb_rlt2) #1 ([comb_rlt2の櫛形ため和(櫛)])印刷 START_TIME = timeit.default_timer() comb_rlt3 = sent_comb3(sent_lens、MAX_LEN = MAX_LEN) プリント(timeit.default_timer( ) - START_TIME) プリント(comb_rlt3) #1 [comb_rlt3における櫛のための合計(櫛)]プリント() 場合 __name__ == " __main__ " : main()の