Java-Bibliothek für frei-text-diff
Ich müssen zu entsprechen, zwei fast-das-gleiche lange freetext-strings; d.h., zu finden-index-index Korrespondenzen, wo immer möglich.
Weil das ist freetext, der Vergleich sollte nicht die Linie-wie im code diff.
Anregungen für Java-Bibliotheken?
Einem einfachen Beispiel (Im wirklichen Leben , natürlich, es würde keinen zusätzlichen Leerraum Linie die Dinge, und es kann mehr komplexe Herausforderungen wie die gesamten Klauseln bewegt werden.)
The quick brown fox jumped over the lazy dog.
|||||||||| ||||||||||||||||||||| |||||
The quick yellow fox jumped over the well-bred dog.
InformationsquelleAutor der Frage Joshua Fox | 2009-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese könnte man gut Diff-Match-Patch.
InformationsquelleAutor der Antwort Joshua Fox
Je nach Ihren genauen Anforderungen, die
StringUtils
Klasse der Apache Commons Lang Komponente, die hilfreich sein könnten, z.B.:InformationsquelleAutor der Antwort Fabian Steeg
Hier ist ein (leicht-getestet) version der code das tut, was Sie gefragt. Sie können leicht durchqueren das Ergebnis parallel mit den Eingängen zu suchen, Einfügungen und Löschungen.
Entsprechend, die tatsächliche längste Teilfolge von Ihrem ursprünglichen Eingänge:
ist:
(da "Braun" und "gelb" haben, "ow" in common, etc.)
Ist es relativ einfach zu ändern die oben genannten split auf Leerzeichen (anstatt in char-arrays) und Ersatz-String#equals für ==, um eine version, die feststellt, die längste gemeinsame Teilfolge von Wörtern anstelle von Zeichen. Für dein Beispiel oben, ändern produzieren würde, das offensichtliche Ergebnis:
(Ihre Frage implizite Charakter Vergleiche, wie Sie abgestimmt die Leerzeichen zwischen den Wörtern.)
InformationsquelleAutor der Antwort joel.neely
Wenn Sie Beispiel ist wirklich das, was Sie tun möchten - ie-untersequenzen nur entsprechen, wenn Sie beginnen, auf den gleichen index (was ist anders, wie diffs arbeiten normalerweise) - das ist alles, was Sie tun müssen:
Einer tatsächlichen diff Umsetzung weitaus komplexer.
InformationsquelleAutor der Antwort Christoph