问题
将以下4种方法的分词结果对齐分块。
['目的', '将', '有限元分析', '技术', '运用', '于', '空调', '包装件', '的', '静态堆码', '和', '跌落', '冲击', '性能', '分析', '和', '优化', '设计', '中。', '方法', '运用', '有限元分析软件', ',', '建立', '空调', '、', '缓冲', '衬垫', '的', '有限元模型。'],
['目', '的', '将', '有', '限元', '分析', '技术', '运用', '于', '空调', '包装件', '的', '静态', '堆码', '和', '跌落', '冲击', '性能', '分析', '和', '优化', '设计', '中', '。', '方法', '运用', '有限', '元', '分析', '软件', ',', '建立', '空调', '、', '缓冲', '衬垫', '的', '有限', '元', '模型', '。'],
['目的', '将', '有', '限元', '分析', '技术', '运用', '于', '空调', '包装件', '的', '静态', '堆码', '和', '跌落', '冲击', '性能', '分析', '和', '优化', '设计', '中', '。', '方法', '运用', '有', '限元', '分析', '软件', ',', '建立', '空调', '、', '缓冲', '衬垫', '的', '有', '限元', '模型', '。'],
['目的', '将', '有限元', '分析', '技术', '运用于', '空调', '包装', '件', '的', '静态', '堆码', '和', '跌落', '冲击', '性能', '分析', '和', '优化设计', '中', '。', '方法', '运用', '有限元', '分析', '软件', ',', '建立', '空调', '、', '缓冲', '衬垫', '的', '有限元', '模型', '。']
得到以下分块结果:
[
[['目的'], ['目', '的'], ['目的'], ['目的']],
[['将'], ['将'], ['将'], ['将']],
[['有限元分析'], ['有', '限元', '分析'], ['有', '限元', '分析'], ['有限元', '分析']],
[['技术'], ['技术'], ['技术'], ['技术']],
[['运用', '于'], ['运用', '于'], ['运用', '于'], ['运用于']],
[['空调'], ['空调'], ['空调'], ['空调']],
[['包装件'], ['包装件'], ['包装件'], ['包装', '件']],
[['的'], ['的'], ['的'], ['的']],
[['静态堆码'], ['静态', '堆码'], ['静态', '堆码'], ['静态', '堆码']],
[['和'], ['和'], ['和'], ['和']],
[['跌落'], ['跌落'], ['跌落'], ['跌落']],
[['冲击'], ['冲击'], ['冲击'], ['冲击']],
[['性能'], ['性能'], ['性能'], ['性能']],
[['分析'], ['分析'], ['分析'], ['分析']],
[['和'], ['和'], ['和'], ['和']],
[['优化', '设计'], ['优化', '设计'], ['优化', '设计'], ['优化设计']],
[['中。'], ['中', '。'], ['中', '。'], ['中', '。']],
[['方法'], ['方法'], ['方法'], ['方法']],
[['运用'], ['运用'], ['运用'], ['运用']],
[['有限元分析软件'], ['有限', '元', '分析', '软件'], ['有', '限元', '分析', '软件'], ['有限元', '分析', '软件']],
[[','], [','], [','], [',']],
[['建立'], ['建立'], ['建立'], ['建立']],
[['空调'], ['空调'], ['空调'], ['空调']],
[['、'], ['、'], ['、'], ['、']],
[['缓冲'], ['缓冲'], ['缓冲'], ['缓冲']],
[['衬垫'], ['衬垫'], ['衬垫'], ['衬垫']],
[['的'], ['的'], ['的'], ['的']],
[['有限元模型。'], ['有限', '元', '模型', '。'], ['有', '限元', '模型', '。'], ['有限元', '模型', '。']]
]
算法代码
new_methods_lst_lst=[<上面的数据>]
"合并多种方法的分词->分块"
methods_num=len(new_methods_lst_lst)
position_results = []#[[] for i in range(methods_num)]
methods_position_len_rec=[0]*methods_num #各种方法的临时位置
tmp_len=0 #字符串连接的长度
count=0 #方法个数的计数
rec=0 #第几种方法
while True:
which_methhod_token=new_methods_lst_lst[rec]
for i in range(len(which_methhod_token)):
split_len=len("".join(which_methhod_token[:i + 1]))
if split_len==tmp_len:
methods_position_len_rec[rec]=i
break
elif split_len>tmp_len:
tmp_len = split_len
methods_position_len_rec[rec] = i
count = 0
break
rec+=1
if rec==methods_num:
rec=0
count+=1
if count==methods_num:
z=[]
for i in range(methods_num):
z.append(new_methods_lst_lst[i][:methods_position_len_rec[i]+1])
new_methods_lst_lst[i]=new_methods_lst_lst[i][methods_position_len_rec[i]+1:]
position_results.append(z)
tmp_len=0
if not all(new_methods_lst_lst):
break
count=0
print("结果",position_results)
结语
实际情况超级难或者超级麻烦,这里用循环的方式暂时解决这个问题,这代码是我写的第二个版本,第一个版本写得更复杂,这个版本基于第一个版本的优化。不过还有个递归实现的想法不清楚能不能实现。