多种分词方法合并对齐分块算法

it2025-01-13  5

问题

将以下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)

结语

实际情况超级难或者超级麻烦,这里用循环的方式暂时解决这个问题,这代码是我写的第二个版本,第一个版本写得更复杂,这个版本基于第一个版本的优化。不过还有个递归实现的想法不清楚能不能实现。

最新回复(0)