【问题标题】:Efficient way to store tuples of diff info without redundancy无冗余存储差异信息元组的有效方法
【发布时间】:2014-11-30 12:50:09
【问题描述】:

我有这个正文How can I run java script from a local folder?

这个diff.diff_main(diff(), "How can I run java script from a local folder?","How can I run Javascript from a local folder?")

返回[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')]

这个短字符串不是什么大问题,但它有更大的字符串,比如 40,000 个字符,这在我的应用程序中很常见。为了清晰和可读性,我选择了这个短字符串,但是我正在寻找一种存储文本位置(从开始位置到结束位置)而不是实际文本的方法。最终会与原文匹配。

例如,,而不是[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')],我将使用[(0, '0,14'), (-1, 'j'), (1, 'J'), (0, '15,18'), (-1, ' '), (0, '19,44')]

它将从以元组编码的位置解码,例如 0,14 是从位置 0 到 14 或 How can I run ,,, 15,18 从位置 15 到 18 在原始文本或 ava 等,,

以后可以像originaltext[0:14]这样检索,,,

我已经试过了,它非常接近

a=[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')]

b='How can I run java script from a local folder?'

result={}

positioncount = 0
for x, y in enumerate(a):
    if y[0] == 0:
        if positioncount == 0:
            result[x]={y[0]:len(y[1])}
            positioncount+=len(y[1])
        else:
            result[x]={y[0]:(len(y[1])+positioncount,len(y[1]))}
    else:
        result[x]={y[0]:y[1]}
        positioncount-=len(y[1])

但是print result 是给我{0: {0: 14}, 1: {-1: 'j'}, 2: {1: 'J'}, 3: {0: (15, 3)}, 4: {-1: ' '}, 5: {0: (38, 27)}} 并且不正确,因为它应该给{0: {0: 14}, 1: {-1: 'j'}, 2: {1: 'J'}, 3: {0: (15, 18)}, 4: {-1: ' '}, 5: {0: (19, 44)}}

我在这里做错了什么?有没有办法做到这一点?如果您有任何选择,我很乐意接受!

【问题讨论】:

    标签: python encoding compression google-diff-match-patch


    【解决方案1】:

    为什么要创建以运行索引为键的字典? 试试这个:

    a=[(0, 'How can I run '), (-1, 'j'), (1, 'J'), (0, 'ava'), (-1, ' '), (0, 'script from a local folder?')]
    
    b='How can I run java script from a local folder?'
    
    result = []
    
    position = 0
    for v, txt in a:
        if v == 0:
            result.append((0, (position, position+len(txt))))
        else:
            result.append((v, txt))
        if v<=0:
            position += len(txt)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多