Was ist der beste (Wort oder Zeichen) -basierte Diff-Algorithmus?

8

Also, ich möchte in der Lage sein, den Unterschied zwischen zwei Zeichenketten auf einer Wortbasis zu finden (vielleicht schneller als pro Zeichen, obwohl, wenn pro Zeichen schneller ist, würde ich es so machen wollen) .

Hier ist ein Beispiel für das, was ich erreichen möchte: Quelltext:

%Vor%

Geänderter Text:

%Vor%

diff:

%Vor%
  • Der geklammerte Text wurde entfernt, der in Klammern gesetzte Text wurde hinzugefügt

es gibt eine Art super hackish Weg, dies mit einem Kommandozeilen-Tool, wie opendiff , aber es erfordert einen Zeilenumbruch Zeichen zwischen jedem Zeichen, da openend linienbasiert ist.

Ich benutze Ruby und habe keine Werkzeuge dafür gefunden ... aber Sprache ist nicht sehr wichtig, da Algorithmen ziemlich einfach portiert werden können.

danke.

    
NullVoxPopuli 05.12.2011, 20:54
quelle

5 Antworten

2

Hier ist ein Ruby-Juwel, das Streicher differiert: Ссылка

Vor der Hand habe ich gerade (in irb)

%Vor%

Somit wird das Schreiben der zu einzufügenden Logik, der entfernten und eingefügten Markerseiten dank dieses 2D-Diff-Array von Änderungen trivial.

Obwohl ich mir nicht sicher bin, ob das der beste Weg ist.

    
NullVoxPopuli 05.12.2011, 21:32
quelle
2

Sie können dies überprüfen: Ссылка . Es ist nicht schwer zu implementieren.

    
Victor Moroz 05.12.2011 21:53
quelle
2

Was Sie also tun können, verwenden Sie wiederholt die LCS (wie oben verlinkt), um alle gängigen Strings zu finden, und entfernen Sie sie von beiden Strings, ersetzen Sie sie durch einen anderen String - sagen wir einfach ein "*". Dann durchlaufen Sie beide Zeichenketten gleichzeitig und mesh das Gemeinsame und das Unterteil wieder zusammen.

Beispiel

%Vor%

Und von hier aus musst du einfach Meshing machen. Etwas zu beachten ist, dass es möglicherweise Null Einträge gibt, zum Beispiel, wenn Sie diese Methode auf "Hell" und "Hel" machen, werden Sie schließlich

bekommen %Vor%

Hoffentlich ist das akzeptabel.

    
Noxville 06.12.2011 09:26
quelle
2

Schauen Sie sich Ссылка an. Dieses Juwel macht, wonach du suchst

    
alex 27.12.2013 22:42
quelle
0

Eine Lösung wird sein, den Bearbeitungsabstand zwischen den Saiten zu finden.

    
Bhavana C 06.12.2011 02:32
quelle

Tags und Links