Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: [Python-de] difflib HTML-output auf Wort-basis?

4 views
Skip to first unread message

Stefan Schwarzer

unread,
Apr 30, 2013, 1:45:20 PM4/30/13
to pyth...@python.org
Hi Hartmut,

On 2013-04-30 12:27, Hartmut Goebel wrote:
> ich m�chte Texte vergleichen und dabei die �nderungen m�glichst auf
> Basis von W�rtern angezeigt bekommen. Der Output soll dabei side-by-side
> sein, so wie difflib.HtmlDiff es erzeugt. Leider ist difflib.HtmlDiff zu
> grob, es markiert schnell gro�e Bereiche als ge�ndert, auch wenn sich
> darin nur in mehreren Zeilen ein paar W�rter ge�ndert haben.
>
> Mein Ziel ist in etwas das, was emacs' ediff macht oder github (siehe
> z.B. https://github.com/htgoebel/gitflow/commit/381443a)
>
> Hat jemand einen Tipp f�r mich?

Trac [1] - in Python geschrieben - macht so etwas auch,
siehe [2]. M�glicherweise kannst du sogar direkt Quelltext
von Trac �bernehmen.

Ich hatte mir schon mal �berlegt, wie man so etwas machen
k�nnte und kam auf die Idee, f�r jedes Zeichen eine Zeile zu
erzeugen und das Ergebnis zu "diffen". "Etwas knifflig"
k�nnte die sp�tere R�ck-Konvertierung in Zeilen sein. (Ich
habe jetzt keine Ahnung, _wie_ knifflig tats�chlich. ;-) )

[1] http://trac.edgewall.org
[2] http://ftputil.sschwarzer.net/trac/changeset/26c02d135501ab93dbe3d8d9ad13fe2dbae5bfb1

Viele Gr��e
Stefan

Andi Albrecht

unread,
Apr 30, 2013, 3:03:12 PM4/30/13
to Stefan Schwarzer, pyth...@python.org
Hi,


Am Dienstag, 30. April 2013 schrieb Stefan Schwarzer :
Hi Hartmut,

On 2013-04-30 12:27, Hartmut Goebel wrote:
> ich möchte Texte vergleichen und dabei die Änderungen möglichst auf
> Basis von Wörtern angezeigt bekommen. Der Output soll dabei side-by-side

> sein, so wie difflib.HtmlDiff es erzeugt. Leider ist difflib.HtmlDiff zu
> grob, es markiert schnell große Bereiche als geändert, auch wenn sich
> darin nur in mehreren Zeilen ein paar Wörter geändert haben.

wir haben in Rietveld ein Modul, das ähnlichen Output erzeugt: https://code.google.com/p/rietveld/source/browse/codereview/intra_region_diff.py

Das hat ein paar Abhängigkeiten zur Applikation selbst, aber man müsste auch einiges übernehmen können.

Beste Grüße,

Andi 
 
>
> Mein Ziel ist in etwas das, was emacs' ediff macht oder github (siehe
> z.B. https://github.com/htgoebel/gitflow/commit/381443a)
>
> Hat jemand einen Tipp für mich?


Trac [1] - in Python geschrieben - macht so etwas auch,
siehe [2]. Möglicherweise kannst du sogar direkt Quelltext
von Trac übernehmen.

Ich hatte mir schon mal überlegt, wie man so etwas machen
könnte und kam auf die Idee, für jedes Zeichen eine Zeile zu

erzeugen und das Ergebnis zu "diffen". "Etwas knifflig"
könnte die spätere Rück-Konvertierung in Zeilen sein. (Ich
habe jetzt keine Ahnung, _wie_ knifflig tatsächlich. ;-) )
Viele Grüße
Stefan
_______________________________________________
python-de maillist  -  pyth...@python.org
http://mail.python.org/mailman/listinfo/python-de

Reimar Bauer

unread,
Apr 30, 2013, 4:02:56 PM4/30/13
to Andi Albrecht, Stefan Schwarzer, pyth...@python.org
Um das ganze zu komplettieren, hier ist der diff2html code von moin2

http://hg.moinmo.in/moin/2.0/file/979c2ee641ac/MoinMoin/util/diff_html.py

Gruß
Reimar


2013/4/30 Andi Albrecht <albrec...@gmail.com>

Stefan Behnel

unread,
May 1, 2013, 12:30:00 AM5/1/13
to pyth...@python.org
Reimar Bauer, 30.04.2013 22:02:
> 2013/4/30 Andi Albrecht
>> Am Dienstag, 30. April 2013 schrieb Stefan Schwarzer :
>>> On 2013-04-30 12:27, Hartmut Goebel wrote:
>>>> ich möchte Texte vergleichen und dabei die Änderungen möglichst auf
>>>> Basis von Wörtern angezeigt bekommen. Der Output soll dabei side-by-side
>>>> sein, so wie difflib.HtmlDiff es erzeugt. Leider ist difflib.HtmlDiff zu
>>>> grob, es markiert schnell große Bereiche als geändert, auch wenn sich
>>>> darin nur in mehreren Zeilen ein paar Wörter geändert haben.
>>>>
>>>> Mein Ziel ist in etwas das, was emacs' ediff macht oder github (siehe
>>>> z.B. https://github.com/htgoebel/gitflow/commit/381443a)
>>>>
>>>> Hat jemand einen Tipp für mich?
>>>
>>> Trac [1] - in Python geschrieben - macht so etwas auch,
>>> siehe [2]. Möglicherweise kannst du sogar direkt Quelltext
>>> von Trac übernehmen.
>>>
>>> Ich hatte mir schon mal überlegt, wie man so etwas machen
>>> könnte und kam auf die Idee, für jedes Zeichen eine Zeile zu
>>> erzeugen und das Ergebnis zu "diffen". "Etwas knifflig"
>>> könnte die spätere Rück-Konvertierung in Zeilen sein. (Ich
>>> habe jetzt keine Ahnung, _wie_ knifflig tatsächlich. ;-) )
>>>
>>> [1] http://trac.edgewall.org
>>> [2]
>>> http://ftputil.sschwarzer.net/trac/changeset/26c02d135501ab93dbe3d8d9ad13fe2dbae5bfb1
>>
>> wir haben in Rietveld ein Modul, das ähnlichen Output erzeugt:
>> https://code.google.com/p/rietveld/source/browse/codereview/intra_region_diff.py
>>
>> Das hat ein paar Abhängigkeiten zur Applikation selbst, aber man müsste
>> auch einiges übernehmen können.
>
> Um das ganze zu komplettieren, hier ist der diff2html code von moin2
>
> http://hg.moinmo.in/moin/2.0/file/979c2ee641ac/MoinMoin/util/diff_html.py

Klingt für mich jetzt erstmal so, als hätten sich einige Projekte da Arbeit
ersparen können, wenn sie zusammen gearbeitet hätten. Aber vielleicht ist
es dazu ja noch nicht zu spät.

Stefan

Stefan Behnel

unread,
May 14, 2013, 1:42:16 AM5/14/13
to pyth...@python.org
Hartmut Goebel, 13.05.2013 15:32:
> Am 01.05.2013 06:30, schrieb Stefan Behnel:
>> Klingt für mich jetzt erstmal so, als hätten sich einige Projekte da
>> Arbeit ersparen können, wenn sie zusammen gearbeitet hätten. Aber
>> vielleicht ist es dazu ja noch nicht zu spät. Stefan
>
> Das kann ich nur unterschreiben. Ich verstehe auch nicht, weshalb
> rietveld nicht auf der difflib aufsetzt -- vielleicht ist es älter als
> die (trac ist sicher älter).

Rietveld ist wesentlich jünger als die difflib, auch als alle anderen hier
erwähnten Tools. Meine Vermutung ist eher, dass es sich als Hervorkömmling
aus Guidos "We Are Google" Zeit dem "Nicht Von Uns" Hirnschema unterordnen
musste.

Stefan

Andi Albrecht

unread,
May 14, 2013, 2:15:56 AM5/14/13
to Stefan Behnel, Die Deutsche Python Mailingliste
2013/5/14 Stefan Behnel <pyth...@behnel.de>:
Was ist denn das "Nicht Von Uns"-Hirnschema? intra_regio_diff ist
schlichtweg ein Modul, dass als Hilfsmodul in einer Applikation
entstanden ist, jetzt in dieser Applikation lebt und nie den Sprung zu
einem allein stehenden Python-Modul geschafft hat, auch wenn dies
möglich wäre. Ich denke, dass es in all den Python-Anwendungen da
draußen tausende Module dieser Art gibt :)

Beste Grüße,

Andi

Dinu Gherman

unread,
May 16, 2013, 11:37:37 AM5/16/13
to Die Deutsche Python Mailingliste
Am 14.05.2013 um 07:42 schrieb Stefan Behnel:

> Hartmut Goebel, 13.05.2013 15:32:
>> Am 01.05.2013 06:30, schrieb Stefan Behnel:
>>> Klingt für mich jetzt erstmal so, als hätten sich einige Projekte da
>>> Arbeit ersparen können, wenn sie zusammen gearbeitet hätten. Aber
>>> vielleicht ist es dazu ja noch nicht zu spät. Stefan
>>
>> Das kann ich nur unterschreiben. Ich verstehe auch nicht, weshalb
>> rietveld nicht auf der difflib aufsetzt -- vielleicht ist es älter als
>> die (trac ist sicher älter).
>
> Rietveld ist wesentlich jünger als die difflib, auch als alle anderen hier
> erwähnten Tools. Meine Vermutung ist eher, dass es sich als Hervorkömmling
> aus Guidos "We Are Google" Zeit dem "Nicht Von Uns" Hirnschema unterordnen
> musste.


Wenn ich das richtig sehe, dann benutzt rietveld intern sehr wohl difflib,
wenn auch nur difflib.SequenceMatcher und zwar hier:

rietveld/codereview/engine.py
rietveld/codereview/intra_region_diff.py
rietveld/codereview/patching.py
rietveld/codereview/patiencediff.py

Allerdings benutzt es nicht difflib.HtmlDiff, was anscheinend der Stein
des Anstoßes hier ist, richtig? Nun, vielleicht hat es nicht das gemacht,
was der BDFL brauchte.

Mich irritiert eher, das bei einem solchen Tool, das sich um die Ver-
besserung der Codequalität verdient machen will, an keiner Stelle er-
klärt wird, wofür der Name "Rietveld" steht? Ist es nach Gerrit Rietveld
(einem Architekten) oder Hugo Rietveld (einem Physiker) benannt (beide
Niederländer, klar), und warum? Oder hat jemand einfach seinen Namens-
generator angeworfen?

Gruß,

Dinu

Massa, Harald Armin

unread,
May 16, 2013, 12:08:05 PM5/16/13
to Dinu Gherman, Die Deutsche Python Mailingliste
Dinu,

Mich irritiert eher, das bei einem solchen Tool, das sich um die Ver-
besserung der Codequalität verdient machen will, an keiner Stelle er-
klärt wird, wofür der Name "Rietveld" steht? Ist es nach Gerrit Rietveld
(einem Architekten) oder Hugo Rietveld (einem Physiker) benannt (beide
Niederländer, klar), und warum? Oder hat jemand einfach seinen Namens-
generator angeworfen?

das wurde vom BDFL auf einer Konferenz verkündet, es ist nach dem Architekten Gerrit Rietveld benannt.

Ist halt wie in allen großen Weltbewegungen, es reicht irgendwann nicht mehr, die Schrift alleine  zu lesen, auch die Kommentare und die Protokolle der gesprochenen Worte des BDFL zählen zum Kanon.

Gruß

Harald
-- 

GHUM GmbH
Harald Armin Massa
Spielberger Straße 49
70435 Stuttgart
0173/9409607

Amtsgericht Stuttgart, HRB 734971

Andi Albrecht

unread,
May 16, 2013, 3:17:22 PM5/16/13
to Dinu Gherman, Die Deutsche Python Mailingliste
Hi Dinu,

2013/5/16 Dinu Gherman <ghe...@darwin.in-berlin.de>:
> Am 14.05.2013 um 07:42 schrieb Stefan Behnel:
>
>> Hartmut Goebel, 13.05.2013 15:32:
>>> Am 01.05.2013 06:30, schrieb Stefan Behnel:
>>>> Klingt für mich jetzt erstmal so, als hätten sich einige Projekte da
>>>> Arbeit ersparen können, wenn sie zusammen gearbeitet hätten. Aber
>>>> vielleicht ist es dazu ja noch nicht zu spät. Stefan
>>>
>>> Das kann ich nur unterschreiben. Ich verstehe auch nicht, weshalb
>>> rietveld nicht auf der difflib aufsetzt -- vielleicht ist es älter als
>>> die (trac ist sicher älter).
>>
>> Rietveld ist wesentlich jünger als die difflib, auch als alle anderen hier
>> erwähnten Tools. Meine Vermutung ist eher, dass es sich als Hervorkömmling
>> aus Guidos "We Are Google" Zeit dem "Nicht Von Uns" Hirnschema unterordnen
>> musste.
>
>
> Wenn ich das richtig sehe, dann benutzt rietveld intern sehr wohl difflib,
> wenn auch nur difflib.SequenceMatcher und zwar hier:
>
> rietveld/codereview/engine.py
> rietveld/codereview/intra_region_diff.py
> rietveld/codereview/patching.py
> rietveld/codereview/patiencediff.py
>
> Allerdings benutzt es nicht difflib.HtmlDiff, was anscheinend der Stein
> des Anstoßes hier ist, richtig? Nun, vielleicht hat es nicht das gemacht,
> was der BDFL brauchte.
>
> Mich irritiert eher, das bei einem solchen Tool, das sich um die Ver-
> besserung der Codequalität verdient machen will, an keiner Stelle er-
> klärt wird, wofür der Name "Rietveld" steht? Ist es nach Gerrit Rietveld
> (einem Architekten) oder Hugo Rietveld (einem Physiker) benannt (beide
> Niederländer, klar), und warum? Oder hat jemand einfach seinen Namens-
> generator angeworfen?

die Namensgebung und das warum ist ausführlich im Projekt-Wiki
beschrieben: https://code.google.com/p/rietveld/wiki/CodeReviewBackground

Beste Grüße,

Andi

>
> Gruß,
>
> Dinu

Dinu Gherman

unread,
May 16, 2013, 4:11:38 PM5/16/13
to Andi Albrecht, Die Deutsche Python Mailingliste
Andi Albrecht:

> die Namensgebung und das warum ist ausführlich im Projekt-Wiki
> beschrieben: https://code.google.com/p/rietveld/wiki/CodeReviewBackground

Aha, na dann. Vielleicht bin ich da pedantisch, aber ich finde, so eine
Information gehört in die Distribution, ins Readme. Oder so, wie es z.B.
Django macht (in docs/faq/general.txt unter "What does "Django" mean, and
how do you pronounce it?") oder Python selbst (Doc/faq/general.rst, unter
"Why is it called Python?").

Aber wie gesagt, ich will das nicht zum Aufreger machen, auch wenn ich
da vielleicht ein wenig der alten Schule anhänge...

BTW, hat jemand mal versucht, für solche diffs ein bischen echte "rocket
science" zu benutzen? Ich denke da an Sequenzanalysen aus dem Mol-Bio-
Bereich, siehe biopython.org.

Gruß,

Dinu

0 new messages