問題タブ [google-diff-match-patch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 冗長性のない差分情報のタプルを保存する効率的な方法
私はこの本文を持っています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]
、、、
私はこれで試してみましたが、非常に近くなります
しかし、それ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)}}
ここで何が間違っていますか?とにかくこれを正しく行うことはありますか?代替案があれば、喜んでお受けします。
java - Java での 2 つの段落変更の比較
ユーザーがテキスト領域を変更できるJava Webアプリケーションに取り組んでいます。これで、彼は1つの段落、1つの文を書くことができます. だから私が現在やろうとしているのは、段落全体をドット区切りで分割することです。それができたら、どの文章が変わったのかを確認したいと思います。現在、for ループを使用して実行していますが、両方の String 配列の Math.minimum までの配列の長さにする必要があるため、正確ではありません。しかし、それは機能していません。私はそれから変更された文字列をゼロにしています。私が間違っていることを教えてください。
コード :
したがって、基本的に両方の文字列で、どの文が変更されたかを保存したいと思います。それで全部です。教えてください。ありがとう。便宜上、ドット区切りを使用しているだけです。他に高度な正規表現があれば、それを使用してもかまいません。どうもありがとう。:-)
編集 提案に従って、Google diff-match-patch ライブラリを使用しようとしています。これは私が見つけることができたものですが、それでも違いを分離することに成功していません. それらをデータベースに永続化する必要があるため、それらにもマークを付ける必要がありますが、まだ持っていません。私のコード:
テキストを印刷すると、2 つの段落全体が表示されます。私は何を間違っていますか?
java - Java : Google-diff-match-patch で効果のある文を取得する
- 私は2つの段落を比較し、比較する2つの文字列で異なる文を取得したいJavaアプリケーションに取り組んでいます。これで、挿入されたものと削除されたものを取得できます。私が直面している問題は、言葉だけでなく、影響を受けた文を取得したいということです。
例 :
- Old String : 素早い茶色のキツネが怠惰なウサギを飛び越えました。好奇心が猫を殺した。
- New String : 素早い茶色のライオンが怠け者のウサギを飛び越えました。好奇心が猫を殺した。
期待される出力 : 素早い茶色のライオンが怠け者のウサギを飛び越えました。
私が今得ているもの。
そのため、fox という単語がどこで削除され、どこで lion が追加されたかについての文脈はわかりません。なので、何らかの操作をしたものの左右に15文字でも構いません。私が今持っているコード:
どんな助けでもいいでしょう。どうもありがとう。:-) 私が説明した方法に疑問がある場合は、お知らせください。
回答から追加された新しいコードを編集:
データベースに適切に保存できるように、単語/文全体が挿入されたときにいつ削除されるかを知りたいです。どんな助けでもいいでしょう。どうもありがとう。:-)
編集 以下の回答は、データベースに永続化できる2つの個別の文字列を取得するために完全に機能します。
c# - DiffMatchPatch の使用例
ここでルールを破っていないことを願っています。別の投稿について質問がありますが、私は stackoverflow をあまり使用していないため、評判が低すぎて、自分のものではない質問や回答にコメントを追加できません。
この質問について: 2 つのリッチ テキスト ボックスの内容を比較し、変更された文字を強調表示する方法は?
TaW はいくつかのサンプル C# コードを提供し、Visual Studio プロジェクトでそれを利用しました。しかし、私たちは問題を発見し、それを修正する方法がわかりません。
RTB1 に "My name is David" というテキストが含まれ、RTB2 に "My name is" というテキストが含まれている場合、比較の実行後に diff コレクションに 2 つの diff が存在し、何らかの形でリッチ テキスト ボックスが書き直されて相違点が表示されます。 、RTB1 は RTB2 と完全に一致し、何も強調表示されません。おそらくこれは予期された動作であり、私たちはそれを認識していませんが、RTB1 のテキスト「David」が強調表示されることを望んでいました.
RTB2 のテキストが "My name is " (行末に 2 つのスペースを追加) の場合、期待どおりの動作が得られます。
TaW の C# コードに相当する VB.NET を作成し、違いに気付いたことを言及する必要がありました。コメントの違いに気づきました。
私が 50 までの評判だった場合、私はコメントに、彼の例を共有してくれたTaWと DiffMatchPatchの作成者に非常に感謝していると付け加えたでしょう。