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

问题

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

结语

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值