2010-09-21 14 views
10

Ich bin auf der Suche nach einem Diff-Algorithmus, der Ergebnisse wie SO's Revision Revisionen Seite produzieren wird. Ich habe mehr oder weniger gerade angefangen zu schauen und ich bin nicht dagegen, es selbst zu tun, aber ich muss das Rad nicht neu erfinden.C# Diff Algorithmus für Text

Ich werde C# 4.0 verwenden. Ich werde grundsätzlich zwei Saiten haben, eine alte und eine neue. Ich möchte wissen, was sich in dem neuen geändert hat, indem ich Akzente setze und durchstreiche.

Antwort

3

In der Regel mit einem longest common substring Algorithmus implementiert. This post wird von Interesse sein.

+4

Sein nicht längste gemeinsame ** ** Teilzeichenfolge aber längst gemeinsam ** Teilfolge **:

https://code.google.com/archive/p/google-diff-match-patch/

Gut dokumentiert. Eine Teilkette ist immer stetig, aber eine Teilfolge muss nicht sein. Die Änderungen, die an altem Text vorgenommen wurden, um neuen Text zu erhalten, müssen nicht auf aufeinanderfolgenden Zeichen stehen. – codaddict

+0

Einverstanden, dass. Sie müssen zwischen dem längsten gemeinsamen Subsequenzproblem und dem längsten gemeinsamen Substringproblem klassifizieren. – quantity

5

Es basiert auf Longest common subsequence Algorithmus, im Volksmund bekannt als LCS.

LCS alten Text und neuen Text gibt den Teil, der unverändert geblieben ist. Die Teile von altem Text, die nicht Teil von LCS sind, werden also geändert.

Von der Wiki-Seite oben:

Es ist ein klassisches Computer Problem, die Grundlage des diff (ein Dateivergleichsprogramm, das die Unterschiede zwischen zwei Dateien gibt), und hat Anwendungen in der Bioinformatik.

4

Sie können einen Blick auf Menees Diff für ein in C# geschriebenes Beispiel werfen.

+0

toter Link, bitte überarbeiten. thx –

+1

Link wurde korrigiert. – cfeduke