Naar de inhoud
Quaestio

Teksten vergelijken

Plak het origineel en de gewijzigde versie, dan wordt elk verschil gemarkeerd, tot op losse woorden.

Plak tekst in beide velden om te vergelijken.

Insluiten

Deze tool op je eigen site insluiten

Kopieer de code en plak die waar de tool moet verschijnen, bijvoorbeeld in een blogbericht of op een schoolpagina. Het is gratis, het kader heeft geen advertenties en de tool rekent in de browser van de bezoeker.

Zo werkt het

De vergelijking zoekt de kortste reeks toegevoegde en verwijderde regels die de ene tekst in de andere verandert, met het algoritme van Eugene Myers uit 1986. Het is dezelfde methode die git standaard gebruikt. Gewijzigde regels worden daarna woord voor woord vergeleken, zodat je precies ziet wat er verschilt.

Toegevoegde regels krijgen een groene achtergrond en verwijderde een rode. Een gewijzigde regel telt als een verwijderde en een toegevoegde, net als in andere diff-tools.

Hoofdletters negeren behandelt Hallo en hallo als gelijk. Witruimte negeren houdt geen rekening met spaties aan het begin en eind van een regel en met meerdere spaties achter elkaar, wat helpt als de inspringing is veranderd.

Unified diff is het tekstformaat dat diff -u oplevert, met drie regels context rond elke wijziging. Je kunt het in een bugmelding plakken of laten inlezen door patch en git apply.

Je teksten verlaten nooit je browser. Heel lange teksten die bijna volledig verschillen, worden niet regel voor regel vergeleken; dan worden alle regels als gewijzigd getoond.

Zo vergelijkt de tool

Eerst worden gelijke regels aan het begin en het eind apart gezet, omdat die bij geen enkele wijziging kunnen horen. Daartussen zoekt het algoritme van Myers de kortste reeks verwijderde en toegevoegde regels. Regeleinden met CR LF of alleen CR worden vooraf LF, zodat dezelfde tekst uit Windows en van een Mac als gelijk telt. Binnen een wijziging staan verwijderde regels vóór toegevoegde, en ze worden op volgorde gekoppeld voor de vergelijking woord voor woord. Woorden worden gesplitst bij spaties en leestekens, dus een gewijzigde komma wordt apart gemarkeerd.

Rekenvoorbeeld

Vergelijk de regels appel, druif, kers met appel, witte druif, kers, dadel, allebei met een regelovergang na de laatste regel. Het algoritme houdt appel en kers, verwijdert druif en voegt witte druif en dadel toe: twee regels toegevoegd en één verwijderd. De regel witte druif wordt aan druif gekoppeld, en alleen het woord witte met de spatie erna wordt als nieuw gemarkeerd. In unified diff is dit één blok met de kop @@ -1,3 +1,4 @@: het begint in beide teksten op regel 1 en beslaat drie regels van de oude tekst en vier van de nieuwe.

Zonder regelovergang na de laatste regel verandert het resultaat. Volgens GNU Diffutils is een laatste regel zonder regelovergang niet gelijk aan dezelfde regel met regelovergang, en kers was alleen in de oude tekst de laatste regel. De tool toont kers dan als verwijderd en toegevoegd, drie regels toegevoegd en twee verwijderd, en schrijft \ No newline at end of file na de laatste regel van beide teksten, zoals diff -u doet. Naast elkaar en in één kolom krijgt de verwijderde regel kers de markering ‘geen regeleinde aan het eind’, omdat hij er anders onveranderd uitziet. Witruimte negeren laat dat verschil buiten beschouwing.

Grenzen

Het werk is beperkt tot 4.000 wijzigingen op regelniveau. Twee teksten van elk 2.001 totaal verschillende regels gaan over die grens, en dan worden alle regels zonder vergelijking als verwijderd en toegevoegd getoond. Op woordniveau ligt de grens op 2.000 wijzigingen per regelpaar, en is meer dan 80% van de tekens veranderd, dan wordt de regel in zijn geheel getoond, zonder markering per woord.

Wat niet zichtbaar wordt

Verplaatste blokken worden niet herkend, omdat het algoritme alleen verwijderen en toevoegen kent. Verplaats je de eerste twee regels van een tekst van vijf regels naar vlak voor de laatste, dan toont de tool twee regels verwijderd en twee toegevoegd. Witruimte negeren voegt spaties binnen een regel samen maar haalt ze niet weg: a,b en a, b tellen nog steeds als verschillend.

Bronnen

Zo worden de tools gecontroleerd