دمج مجموعات البطاقات
ادمج مجموعتين من البطاقات دون أسئلة مكررة: مجموعة فيها التمثيل الضوئي والانقسام المتساوي مع أخرى فيها الانقسام المتساوي والانقسام المنصف تصبح 3 بطاقات، وتحتفظ أول بطاقة للانقسام المتساوي بإجابتها. مجاني في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
غالبًا ما تترك تطبيقات الدراسة وتصديرات أنظمة إدارة التعلم ومخرجات CSV بأسلوب Anki مجموعتين متداخلتين تشتركان في نفس السؤال على بطاقات كثيرة. لصقهما يدويًا يفتح الباب لتكرارات صامتة تهدر وقت المراجعة وتشوه جدولة التكرار المتباعد. تقبل أداة دمج مجموعات البطاقات التعليمية مجموعتين كمصفوفات من أزواج الوجه الأمامي والخلفي، وتمر على المجموعة أ ثم ب، وتعيد قائمة مرتبة واحدة يظهر فيها كل وجه أمامي مطابق مرة واحدة فقط؛ تفوز أول مرة وتحتفظ بوجهها الخلفي الأصلي.
كيف يجري الدمج
البطاقة هنا زوج بسيط من وجه أمامي فيه السؤال أو المصطلح، ووجه خلفي فيه الإجابة أو التعريف. تمر الأداة على المجموعة الأولى ثم الثانية بطاقة بعد بطاقة، وتسأل عند كل بطاقة: هل احتُفظ بهذا الوجه الأمامي نفسه من قبل؟ إن لم يكن، تُضاف البطاقة بوجهها الخلفي كما هو، وإن كان، تُتخطى بكاملها. ويبقى الترتيب محفوظًا، وترى في النهاية عدد بطاقات كل مجموعة وعدد ما بقي وعدد ما حُذف بسبب التكرار.
لماذا يُشترط التطابق التام
التطابق يعني التساوي حرفًا بحرف. فالمسافات في البداية أو النهاية، أو اختلاف حالة الأحرف أو علامات الترقيم، تجعل الوجهين مختلفين. وهذا مقصود، كي تبقى البطاقات المتقاربة ظاهرة فتقرر أنت بشأنها بدل أن تندمج بصمت. وبذلك تتجنب المراجعات المكررة التي تهدر وقت الدراسة وتربك جدول التكرار المتباعد. وتُرفض المجموعة الفارغة حتى لا يبدو دمج فارغ ناجحًا.
كيف يعمل الدمج وإزالة التكرار حسب الوجه الأمامي فقط
البطاقة التعليمية هنا زوج بسيط: سلسلة front (السؤال أو الموجّه) وسلسلة back (الجواب أو التعريف). لكل بطاقة يسأل إن كان نص الوجه الأمامي المطابق حرفيًا قد احتُفظ به مسبقًا؛ وإلا تُضاف البطاقة بوجهها الخلفي دون تغيير ويُسجَّل الوجه الأمامي كمرئي. المطابقة تعني المساواة حرفًا بحرف: المسافات في البداية أو النهاية أو اختلاف حالة الأحرف أو علامات الترقيم تنشئ وجوهًا أمامية مختلفة عمدًا، فتبقى الحالات شبه المتطابقة ظاهرة للمراجعة البشرية بدل أن تُطمس بصمت.
عندما يعود نفس الوجه الأمامي لاحقًا—داخل المجموعة نفسها أو في الثانية—تُتخطى البطاقة اللاحقة بالكامل بما في ذلك وجه خلفي مختلف. تُبلغ العدادات في الاستجابة بعدد بطاقات كل إدخال، وكم بقي، وكم أُزيل كتكرار للوجه الأمامي، لتسجّل الفرق دون إعادة مسح المصفوفات.
حالات الاستخدام
تنظيف صادرات Anki وأنظمة التعلم
وحّد صادرات مفردات أو اختبارين واحذف الوجوه الأمامية المكررة حرفيًا قبل إعادة الاستيراد إلى برمجيات التكرار المتباعد.
توفيق حزم المناهج ليلًا
أتمتة دمج حزم دراسة الشركاء في ETL بعدادات حتمية ودون فوترة عند أخطاء التحقق من مجموعة فارغة.
الأسئلة الشائعة
ماذا يحدث إذا كانت إحدى المجموعتين فارغة؟
يجب أن تحتوي كل مجموعة على بطاقة واحدة على الأقل حتى لا تُعامل عمليات الدمج الفارغة كنجاح ولا تُفوتر.
هل يميز كشف التكرار بين الأحرف الكبيرة والصغيرة؟
نعم. تُقارن الوجوه الأمامية بمساواة نصية تامة، فاختلاف الحالة أو المسافات يُعد بطاقة مختلفة ويُحفظ.
أي وجه خلفي يبقى عندما يتكرر الوجه الأمامي نفسه؟
يبقى الوجه الخلفي للبطاقة التي ظهرت أولًا. وأي بطاقة لاحقة لها الوجه الأمامي نفسه تُتخطى بالكامل، حتى لو كان وجهها الخلفي مختلفًا.
هل تُحذف التكرارات داخل المجموعة نفسها أيضًا؟
نعم، تُتخطى أي بطاقة لاحقة سبق الاحتفاظ بوجهها الأمامي، سواء كانت النسخة الأولى في المجموعة الأولى أو في موضع سابق من الثانية. وتُظهر الأعداد كم بطاقة حُذفت.
أي مجموعة ينبغي أن أضعها أولًا؟
ضع أولًا المجموعة التي تثق بصياغتها، مثل مجموعتك التي راجعتها بنفسك، ثم المجموعة المستوردة بالجملة. فالظهور الأول لكل وجه أمامي هو الذي يبقى، أي أن المجموعة الأولى تحدد الإجابة.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
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)مثال على الطلب
{
"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": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.flashcard_deck_merge",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
تُرفض أي مجموعة فارغة بـ invalid_input حتى لا تتظاهر الأتمتة بنجاح دمج فارغ. المنطق التحليلي النقي نفسه يغذي الأداة المجانية في المتصفح ومسار API، فتتوافق واردات الصف وخطوط الإنتاج بايتًا ببايت دون رموز نموذج أو استدعاءات شبكة أو طوابع زمنية غير حتمية.
كيف يعمل الدمج وإزالة التكرار حسب الوجه الأمامي فقط
يسلسل الدامج deck_a بالترتيب ثم deck_b، ويبني النتيجة بمرور واحد على ذلك التسلسل المشترك. قاعدة أول فائز توافق ترتيب معظم صادرات الدراسة للصياغة المفضلة: ضع المجموعة المرجعية أولًا كـ deck_a والاستيراد الجماعي ثانيًا كـ deck_b. الخوارزمية نقية وحتمية: المدخلات المتطابقة تنتج دائمًا نفس JSON بلا بذور عشوائية أو ساعات أو خدمات خارجية.
عقد الإدخال وشكل الاستجابة والأخطاء
يجب أن تحتوي كل مصفوفة على كائن واحد على الأقل بحقول نصية front و back (تُحوَّل الجوانب العددية أو المنطقية إلى نص عشري أو true/false؛ وتُرفض الكائنات المتداخلة). اربط النتيجة بكاتب CSV أو Anki خاص إن احتجت ملفًا على القرص؛ هذه النقطة الطرفية تعيد بطاقات منظمة فقط ولا تصدر حزمًا ثنائية أو مرفقات وسائط. أرسل جسم JSON بطريقة POST يتضمن مصفوفتين إلزاميتين deck_a و deck_b. تفشل المصفوفات الفارغة والمجموعات الناقصة والقيم غير المصفوفية والبطاقات بلا وجهين بـ invalid_input مع تسمية المشكلة، ولا تُحاسب تلك الإخفاقات. عند النجاح يتضمن الجسم merged، القائمة المرتبة لبطاقات {front, back} الباقية؛ و count طول merged؛ و deck_a_count و deck_b_count للمدخلات المتحقق منها؛ و total_input مجموعهما؛ و duplicates_removed كـ total_input ناقص count؛ و operation بقيمة flashcard_deck_merge لتوجيه سهل في خطوط متعددة الأدوات. مثال: deck_a بوجهين photosynthesis و mitosis و deck_b بـ mitosis ثانٍ مع meiosis ينتج ثلاث بطاقات—photosynthesis و mitosis من deck_a و meiosis—لأن وجه mitosis المكرر من deck_b يُهمل ويُتجاهل وجهه الخلفي الأحدث.
أين يستحق دمج مجموعات الدراسة الجهد
متعلمو اللغات الذين يصدّرون مجموعتي Anki لنفس قائمة المفردات يمكنهم حذف الجذور المكررة حرفيًا دون فتح واجهة سطح مكتب. ولأن إخفاقات التحقق لا تستهلك الرصيد، يمكنكم فحص واردات فارغة بأمان أثناء ETL. المعلمون الذين يحتفظون بمجموعة أحياء مرجعية وامتداد مشترك مع الصف يحتاجون غالبًا إلى اتحاد نظيف قبل النشر في نظام إدارة تعلم: ضع المرجع كـ deck_a لتثبت الوجوه الخلفية المفضلة عندما أعاد الطلاب صياغة السؤال نفسه. مهام الخلفية التي توفّق ليلًا حزم مناهج الشركاء يمكنها استدعاء API بالسعر الأساسي المنشور $0.002 لكل عنصر ناجح، بتكلفة parse نقية من الفئة A ودون رموز نموذج.
حالات التكامل
مجموعة المعلم المرجعية مع امتداد الصف
ضع مجموعة المنهج المرجعية في deck_a ومجموعة يساهم بها الصف في deck_b حتى تفوز الوجوه الخلفية المفضلة عند تصادم الوجوه الأمامية.
أسئلة تقنية
كيف أدمج مجموعتي بطاقات تعليمية دون وجوه أمامية مكررة؟
أرسل مصفوفتين غير فارغتين deck_a و deck_b من بطاقات {front, back}. تمر API على deck_a ثم deck_b وتبقي أول وجه أمامي مطابق فقط، وتعيد merged و duplicates_removed.
أي وجه خلفي يُبقى عندما يظهر نفس الوجه الأمامي مرتين؟
يفوز الوجه الخلفي لأول ظهور—أسبق في deck_a، أو deck_a على deck_b. تُحذف البطاقات اللاحقة بذلك الوجه الأمامي بالكامل.
كم تكلفة أداة دمج مجموعات البطاقات التعليمية؟
أداة المتصفح مجانية. طلبات API تستخدم رصيد KIT المدفوع مسبقًا بسعر $0.002 لكل استدعاء ناجح؛ الإدخال غير الصالح لا يُفوتر.