文本对齐

#!/usr/bin/env python
# -*- coding: utf-8  -*-


def reverse(ans):
        res = []


        for i in range(len(ans),0,-1):
                res.append(ans[i-1])
        return res


def array_to_string(terms):
        ans = ""
        for i in range(len(terms),0,-1):
                idx =  terms[i-1]
                if ans == "":
                        ans = idx
                else:
                        ans += (" "+idx)
        return ans




def array_to_string_align_result(at1,at2,align_result):
        at1_string = array_to_string(at1)
        at2_string = array_to_string(at2)
        if at1_string == "":at1_string = "[NULL]"
        if at2_string == "":at2_string = "[NULL]"
        align_result.append([at1_string,at2_string])






def align(qa,qb):
        term_a_list = qa.split(" ")
        term_b_list = qb.split(" ")


        term_a_list_size = len(term_a_list)
        term_b_list_size = len(term_b_list)
        c=[[0 for x in range(term_b_list_size+1)] for y in range(term_a_list_size+1)]
        b=[[0 for x in range(term_b_list_size+1)] for y in range(term_a_list_size+1)]


        for i in range(1,term_a_list_size+1):
                for j in range(1,term_b_list_size+1):
                        if cmp(term_a_list[i-1],term_b_list[j-1]) == 0 :
                                c[i][j] = c[i-1][j-1] + 1
                                b[i][j] = 0
                        elif c[i-1][j] >= c[i][j-1]:
                                c[i][j] = c[i-1][j]
                                b[i][j] = 1
                        else:
                                c[i][j] = c[i][j-1]
                                b[i][j] = 2


        i = term_a_list_size
        j = term_b_list_size
        at1 = []
        at2 = []
        align_result = []
        while ( i >0 and j > 0):
                if b[i][j] == 0:
                        if len(at1) > 0 or len(at2) > 0 :
                                array_to_string_align_result(at1,at2,align_result)
                                at1 = []
                                at2 = []
                        align_result.append([term_a_list[i-1],term_b_list[j-1]])
                        i -= 1
                        j -= 1
                elif b[i][j] == 1:
                        at1.append(term_a_list[i-1])
                        i-=1
                elif b[i][j] == 2:
                        at2.append(term_b_list[j-1])
                        j -=1


        while i > 0:
                at1.append(term_a_list[i-1])
                i -= 1
        while j > 0 :
                at2.append(term_b_list[j-1])
                j -= 1
        if len(at1) > 0 or len(at2) > 0:
                array_to_string_align_result(at1,at2,align_result)
                at1 = []
                at2 = []


        return reverse(align_result)


def Unit_Test(qa,qb):
        print"----------------------------"
        ans = align(qa,qb)
        print qa+"\n"+qb
        print"----------------------------"
        for idx in ans:
                print idx[0]+"-->"+idx[1]
        print "---------------------------"


if __name__ == '__main__':
        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值