فحص التحرير/مطابقة النص
يمكن لمجتمع الويكي إنشاء اقتراحات محلية مخصصة باستخدام مطابقة النص TextMatch. تُعدّ مطابقة النص نوعًا من فحص التحرير يبحث عن استعلامات محددة مسبقًا، وعند العثور على تطابق، يعرض مربع رسائل فحص التحرير المعتاد مع الرسالة والعنوان والإجراءات المقترحة للمحرّر.
على سبيل المثال، قد تُتيح مطابقة النص خيار حذف المصطلح المطابق، أو استبداله بطريقة محددة، أو مجرد تشجيع المحرّر على التفكير في الأمر. يمكن أن تكون فحوصات مطابقة النص بسيطة جدًا، أو أكثر قوةً باستخدام خيارات الضبط المتاحة.
مثالان. يكتشف الأول عبارة محتملة عن الوقت النسبي وربطها بالرشادات ذات الصلة. ويكتشف الثاني بعض الأخطاء المحتملة في تنقيط النص و يقدم زر لإصلاحها.
القيود الحالية
اعتبارًا من يوليو 2026:
- لن يكتشف مطابقة النص المحتوى الموجود داخل القوالب بعد
لا توجد طريقة لاستبعاد القوائم أو علامات الكود الأخرى من المطابقة، ولتقييد المحتوى فقط للقوائم وللجداول وللعناوين، إلخ.طالعinNodeأدناه.- راجع استعلامات التعبيرات النمطية لمزيد من التفاصيل حول القيود الخاصة بالتعبيرات النمطية.
- الأخطاء وطلبات الميزات المفتوحة: بحث فبريكاتور
الضبط
يتكون ضبط مطابقة النص من الضبط العام لفحص التحرير، وعدد من matchRules.
كل matchRule يتكون من شيء للبحث عنه ووصف لما يجب القيام به عندما يجد ذلك الشيء.
تعريف matchRule مرن جدا، ويمكن أن يستوعب أي شيء من العثور على كلمة بسيطة وإظهار تحذير مسبق، إلى العثور علي مجموعة معقدة من العبارات العادية واستبدالها بشيء يختلف بناء على ما تم العثور عليه.
راجع قسم #مثال على الضبط أدناه للاطلاع على عروض عملية.
| الاسم | مطلوب؟ | النوع | الوصف | افتراضي |
|---|---|---|---|---|
unique string id
|
Required | سلسلة | الاسم المختصر للـ TextMatch المحدد | |
query
|
Required | Array أو Object | ما يُبحث عنه. يمكن أن يكون بتنسيقات مختلفة:
لاحظ أن أي تطابق يجب أن يبدأ وينتهي عند حدود الكلمة. على سبيل المثال، إذا كان الاستعلام "foo"، فلن يُكتشف التطابق في "foobar". ينطبق هذا على قواعد المطابقة سواء كانت regex أم لا. هذا ينطبق على كل من قواعد المطابقة المشتركة والغير المشتركة. تستخدم TextMatch نفس تعبيرات جافاسكريبت منتظمة التي تستخدم في ميزة العثور / استبدال من النحرر المرئي. |
|
title
|
Required | سلسلة | ما سيُعرض للمستخدمين في مربع حوار فحص التحرير. يجب أن يحتوي على نص عادي فقط. | |
message
|
Required | سلسلة | ما سيُعرض للمستخدمين في مربع حوار فحص التحرير. يمكن أن يتضمن روابط ويكي، ويجب أن يوجّه المستخدم إلى أي توثيق ذي صلة حتى يتمكن من الاطلاع على المزيد. | |
mode
|
Optional | سلسلة | ما هي الإجراءات (الأزرار) التي ينبغي توفيرها في مربع حوار فحص التحرير. الخيارات المتاحة حاليًا: "info" (just "dismiss"), "replace" ("replace" and "dismiss"), "delete" ("delete" and "dismiss")
إذا لم يُحدَّد الوضع فلن يظهر إلا الزر الافتراضي: |
""
|
isRegExp
|
Optional | Boolean | إذا كانت القيمة true، سيعامل TextMatch هذا الاستعلام كنمط تعبير نمطي. راجع استعلامات التعبيرات النمطية لمزيد من التفاصيل. | false
|
config
|
Optional | Object | خيارات ضبط متعددة تعمل على مستوى matchRule (بدلًا من مستوى TextMatch كله).
في المستقبل، نأمل دعم المزيد مثل: الفضاء الاسمي واسم الصفحة المحدد. |
|
inNode
|
Optional | سلسلة | اشتراط ظهور المطابقة داخل عقدة من هذا النوع. تُستمد أنواع العقد من نموذج بيانات المحرر المرئي، مثل 'mwHeading' للعناوين و'paragraph' للفقرات. | |
expand
|
Optional | سلسلة | إذا تم العثور على تطابق، فإن هذا الخيار يحدد ما إذا كان سيتم توسيع "منطقة المشكلة" (المنطقة المظللة) لتشمل محتوى أكثر، بدلاً من النص المتطابق فقط.
الخيارات المتاحة هي:
|
|
preserveCase
|
Optional | Boolean | إذا كانت القيمة true وكانت matchRule تستخدم mode: "replace"، فسيكون مصطلح الاستبدال المقترح بنفس حالة المصطلح المطابق (يقتصر على Title Case وlowercase وuppercase).
تُمثّل حالة الأحرف (صغيرة أم كبيرة) المحددة في إعداد `matchRule` لعملية الاستبدال أدنى مستوى لحالة الأحرف سيُستخدم في الاستبدال؛ ويضمن ذلك عدم تحوّل كلمات مثل "French" أو "USA" إلى صيغ غير صحيحة، حتى عند استبدال نص مكتوب بالكامل بأحرف صغيرة. لذا، يُنصح بكتابة نصوص الاستبدال في `TextMatch` بأحرف صغيرة، ما لم تقتضِ طبيعة المصطلح استخدام حالة أحرف محددة.
|
false
|
import
|
Optional | سلسلة | يمكنك تعريف قواعد المقابلة الأكثر تعقيداً في صفحات JSON منفصلة وإدخالها، للحفاظ على صفحة JSON الرئيسية أقصر. يجب أن تكون الصفحات تحمل اسم MediaWiki:Editcheck-config-<name>.json على سبيل المثال "import": "MediaWiki:Editcheck-config-LLM.json"
|
استعلامات التعبيرات النمطية
هناك بعض التعقيدات المحددة المتعلقة بـ matchRules التي تستخدم استعلامات التعبير النمطي (regex).
- لا تُدعم المراجع الخلفية (backreferences) العادية، وذلك بسبب الطريقة التي يتم بها تجميع كافة أنماط التعبيرات النمطية (regex patterns) في الاستعلام معاً لأغراض تتعلق بالأداء. ويتمثل الحل البديل المقترح في استخدام المراجع الخلفية المُسمّاة.
- عند استخدام نمط تعبير نمطي يتضمن خيارات بديلة (alternation)، رتّب هذه الخيارات من الأطول إلى الأقصر (على سبيل المثال، استخدم
"enhanc(ed|es|e|ing)"بدلاً من"enhanc(e|ed|es|ing)"). وبهذه الطريقة، يطابق التعبير النمطي الكلمة الكاملة قبل أن يتمكن أي خيار أقصر من مطابقة جزء من الكلمة، مما قد يؤدي لاحقاً إلى فشل التحقق من حدود الكلمة (word-boundary check).[1]
يمكن دائمًا اختبار استعلامات التعبير النمطي باستخدام أداة (البحث والاستبدال) في المحرر المرئي، مع تفعيل الخيارات أو المُعدِّلات المناسبة؛ إذ يساعد ذلك في فهم ما تدعمه الأداة وما لا تدعمه.
- ↑ يعود ذلك إلى أن جميع قواعد TextMatch تستخدم العلامة `
wholeWord` التي تقصر المطابقات على تلك المحاطة بحدود الكلمات. واعتباراً من يونيو 2026، ندرس إمكانية جعل هذه الخاصية قابلة للتعديل.
تعليمات الاختبار
يُعدّ TextMatch جزءًا من الميزة التجريبية الحالية لوضع الاقنراح المتاحة على جميع ويكيبيديا (انظر حالة النشر).
لإظهار أنواع الفحوصات والاقتراحات التجريبية، يمكنك إضافة عنوان URL &ecenable=experimental لجلسة تحرير مرئي موجودة.
لاختبار نوع جديد من TextMatch:
- زر ويكي حيث TextMatchEditCheck متاح ولديك صلاحية الإدارة. قم بتسجيل الدخول.
- على نفس الويكي، قم بزيارة
MediaWiki:Editcheck-config.json - اضغط على عدل
- أدرج JSON من قسم مثال على الضبط أو إعدادات مخصصة تتبع نفس التنسيق.
- إذا كان JSON موجودًا بالفعل، انسخ من "textMatch" فقط دون الأقواس المتعرجة الخارجية
- قم بزيارة مقالة على نفس الويكي من المرجح أن تحتوي على أحد التطابقات المذكورة في الـ JSON
- افتح جلسة تحرير مرئي باستخدام
&ecenable=suggestions,experimentalفي عنوان URL
مثال على الضبط
فيما يلي مثال على ما يمكن ضبطه:
{
"textMatch": {
"enabled": true,
"matchRules": {
"british-english": {
"query": {
"chiseled": "chiselled",
"favor(ed|ite|ing)": "favour$1",
"somberly": "sombrely"
},
"title": "American English",
"mode": "replace",
"isRegExp": true,
"preserveCase": true,
"message": "This article requires British English. Fix?",
"config": {
"maximumEditCount": 500,
"account": "loggedin",
"hasTemplate": [
"Use British English",
"EngvarB"
]
}
},
"potential-LLM": {
"query": [
"(stands as|serves as|is) a (testament|reminder)",
"indelible mark",
"important to note",
"observers have cited"
],
"title": "Potential LLM content",
"message": "Is this LLM-generated content? Every edit that incorporates LLM output should be marked as LLM-assisted by identifying the name and, if possible, version of the AI in the edit summary.",
"isRegExp": true,
"config": {
"caseSensitive": false,
"minOccurrences": 3
},
"expand": "paragraph"
},
"cliches": {
"query": [
"tip of the iceberg",
"white elephant",
"gild the lily",
"take the plunge",
"took the plunge",
"ace up the sleeve",
"bird in the hand",
"twist of fate",
"at the end of the day"
],
"title": "Cliches and idioms",
"message": "Clichés and idioms should generally be avoided in favor of direct, literal expressions.",
"config": {
"account": false
}
},
"relative-time-ref": {
"query": [
"recently",
"lately",
"currently",
"today",
"presently",
"to date",
"years ago",
"formerly",
"in the past",
"traditionally",
"yesterday",
"tomorrow",
"in the future",
"to this day"
],
"title": "Relative time references",
"message": "Absolute specifications of time are preferred to relative constructions such as this, because the latter may go out of date.",
"config": {
"account": false
}
},
"editorializing": {
"query": [
"notably",
"it should be noted",
"arguably",
"interestingly",
"essentially",
"utterly",
"actually",
"clearly",
"absolutely",
"of course",
"without a doubt",
"indeed",
"happily",
"sadly",
"tragically",
"aptly",
"unfortunately",
"untimely"
],
"title": "Editorializing",
"mode": "delete",
"message": "Use of adverbs such as these, to highlight something as particularly significant or certain without attributing that opinion, should usually be avoided so as to maintain an impartial tone.",
"config": {
"account": false
}
},
"puffery": {
"query": [
"legendary",
"greatest",
"acclaimed",
"iconic",
"visionary",
"outstanding",
"leading",
"celebrated",
"popular",
"landmark",
"cutting-edge",
"innovative",
"revolutionary",
"extraordinary",
"brilliant",
"famous",
"renowned",
"remarkable",
"prestigious",
"world-class",
"respected",
"notable",
"virtuoso",
"honorable",
"awesome",
"unique",
"pioneering",
"phenomenal",
"prominent"
],
"title": "Puffery",
"mode": "delete",
"message": "Words such as these are often used without attribution to promote the subject of an article and should usually be avoided.",
"config": {
"account": false
}
}
}
}
}