Text-Deduplizierungstool
Entfernen Sie schnell doppelte Inhalte aus Text, unterstützt Zeilen-, Wort- und Satz-Deduplizierung
Was ist Text-Deduplizierung?
Text Deduplicate entfernt wiederholte Zeilen, Wörter oder Einträge aus einem Text und hilft, Listen sauberer und besser prüfbar zu machen. Es ist nützlich für importierte CSV-Ausschnitte, Keyword-Listen, E-Mail-Sammlungen, Logfragmente, Produktcodes, Prompt-Varianten und Notizen, in denen Duplikate durch Kopieren, Zusammenführen oder fehlerhafte Exporte entstanden sind. Entscheidend sind die Vergleichsregeln: Groß- und Kleinschreibung, führende oder abschließende Leerzeichen, leere Zeilen, Satzzeichen und Reihenfolge können bestimmen, ob zwei Einträge wirklich gleich sind. Das Werkzeug beschleunigt die Bereinigung, ersetzt aber keine fachliche Prüfung, wenn ähnliche Einträge absichtlich getrennt bleiben müssen oder kleine Unterschiede eine Bedeutung tragen.
Anleitung
Grundoperationen
- Text zum Deduplizieren in das linke Textfeld eingeben oder einfügen.
- Den passenden Deduplizierungsmodus wählen (nach Zeile, Wort, Satz usw.).
- Bei Bedarf Optionen anpassen (Groß-/Kleinschreibung beachten, Reihenfolge beibehalten usw.).
- Echtzeit-Duplikatergebnisse und Statistiken rechts anzeigen.
- Auf die Kopierschaltfläche klicken, um Ergebnisse in die Zwischenablage zu kopieren.
Modusbeschreibung
- Nach Zeile: Jede Zeile wird als eigenständige Einheit behandelt, identische Zeilen werden entfernt.
- Nach Wort: Text wird nach Leerzeichen geteilt, doppelte Wörter werden entfernt.
- Nach Satz: Text wird nach Punkten, Fragezeichen und Ausrufezeichen geteilt, doppelte Sätze werden entfernt.
- Nach Absatz: Text wird nach Leerzeilen geteilt, doppelte Absätze werden entfernt.
- Nach Zeichen: Zeichen, die mehrfach im Text vorkommen, werden entfernt.
Anwendungsfälle
Technisches Prinzip
Deduplizierung ist ein einstufiger Durchlauf, der auf einem JavaScript Set basiert. Das ECMAScript-Set verwendet den SameValueZero-Gleichheitsalgorithmus (dieselbe Vergleichslogik wie Array.prototype.includes, wobei NaN gleich NaN ist, aber +0 gleich -0). Die Spezifikation garantiert eine sublineare durchschnittliche Lookup-Zeit – V8 implementiert es als Hash-Tabelle mit offener Adressierung mit amortisiertem O(1) für Insert, sodass der gesamte Durchlauf O(n) in der Anzahl der Elemente beträgt. Der naive Ansatz – jedes Element in ein Ergebnis-Array zu pushen und indexOf aufzurufen – ist O(n²) und wird ab etwa 10.000 Einträgen langsam. Die Zerlegung ist modusspezifisch: Zeilenmodus teilt an /\r?\n/ auf, um sowohl CRLF (Windows) als auch LF (Unix) Zeilenenden zu erfassen, Wortmodus an /\s+/, Satzmodus an /(?<=[.!?])\s+/ und Absatzmodus an /\n{2,}/. Jede Einheit durchläuft optionale Normalisierer, bevor sie zum Set-Schlüssel wird: trim() zum Entfernen von führenden und abschließenden Leerzeichen, toLowerCase() für großschreibungsunempfindlichen Abgleich und String.prototype.normalize('NFC'), damit visuell identische Zeichenketten aus zusammengesetztem (é, U+00E9) und zerlegtem (e + U+0301) Zeichen zu einem einzigen Eintrag zusammenfallen. Die Reihenfolge bleibt erhalten, da das Ergebnis-Array in Iterationsreihenfolge aufgebaut wird – das Set dient nur als „Habe ich das schon gesehen?“-Filter. Dieselbe Datenstruktur liegt SQL DISTINCT und Python set() zugrunde; die einzige echte Alternative für zehn Millionen Elemente ist ein probabilistischer Bloom-Filter, der eine geringe False-Positive-Rate (ca. 1 % bei 10 Bit pro Element) gegen konstanten Speicher tauscht und für ein browserseitiges Text-Tool überdimensioniert ist.
- Set-Suche verwendet den SameValueZero-Algorithmus (ECMA-262 §7.2.10) – NaN passt zu NaN, +0 passt zu -0, sonst strikte Gleichheit
- V8 implementiert Set als Hash-Tabelle; insert und has sind amortisiert O(1), sodass die gesamte Deduplizierung O(n) gegenüber indexOf-basiertem O(n²) beträgt
- Zeilenmodus-Regex /\r?\n/ behandelt CRLF, LF und abschließendes CR in einem einzigen Split; wird dies ignoriert, bleiben unsichtbare '\r'-Suffixe erhalten, die den exakten Abgleich vereiteln
- Unicode-Normalisierung über String.prototype.normalize('NFC') fasst zusammengesetzte/zerlegte Formen (z. B. 'é' U+00E9 vs. 'e' + U+0301) zu einem Schlüssel zusammen
- Großschreibungsunempfindlicher Modus setzt nur den Schlüssel klein – der Originalwert in Groß-/Kleinschreibung bleibt in der Ausgabe erhalten, sodass das erste 'ERROR' original beibehalten wird und spätere 'error'-Zeilen verworfen werden
- Reihenfolgeerhaltung ist kostenlos: Das Ergebnis-Array wird in Eingabereihenfolge aufgebaut und das Set dient nur als Filter, sodass es sich wie SQL DISTINCT mit stabiler Sortierung verhält
- Für 10 Mio.+ Elemente, bei denen der Speicher zum Engpass wird, ersetzt ein Bloom-Filter (ca. 10 Bit/Element für 1 % False-Positive-Rate) das Set – im Browser nicht nötig, da ein Set von 1 Mio. Strings bequem unter 100 MB bleibt
Beispiele
Zeilen-Deduplizierung, erstes Vorkommen behalten
Eingabe:
apple
banana
apple
orange
banana
Ausgabe:
apple
banana
orangeZeilen-Deduplizierung mit Trimmen von Leerzeichen
Eingabe:
hello
hello
hello
world
Ausgabe (nach Trim):
hello
worldDeduplizierung ohne Berücksichtigung der Groß-/Kleinschreibung
Eingabe:
ERROR
error
Warning
WARNING
warning
Ausgabe (Groß-/Kleinschreibung ignoriert):
ERROR
WarningEindeutige E-Mail-Liste extrahieren
Eingabe:
alice@example.com
bob@example.com
ALICE@example.com
carol@example.com
bob@example.com
Ausgabe (Groß-/Kleinschreibung ignoriert, Zeilenmodus):
alice@example.com
bob@example.com
carol@example.comWort-Deduplizierung
Eingabe: hello world hello again world
Ausgabe: hello world againSatz-Deduplizierung
Eingabe: This is a test. This is a test. Another sentence.
Ausgabe: This is a test. Another sentence.FAQ
Was gilt als Duplikat?
Jede Einheit (Zeile, Wort, Satz, Absatz oder Zeichen) wird mit den anderen verglichen. Identische Einheiten sind Duplikate. Groß-/Kleinschreibung kannst du an- oder abschalten. Die Seite gibt die deduplizierte Liste aus und meldet, wie viele Duplikate entfernt wurden.
Bleibt die Reihenfolge erhalten?
Ja – das erste Auftreten jedes eindeutigen Eintrags bleibt an seiner Originalposition, nachfolgende Duplikate werden verworfen. Die Ausgabe behält die ursprüngliche Reihenfolge bei.
Werden Leerzeilen als Duplikate behandelt?
Leerzeilen werden wie jede andere Zeile verglichen. Die erste Leerzeile bleibt erhalten; identische Leerzeilen weiter unten in der Eingabe werden zusammen mit anderen Duplikaten entfernt.
Kann nach einem Substring oder einer Spalte dedupliziert werden?
Nein. Die Deduplizierung arbeitet auf dem vollständigen Inhalt jeder Einheit (Zeile, Wort, Satz, Absatz oder Zeichen). Es gibt keinen spaltenbasierten oder substring-basierten Modus.
Wird die Ausgabe sortiert?
Nein. Die Ausgabe behält stets die ursprüngliche Reihenfolge. Eine Sortieroption gibt es nicht.
Wie groß darf die Datei sein?
Die Grenze ist der Browser-Speicher. Hunderttausende Zeilen funktionieren auf Desktop-Browsern. Dateien mit mehreren Millionen Zeilen sprengen den Speicher; nutze dafür ein CLI-Tool wie `sort -u` oder `awk '!seen[$0]++'`.
Wird mein Text hochgeladen?
Nein. Die Deduplizierung verwendet ein Set im Speicher deines Browsers. Eingefügte Zeilen werden nicht übertragen.