1

私はこの本文を持っています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')]

タプルでエンコードされた位置からデコードされHow can I run ます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)}}

ここで何が間違っていますか?とにかくこれを正しく行うことはありますか?代替案があれば、喜んでお受けします。

4

1 に答える 1

0

実行中のインデックスをキーとして辞書を作成するのはなぜですか? これを試して:

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)
于 2014-11-30T13:18:38.333 に答える