Flashcard-Stapel zusammenführen
Führen Sie zwei Stapel ohne doppelte Fragen zusammen: Ein Stapel mit Photosynthese und Mitose plus einer mit Mitose und Meiose ergibt 3 Karten, und die erste Mitose-Karte behält ihre Antwort. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Lern-Apps, LMS-Exporte und CSV-Dumps im Anki-Stil hinterlassen oft zwei überlappende Stapel, die auf vielen Karten denselben Prompt teilen. Manuelles Zusammenfügen lädt stille Duplikate ein, die Wiederholungszeit verschwenden und die Planung der verteilten Wiederholung verzerren. Dieses Werkzeug zum Zusammenführen von Flashcard-Stapeln nimmt zwei Stapel als Arrays von Vorder- und Rückseitenpaaren entgegen, durchläuft zuerst Stapel A und dann B und liefert eine einzige geordnete Liste, in der jede exakte Vorderseite nur einmal vorkommt: das erste Vorkommen gewinnt und behält die ursprüngliche Rückseite.
Wie das Zusammenführen funktioniert
Eine Karteikarte ist hier ein einfaches Paar aus Vorderseite, also Frage oder Begriff, und Rückseite, also Antwort oder Definition. Das Werkzeug geht zuerst den ersten Stapel und dann den zweiten Karte für Karte durch. Bei jeder Karte prüft es, ob genau diese Vorderseite schon übernommen wurde. Wenn nicht, wird die Karte mit unveränderter Rückseite angehängt; wenn doch, wird sie samt ihrer Rückseite übersprungen. Die Reihenfolge bleibt erhalten, und am Ende sehen Sie, wie viele Karten jeder Stapel hatte, wie viele übrig blieben und wie viele als Duplikat entfielen.
Warum nur exakt gleiche Vorderseiten zählen
Gleich heißt Zeichen für Zeichen gleich. Leerzeichen am Anfang oder Ende, andere Groß- und Kleinschreibung oder andere Satzzeichen ergeben verschiedene Vorderseiten. Das ist Absicht: Fast gleiche Karten bleiben sichtbar, damit Sie selbst entscheiden, statt dass sie still verschmelzen. So vermeiden Sie doppelte Wiederholungen, die Lernzeit kosten und die Planung im Wiederholungsrhythmus verzerren. Leere Stapel werden abgelehnt, damit kein leeres Ergebnis als gelungene Zusammenführung durchgeht.
So funktionieren Zusammenführung und Deduplizierung nur über die Vorderseite
Eine Flashcard ist hier ein einfaches Paar: eine front-Zeichenkette (Prompt oder Frage) und eine back-Zeichenkette (Antwort oder Definition). Für jede Karte prüft er, ob die exakte Vorderseiten-Zeichenkette bereits behalten wurde; falls nicht, wird die Karte mit unveränderter Rückseite angehängt und die Vorderseite als gesehen vermerkt. Exakt bedeutet zeichenweise Gleichheit: führende oder nachgestellte Leerzeichen, andere Großschreibung oder andere Interpunktion erzeugen absichtlich unterschiedliche Vorderseiten, damit Beinahe-Treffer für die menschliche Prüfung sichtbar bleiben statt still zusammenzufallen.
Erscheint dieselbe Vorderseite später erneut — im selben Stapel oder im zweiten — wird die spätere Karte vollständig übersprungen, einschließlich einer anderen Rückseite. Die Zähler in der Antwort melden, wie viele Karten jeder Eingang hatte, wie viele übrig blieben und wie viele als Vorderseiten-Duplikate entfernt wurden, damit Sie die Differenz protokollieren können, ohne die Arrays erneut zu scannen.
Anwendungsfälle
Bereinigung von Anki- und LMS-Exporten
Vereinen Sie zwei Vokabel- oder Quiz-Exporte und entfernen Sie exakt doppelte Vorderseiten vor dem erneuten Import in Software für verteilte Wiederholung.
Nächtlicher Abgleich von Curriculum-Paketen
Automatisieren Sie Zusammenführungen von Partner-Lernpaketen im ETL mit deterministischen Zählern und ohne Abrechnung bei Validierungsfehlern leerer Stapel.
Häufige Fragen
Was geschieht, wenn einer der Stapel leer ist?
Beide Stapel müssen mindestens eine Karte enthalten, damit leere Zusammenführungen nie als Erfolg gelten und nicht berechnet werden.
Unterscheidet die Duplikaterkennung Groß- und Kleinschreibung?
Ja. Vorderseiten werden mit exakter String-Gleichheit verglichen; andere Großschreibung oder Abstände zählen als eigene Karte und bleiben erhalten.
Welche Rückseite bleibt, wenn dieselbe Vorderseite zweimal vorkommt?
Spätere Karten mit dieser Vorderseite werden vollständig verworfen.
Werden auch Duplikate innerhalb desselben Stapels entfernt?
Ja. Jede spätere Karte, deren Vorderseite schon übernommen wurde, wird übersprungen, egal ob die frühere Kopie im ersten Stapel oder weiter oben im zweiten steht. Die Zählung zeigt, wie viele entfielen.
Welchen Stapel sollte ich zuerst angeben?
Den mit der Formulierung, der Sie vertrauen, etwa Ihren eigenen überarbeiteten Stapel, und den Massenimport an zweiter Stelle. Das erste Vorkommen jeder Vorderseite gewinnt, also entscheidet der erste Stapel über die Antwort.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/edu/flashcard-deck-merge \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}'const res = await fetch("https://api.kit.forhosting.com/edu/flashcard-deck-merge", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/flashcard-deck-merge",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/flashcard-deck-merge", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"deck_a":[{"front":"What is photosynthesis?","back":"Plants turning light into chemical energy."},{"front":"What is mitosis?","back":"Division into two identical cells."}],"deck_b":[{"front":"What is mitosis?","back":"Duplicate front: dropped, deck_a wins."},{"front":"What is meiosis?","back":"Division into four distinct gametes."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/flashcard-deck-merge", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"deck_a": [
{
"front": "What is photosynthesis?",
"back": "Plants turning light into chemical energy."
},
{
"front": "What is mitosis?",
"back": "Division into two identical cells."
}
],
"deck_b": [
{
"front": "What is mitosis?",
"back": "Duplicate front: dropped, deck_a wins."
},
{
"front": "What is meiosis?",
"back": "Division into four distinct gametes."
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.flashcard_deck_merge",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Jeder leere Stapel wird mit invalid_input abgelehnt, damit Automatisierung nie so tut, als sei eine leere Zusammenführung gelungen.
So funktionieren Zusammenführung und Deduplizierung nur über die Vorderseite
Der Merger hängt deck_a der Reihe nach an und danach deck_b und baut das Ergebnis in einem einzigen Durchlauf über diese kombinierte Sequenz. Diese Erste-gewinnt-Regel entspricht der Art, wie die meisten Lernexporte bevorzugte Formulierungen bereits ordnen: legen Sie den maßgeblichen Stapel zuerst als deck_a und den Massenimport danach als deck_b. Der Algorithmus ist rein und deterministisch: identische Eingaben erzeugen stets dasselbe JSON, ohne Zufallskeime, Uhren oder externe Dienste.
Eingabevertrag, Antwortform und Fehler
Jedes Array muss mindestens ein Objekt mit den String-Feldern front und back enthalten (numerische oder boolesche Seiten werden zu Dezimal- bzw. true/false-Text umgewandelt; verschachtelte Objekte werden abgelehnt). Kombinieren Sie das Ergebnis mit Ihrem eigenen CSV- oder Anki-Schreiber, wenn Sie eine Datei auf der Platte brauchen; dieser Endpunkt liefert nur strukturierte Karten und emittiert weder Binärpakete noch Medienanhänge. Senden Sie per POST einen JSON-Body mit zwei Pflicht-Arrays, deck_a und deck_b. Leere Arrays, fehlende Stapel, Nicht-Array-Werte und Karten ohne beide Seiten scheitern mit invalid_input und Benennung des Problems; diese Fehler werden nicht berechnet. Bei Erfolg enthält der Body merged, die geordnete Liste der überlebenden {front, back}-Karten; count, die Länge von merged; deck_a_count und deck_b_count der validierten Eingaben; total_input als deren Summe; duplicates_removed als total_input minus count; und operation mit dem Wert flashcard_deck_merge für einfaches Routing in Multi-Tool-Pipelines. Beispiel: deck_a mit den Vorderseiten photosynthesis und mitosis sowie deck_b mit einem zweiten mitosis plus meiosis ergibt drei Karten —photosynthesis, mitosis aus deck_a und meiosis—, weil die doppelte mitosis-Vorderseite aus deck_b verworfen und die neuere Rückseite ignoriert wird.
Wo das Zusammenführen von Lernstapeln sich lohnt
Sprachlernende, die zwei Anki-Stapel derselben Vokabelliste exportieren, können exakt doppelte Lemmata entfernen, ohne eine Desktop-Oberfläche zu öffnen. Weil fehlgeschlagene Validierung nicht berechnet wird, können Sie leere Importe während des ETL sicher prüfen. Lehrkräfte, die einen Biologie-Masterstapel und eine klassengeteilte Erweiterung pflegen, brauchen oft eine saubere Vereinigung vor der Veröffentlichung in einem LMS: setzen Sie den Master als deck_a, damit bevorzugte Rückseiten bleiben, wenn Schüler dieselbe Frage umformuliert haben. Backend-Jobs, die nächtlich Partner-Curriculums-Pakete abgleichen, können die API zum veröffentlichten Basispreis von $0.002 pro erfolgreichem Element aufrufen, mit reinem Parse-Tier-A-Kosten und ohne Modell-Tokens.
Integrationsbeispiele
Lehrer-Master plus Klassenerweiterung
Legen Sie den maßgeblichen Curriculum-Stapel in deck_a und einen von der Klasse beigesteuerten Stapel in deck_b, damit bevorzugte Rückseiten gewinnen, wenn Vorderseiten kollidieren.
Technische Fragen
Wie führe ich zwei Flashcard-Stapel ohne doppelte Vorderseiten zusammen?
Senden Sie nicht leere Arrays deck_a und deck_b mit {front, back}-Karten. Die API durchläuft deck_a und dann deck_b und behält nur die erste exakte Vorderseite; sie liefert merged und duplicates_removed.
Was kostet das Werkzeug zum Zusammenführen von Flashcard-Stapeln?
Das Browser-Werkzeug ist kostenlos. API-Anfragen nutzen vorausbezahltes KIT-Guthaben zu $0.002 pro erfolgreichem Aufruf; ungültige Eingabe wird nicht berechnet.