Structural Diff APIمعاملات الإعداد

معاملات الإعداد

اعرف بالضبط أي معامل تُفعِّله ولماذا.

الإعداد الافتراضي يعمل جيداً مع معظم النصوص المكتوبة. هذه المعاملات موجودة للتعامل مع سير عمل التدقيق اللغوي المحددة: QA عربي، مقارنة موضعية، استبعاد أعمدة البيانات الوصفية، والتحكم في الكشف الهيكلي. يُظهر كل قسم الفرق الدقيق الذي ينتجه المعامل في النتائج.

متى تُخصِّص الإعداد

ابدأ بدون إعداد. شغّل الـ diff وافحص النتائج. استخدم معامل الإعداد فقط عند رؤية مشكلة محددة:

stripDiacriticsالنصوص العربية حيث إضافات التشكيل تُضخِّم عدد MODIFIED
simpleModeQA محتوى فقط — أنت متأكد أن المُدقِّق لم يُجرِ أي تغييرات هيكلية
ignoreColNamesأعمدة البيانات الوصفية (درجة الثقة، الفئة) تختلف بين طبقات QA لكنها ليست هدف المقارنة
positionalModeتحديد أخطاء المحاذاة غير المتوقعة، أو معالجة مجموعات بيانات كبيرة ومتجانسة
enableSplits: falseإرشادات المشروع تحظر التقسيمات في هذه الطبقة
enableInlineDiff: falseدفعات كبيرة حيث تكفي الحالات والدرجات فقط — تعطيل حساب diff النص لتحسين الأداء
enableCER / enableWERتحسين الأداء للدفعات الكبيرة — تخطي Levenshtein عند الحاجة فقط إلى المقاييس الهيكلية أو على مستوى الجملة
enableComposite: falseإخفاء الدرجة الإجمالية عندما يستهلك نظامك قيم المقاييس الفردية مباشرةً
structuralTransformsالصفوف تحتوي على بادئات معرّف أو روابط أو تنسيقات تختلف بين الطبقات لكنها ليست محتوى النص

simpleMode

بشكل افتراضي، يُشغِّل المحرك خوارزمية محاذاة بـ 8 مراحل تُطابق الصفوف بالتشابه عبر النص الكامل، حتى لو تغيرت مواضعها. simpleMode يُعطِّل هذا: الصف 0 يُقارن بالصف 0، الصف 1 بالصف 1، بالموضع الحرفي.

الافتراضي (simpleMode: false): يكشف المحرك أن مقطعاً طويلاً قُسِّم إلى مقطعين ويُصنِّفه SPLIT.

Original

{
  "original": [
    { "speaker": "Candidate", "words": "For new users we relied on content-based filtering. For new items we used metadata clustering to find similar items." }
  ],
  "reworked": [
    { "speaker": "Candidate", "words": "For new users, we relied on content-based filtering." },
    { "speaker": "Candidate", "words": "For new items, we used metadata clustering to find similar items." }
  ]
}

Reworked

/* config: {} (default) */

API Result

json
{
  "results": [
    {
      "status": "SPLIT",
      "notes": "split into 2 rows",
      "originalRow": { "words": "For new users we relied on content-based filtering..." },
      "reworkedRows": [
        { "words": "For new users, we relied on content-based filtering." },
        { "words": "For new items, we used metadata clustering..." }
      ]
    }
  ]
}

مع simpleMode: true: يقارن المحرك الصف 0 بالصف 0 (يجد تفاوتاً → MODIFIED) ويرى صفاً إضافياً في reworked (→ ADDED). تضيع النية الهيكلية، لكن كل تغيير في الحروف يكون مرئياً.

json
{
  "results": [
    {
      "status": "MODIFIED",
      "notes": "words changed",
      "snapData": ["Candidate", "For new users we relied on content-based filtering..."],
      "currData": ["Candidate", "For new users, we relied on content-based filtering."],
      "transcriptDiff": [
        { "type": "equal",  "value": "For new users" },
        { "type": "insert", "value": "," },
        { "type": "equal",  "value": " we relied on content-based filtering." }
      ]
    },
    {
      "status": "ADDED",
      "notes": "new row in reworked",
      "currData": ["Candidate", "For new items, we used metadata clustering..."]
    }
  ]
}

استخدم عندما تكون متأكداً أن المُدقِّق لم يُجرِ أي تغييرات هيكلية — فقط تصحيحات نصية وإملائية. مفيد أيضاً للحصول على diffs حرفية خام بدون تفسير هيكلي.

simpleMode أسرع على مجموعات البيانات الكبيرة جداً لتخطيه المحاذاة. المقايضة هي أعداد خاطئة من MODIFIED/ADDED/DELETED حيث سيكون SPLIT/MERGED أدق.

enableSplits / enableMerges

بدائل أكثر دقة من simpleMode. بدلاً من تعطيل كل الكشف الهيكلي، يمكنك تعطيل نوع واحد فقط.

SPLIT

enableSplits: false — يُعطي مرشحو SPLIT نتائج MODIFIED (تطابق مبتور) + ADDED (صفوف متبقية). مفيد عندما تحظر إرشاداتك التقسيمات.

MERGED

enableMerges: false — يُصبح مرشحو MERGE: MODIFIED (أول صف أصلي) + DELETED (الأصلية الممتصة). مفيد عندما الدمج غير مسموح.

json
{
  "config": {
    "enableSplits": false,
    "enableMerges": true
  }
}

هذه المعاملات مفيدة في خطوط QA متعددة الطبقات حيث لكل طبقة عملياتها المسموح بها. تعطيل عملية غير متوقعة يجعل التغييرات الهيكلية غير المصرح بها تظهر كـ ADDED/DELETED متميزة.

stripDiacritics

قبل المقارنة، يُطبِّق المحرك تطبيعاً على الحروف العربية والمعلّمة بإزالة علامات التشكيل. للعربية يشمل هذا الحركات (الفتحة، الكسرة، الضمة، تنوينها)، الشدة، السكون، وأشكال الهمزة (U+064B–U+065F، U+0670). هذا المعامل مُفعَّل افتراضياً.

سيناريو QA عربي شائع: يُطبِّق المُدقِّق التشكيل وفق أدلة الأسلوب للعربية الفصحى. مع السلوك الافتراضي (stripDiacritics: true)، تُحسب فقط الفروق المعجمية وفروق التجزئة.

السلوك الافتراضي (stripDiacritics: true — لا حاجة للإعداد): مرحبا → مرحباً يكون UNCHANGED لأن علامات التشكيل تُحذف قبل المقارنة، مما يجعل الشكلين المجردين متطابقين.

Original

{
  "original": [{ "speaker": "المذيع", "transcript": "مرحبا بكم في نشرة الاخبار" }],
  "reworked": [{ "speaker": "المذيع", "transcript": "مرحباً بكم في نشرة الأخبار" }]
}

Reworked

/* config: {} (default — stripDiacritics: true) */

API Result

json
{ "status": "UNCHANGED", "notes": "high similarity match (diacritics stripped)" }

مع stripDiacritics: false (تجاوز): مرحبا → مرحباً يكون MODIFIED لأن علامة ً لم تعد تُحذف — يتم الإبلاغ عن الفروق الحرفية الخام.

json
{ "status": "MODIFIED", "notes": "transcript changed",
  "transcriptDiff": [
    { "type": "EQUAL",  "text": "مرحب" },
    { "type": "DELETE", "text": "ا" },
    { "type": "INSERT", "text": "اً" },
    { "type": "EQUAL",  "text": " بكم في نشرة ال" },
    { "type": "DELETE", "text": "ا" },
    { "type": "INSERT", "text": "أ" },
    { "type": "EQUAL",  "text": "خبار" }
  ]
}
json
{ "config": { "stripDiacritics": false } }

السلوك الافتراضي (true) مناسب لمعظم QA نصوص العربية. تجاوز بـ stripDiacritics: false فقط عند التحقق الصريح من أن المُدقِّق أضاف أو أزال علامات التشكيل بشكل صحيح — أي عندما تكون دقة التشكيل معياراً QA مُتتَّبعاً.

positionalMode

يتخطى خوارزمية المحاذاة بالتشابه كلياً. كل صف أصلي في الموضع N يُقارن بالصف المُعاد في الموضع N. إذا كانت المصفوفتان بأطوال مختلفة، الصفوف الزائدة تكون ADDED أو DELETED.

الافتراضي: إذا صحَّح مُدقِّق جملة وانتقلت من الموضع 4 إلى 6، يُطابقها المحرك (MODIFIED). مع positionalMode، يُقارن الصف 4 من الأصل بالصف 4 من المُعاد — الذي قد يكون جملة مختلفة كلياً.

positionalMode ينتج نتائج مضللة عند إعادة ترتيب الصفوف. استخدمه فقط عند ضمان عدم إضافة أو حذف أو إعادة ترتيب أي صفوف.

مفيد للتحقيق في الأخطاء وللمجموعات المتجانسة جداً حيث المطابقة الموضعية هي الحقيقة الأساسية.

json
{ "config": { "positionalMode": true } }

ignoreColNames

مصفوفة من أسماء الأعمدة يجب إقصاؤها من كشف MODIFIED. الصف يكون MODIFIED فقط إذا تغير عمود غير مُقصى. الأعمدة المُقصاة لا تزال في الاستجابة لكنها لا تُطلق MODIFIED.

سيناريو: بياناتك تحتوي على عمود confidence يُعيِّنه أداة التدقيق. طبقة QA 1 تسجل confidence: 0.88 بينما طبقة QA 2 تسجل confidence: 0.91 لنفس الجملة. بدون ignoreColNames، كل صف كهذا يكون MODIFIED رغم أن النص متطابق.

Without ignoreColNames

Original

{
  "original": [
    { "transcript": "The patient reports mild chest pain.", "speaker": "Doctor", "confidence": 0.88, "category": "symptom" }
  ],
  "reworked": [
    { "transcript": "The patient reports mild chest pain.", "speaker": "Doctor", "confidence": 0.94, "category": "complaint" }
  ]
}

Reworked

/* config: {} */

API Result

json
{ "status": "MODIFIED", "notes": "confidence, category changed" }

With ignoreColNames

json
{
  // request: { "config": { "ignoreColNames": ["confidence", "category"] } }
  "status": "UNCHANGED", "notes": "exact match (after ignoring confidence, category)"
}

استخدم كلما احتوى مخططك على أعمدة بيانات وصفية تتغير بشكل مستقل عن محتوى النص: درجات الثقة، معرّفات المراجعين، أرقام الدفعات، علامات الفئات، الطوابع الزمنية التلقائية.

enableInlineDiff

يتحكم في ما إذا كان المحرك يحسب diff حرفياً inline للصفوف MODIFIED. عند التفعيل (افتراضي)، كل صف MODIFIED في الاستجابة يتضمن مصفوفة transcriptDiff يمكنك استخدامها لعرض التغييرات بالتظليل في واجهة المراجعة. تعطيله يتخطى حساب الـ diff كلياً.

مع enableInlineDiff: false، صفوف MODIFIED لا تزال تظهر في النتائج (الحالة والملاحظات دون تغيير)، لكن حقل transcriptDiff غائب. استخدم هذا عندما تحتاج فقط إلى أعداد الحالات والدرجات لتقليل حجم الاستجابة.

json
{ "config": { "enableInlineDiff": false } }

كل مقطع transcriptDiff له الشكل { type: "EQUAL" | "INSERT" | "DELETE", text: string }. أعد بناء الأصل بربط كل spans غير-INSERT؛ والمُعاد بربط كل spans غير-DELETE. ملاحظة: قيم type بالأحرف الكبيرة.

json
// transcriptDiff format — type is UPPERCASE, field is "text"
[
  { "type": "EQUAL",  "text": "Hello " },
  { "type": "DELETE", "text": "world" },
  { "type": "INSERT", "text": "there" }
]

عطّل (enableInlineDiff: false) عند معالجة دفعات كبيرة حيث تحتاج فقط إلى درجات CER/WER/SegER/SER وأعداد الحالات. هذا يُقلّل CPU الخادم وحجم payload الشبكة. أعد التفعيل لواجهات المراجعة التفاعلية.

يستخدم الـ diff خوارزمية LCS (أطول تسلسل مشترك). للمقاطع الطويلة جداً (الطول المشترك الأصل + المُعاد > CHAR_DIFF_LIMIT)، يتحول تلقائياً من مستوى الحرف إلى مستوى الكلمة — مُعاد بنفس تنسيق المصفوفة.

إشارات التقييم

ستة معاملات منطقية تتحكم في المقاييس التي يحسبها المحرك وفيما إذا كانت النتيجة المركبة تُرجَع. الافتراضي true لجميعها. تعطيل أي إشارة يتجاوز حلقة الحساب بأكملها — الحقل في الاستجابة null وليس 0.

FlagDefaultWhat it measures · When to disable
enableCERtrue
معدل أخطاء الأحرف على جميع الأعمدة (overallCER). يُحسب عبر Levenshtein على سلاسل الصفوف المتسلسلة. استخدم enableTranscriptCER للتحكم بشكل مستقل في نسخة عمود النص فقط.
عند الحاجة فقط إلى مقاييس هيكلية أو على مستوى الجملة. Levenshtein هو O(m×n) — تخطي CER + WER على الدفعات الكبيرة (5 000+ مقطع طويل) يُقلل زمن الاستجابة ملحوظاً.
enableTranscriptCERtrue
يحسب transcriptCER — CER محدود بعمود النص فقط. مستقل عن enableCER: تعطيل enableCER يحذف overallCER لكن يبقى transcriptCER مفعَّلاً، والعكس صحيح.
عند الحاجة إلى overallCER دون تفصيل عمود النص، أو العكس.
enableWERtrue
معدل أخطاء الكلمات على جميع الأعمدة (overallWER). يُرمِّز بالفراغات بعد حذف علامات الترقيم. استخدم enableTranscriptWER للتحكم بشكل مستقل في نسخة عمود النص فقط.
نفس شروط enableCER. يُعطَّل عادةً معه.
enableTranscriptWERtrue
يحسب transcriptWER — WER محدود بعمود النص فقط. مستقل عن enableWER.
عند الحاجة إلى overallWER دون تفصيل عمود النص، أو العكس.
enableSegERtrue
معدل أخطاء التجزئة: الأحداث الحدودية (تقسيمات + دمجات + صفوف مضافة + محذوفة) / عدد الأجزاء المتوقعة. إشارة الجودة الهيكلية — مستقلة عن محتوى النص.
فقط إذا كان سير عملك يهتم حصراً بالتغييرات المعجمية والأحداث الهيكلية غير ذات صلة — نادر في QA النصوص.
enableSERtrue
معدل أخطاء الجمل: صفوف MODIFIED / (صفوف UNCHANGED + MODIFIED). نسبة الصفوف القابلة للمقارنة التي تحتوي أي تعديل. يُرجع null — لا 0 — عندما يكون المقام 0 (جميع الصفوف أحداث هيكلية بدون أزواج مقارنة).
عند الاكتفاء بمعدلات أخطاء الأحرف/الكلمات دون الحاجة إلى إشارة على مستوى الجملة.
enableTranscriptSERtrue
SER على مستوى الجملة داخل نص عمود النص. يقسّم المحتوى إلى جمل (على . ! ? ؟ وأسطر جديدة) ويحسب الجمل المتغيرة عبر صفوف MODIFIED وMERGED وSPLIT. مماثل لـ transcriptWER لكن على مستوى الجملة بدلاً من الكلمة — يقيس معدل تغيير الجمل داخل المستند، لا التعديلات على مستوى الصف.
عندما يكون SER على مستوى الصف (enableSER) كافياً ولا تضيف دقة الجملة قيمة تشخيصية.
enableSACRtrue
معدل تغيير نسب المتحدث: الصفوف التي تغيّر فيها عمود المتحدث / صفوف MODIFIED. اكتشاف تلقائي للأعمدة المسماة speaker أو talker أو spk. يُرجع null تلقائياً عند غياب عمود المتحدث — تفعيل هذا على بيانات بدون متحدث لا يكلف شيئاً.
فقط لإخفاء حقل SACR من الاستجابة بشكل صريح بصرف النظر عن وجود عمود متحدث.
enableCompositetrue
يحسب متوسط درجات كل مقياس (مقياس 1–5) للمقاييس المفعَّلة التي أنتجت قيمة غير null. CER وTranscript CER وWER وTranscript WER وSegER وSER وTranscript SER تُغذّي المركّب — SACR مستبعد لأن كثيراً من مجموعات البيانات تفتقر إلى عمود متحدث مما يجعل المركّب غير قابل للمقارنة بين الدفعات.
عندما يقرأ نظامك قيم المقاييس الفردية مباشرةً ولا يعرض درجة إجمالية.
cerInCompositetrue
تضمين CER في حساب الدرجة المركبة. عند false، لا يزال CER يُحسب ويُعاد في الاستجابة لكنه لا يؤثر في الدرجة المركبة.
عندما يكون CER مقياساً تشخيصياً فقط وتريد أن يعكس المركّب WER/SegER/SER حصراً.
werInCompositetrue
تضمين WER في حساب الدرجة المركبة. عند false، يُحسب WER لكن يُستبعد من متوسط المركّب.
عندما يُتتبَّع WER كمرجع لكن لا يجب أن يُعاقب المركّب (مثلاً: مقاطع قصيرة جداً يكون فيها عدد الكلمات غير موثوق).
segerInCompositetrue
تضمين SegER في حساب الدرجة المركبة. عند false، يُحسب SegER لكن يُستبعد من متوسط المركّب.
عندما تكون جودة التجزئة مصدر قلق منفصل يُراجع باستقلالية ولا يجب أن يُخفِّض الدرجة المركبة الإجمالية.
serInCompositetrue
تضمين SER في حساب الدرجة المركبة. عند false، يُحسب SER لكن يُستخدم كإشارة تشخيصية مستقلة دون التأثير في المركّب.
عندما يكون معدل أخطاء الجمل إشارة تشخيصية فقط وتريد أن تحدد CER/WER/SegER درجة المركّب.
transcriptCerInCompositetrue
تضمين CER النص في حساب الدرجة المركبة. عند false، يُحسب transcriptCER ويُعاد لكنه لا يؤثر في المركّب.
عندما يكون CER عمود النص مقياساً مرجعياً فقط وتريد أن يعكس المركّب المقاييس الأخرى.
transcriptWerInCompositetrue
تضمين WER النص في حساب الدرجة المركبة. عند false، يُحسب transcriptWER لكن يُستبعد من متوسط المركّب.
عندما يُتتبَّع WER عمود النص كمرجع لكن لا يجب أن يؤثر في الدرجة المركبة.
transcriptSerInCompositetrue
تضمين SER النص في حساب الدرجة المركبة. عند false، يُحسب transcriptSER لكن يُستخدم كإشارة تشخيصية على مستوى الجملة دون التأثير في المركّب.
عندما يكون معدل تغيير الجمل إشارة ثانوية وتريد أن تحدد CER/WER/SegER/SER درجة المركّب.
json
{
  "config": {
    "enableCER": false,
    "enableWER": false,
    "enableSACR": false
  }
}
الدرجة المركبة ديناميكية: عطِّل WER أو اضبط werInComposite: false ويُعاد حساب المتوسط على المقاييس المساهمة المتبقية. استخدم cerInComposite وwerInComposite وsegerInComposite وserInComposite وtranscriptCerInComposite وtranscriptWerInComposite وtranscriptSerInComposite لتتبع مقياس دون إدراجه في الدرجة النهائية. تتضمن الاستجابة مصفوفة enabledMetrics تُدرج بالضبط المقاييس التي أسهمت في النتيجة.
لا يحتاج SACR إلى إلغاء اشتراك يدوي لمجموعات البيانات بدون متحدث. إذا لم يطابق أي عمود speaker أو talker أو spk (غير حساس لحالة الأحرف)، يكون SACR null بصرف النظر عن الإشارة. الإشارة موجودة فقط لإخفاء الحقل عند الرغبة الصريحة في استبعاد بيانات المتحدث من الاستجابة. لتجاوز الكشف التلقائي وتحديد عمود المتحدث صراحةً، مرّر speakerColName: "<اسم-العمود>" في كائن config (تطابق غير حساس لحالة الأحرف، حد أقصى 100 حرف).
يحتسب SACR فقط صفوف MODIFIED — الحالة الوحيدة التي يمكن فيها للمحرك مقارنة المتحدث الأصلي بالمعدَّل مباشرةً. إذا قسَّم محرِّر صفاً وأعاد تسمية المتحدث في آنٍ واحد، صنَّف المحرك الحدث كـ MODIFIED + ADDED لا كـ SPLIT واحد؛ وبالتالي تظل صفوف ADDED ذات المتحدث الجديد غير مرئية لـ SACR. SACR موثوق لتصحيحات المتحدث المباشرة، لكنه قد يستهدف التسميات المرتبطة بإعادة التقسيم.
يكتشف المحرك تلقائياً صفوف الرؤوس ويستبعدها من التقييم. إذا كانت كل قيم خلايا الصف تساوي اسم العمود المقابل (مثلاً: الصف الأول يحتوي "transcript" و"start" و"end" المطابقة للمخطط)، يُحسب كـ UNCHANGED لكنه يُستبعد من جميع مقامات المقاييس (CER وWER وSER وtranscriptSER). هذا يمنع صف الرأس من تخفيض معدلات الأخطاء بصمت عند تمرير بيانات خام دون إزالة صف الرأس.

structuralTransforms

مصفوفة من قواعد البحث/الاستبدال تُطبَّق على نص النص قبل تشغيل خوارزمية حساب التشابه. يتيح هذا للمحرك محاذاة الصفوف التي تختلف فقط في بادئات أو تنسيقات متوقعة وغير محتوى (مثل: علامات ID، بادئات URL).

كل قاعدة: { find: string, replace: string, isRegex: boolean }. قواعد السلسلة: بحث واستبدال حرفي. قواعد regex (isRegex: true): تدعم بنية regex JavaScript القياسية (غير حساسة لحالة الأحرف). حتى 20 قاعدة لكل طلب.

json
{
  "config": {
    "structuralTransforms": [
      { "find": "^ID-\\d+:\\s*", "replace": "", "isRegex": true },
      { "find": "https?://[^\\s]+",  "replace": "[URL]", "isRegex": true }
    ]
  }
}
التحويلات تُطبَّق على حساب التشابه فقط — ليس على البيانات المُعادة في snapData / currData. الصف الذي تغيرت فيه بادئة ID فقط سيظل MODIFIED لأن المحتوى الخام مختلف. التحويلات تضمن المحاذاة الصحيحة، ليس غياب التعديل.

استخدم عندما تتشارك بياناتك الأصلية والمُعادة مخططاً مشتركاً لكن الصفوف تتضمن معرّفات تلقائية أو بادئات دفعات أو تنسيقات غيّرها المُدقِّق. بدون تحويلات، تعامل خوارزمية المحاذاة الصفوف ذات البادئات المختلفة كصفوف مختلفة تماماً.

عتبات التشابه والتوقيت للخبراء

هذه الأرقام السبعة تتحكم في حساسية خوارزمية المطابقة. القيم الافتراضية مُضبَّطة لمقاطع النصوص ذات الطول القياسي (5–30 ثانية، 10–60 كلمة). اضبطها فقط بعد فحص درجات التشابه الخام.

ParameterDefaultWhen to adjust · Effect
SIM_CONFIDENT
رقم (0–1)
0.70
صفّان بهذه الدرجة أو أعلى هما تطابق مؤكد — يُعتمد في مرحلة التشابه العالي.
ارفع لمطابقات نصية أكثر دقة. اخفض للمقاطع القصيرة جداً.
SIM_MODERATE
رقم (0–1)
0.40
تطابق محتمل — مقبول عندما يؤكده التوقيت أيضاً.
اخفض إذا كان المُدقِّقون يُعيدون صياغة الجمل بشكل كبير مع الحفاظ على المعنى.
SIM_WEAK
رقم (0–1)
0.20
تطابق تقريبي — مقبول فقط مع دليل زمني قوي جداً.
اخفض إلى 0.10–0.15 للمقاطع القصيرة جداً (كلمات مفردة، تعثرات) التي لا تستطيع بلوغ 0.20.
TIME_EXACT_TOL
رقم (ث)
0.05
الطوابع الزمنية ≤ هذا الفارق = تطابق دقيق.
ارفع إلى 0.5–1.0 إذا كانت الأداة تُقرِّب الطوابع للثانية.
TIME_FUZZY_TOL
رقم (ث)
2.5
الطوابع الزمنية ≤ هذا الفارق = تطابق تقريبي.
ارفع عند تحريك المُدقِّقين حدود المقطع بشكل كبير.
SPLIT_COMBINED_MIN
رقم (0–1)
0.35
الحد الأدنى لدرجة النص المشتركة لقبول SPLIT.
ارفع لتقليل التقسيمات الخاطئة. اخفض إذا كان محتواك يحتوي مقاطع هدف قصيرة جداً.
MERGE_COMBINED_MIN
رقم (0–1)
0.65
الحد الأدنى لدرجة النص المشتركة لقبول MERGE.
ارفع لتقليل الدمجات الخاطئة. اخفض لمجموعات البيانات ذات الدمجات المشروعة الكثيرة.
CHAR_DIFF_LIMIT
عدد صحيح (100–50000)
1500
أقصى طول حرفي مشترك قبل التحول إلى diff على مستوى الكلمة.
ارفع للدفعات ذات المقاطع الطويلة جداً. اخفض لإجبار diffs على مستوى الكلمة لجميع المقاطع لتقليل وقت المعالجة.
json
{
  "config": {
    "SIM_WEAK": 0.15,
    "TIME_EXACT_TOL": 1.0,
    "SPLIT_COMBINED_MIN": 0.70
  }
}
دليل معاملات الإعداد · Structural Diff API · تطوير Mohamed Yaakoubi