البحث النصي الكامل باللغة الصينية في ServBay: دليل استخدام zhparser
zhparser هو ملحق خارجي قوي لقاعدة بيانات PostgreSQL، تم تصميمه خصيصًا لمعالجة النصوص الصينية بكفاءة عالية. يتيح هذا الامتداد إمكانية تقسيم الكلمات الصينية بدقة والوصول إلى بحث نصي كامل متقدم، ما يجعله خياراً مثالياً لأي تطبيق يتطلب البحث بين محتوى صيني. وتوفر ServBay، باعتبارها منصة تطوير ويب متكاملة للاستخدام المحلي، دعمًا مدمجًا لهذا الامتداد، كما تتكامل بشكل افتراضي مع مكتبة التقسيم الصينية scws، بحيث يمكن استخدام هذه المكتبة لتخصيص القواميس في zhparser.
في هذا الدليل، سنوضح كيفية تثبيت (تفعيل) وتكوين zhparser في بيئة ServBay مع أمثلة عملية للبحث النصي الكامل باللغة الصينية، إضافة لشرح كيفية استخدام مكتبة scws المدمجة لإعداد وتطبيق القواميس الخاصة بك.
1. نظرة عامة
بالنسبة للتطبيقات التي تحتوي على كميات كبيرة من النصوص الصينية، مثل أنظمة إدارة المحتوى، المنتديات، أو منصات التجارة الإلكترونية، فإن تحقيق بحث نصي كامل دقيق وفعال أمر بالغ الأهمية. رغم أن PostgreSQL يدعم البحث النصي الكامل بشكل افتراضي، إلا أن دعمه للغة الصينية محدود، لأنه في الأساس يعتمد على المسافات لفصل الكلمات. وهنا تأتي فائدة امتداد zhparser: إذ يدمج تقنيات تقسيم الكلمات الصينية مع PostgreSQL، ليمكّنها من التعرف على حدود الكلمات داخل النصوص الصينية ومن ثم توفير بحث نصي فعال.
تأتي ServBay مزودة مسبقاً بامتداد zhparser، فلا داعي للمرور بعمليات التنصيب والتجميع اليدوية المعقدة، ويمكنك البدء بسرعة ببناء بيئة تطوير تدعم البحث النصي الكامل باللغة الصينية على جهازك.
2. المتطلبات المسبقة
قبل البدء في استخدام zhparser، تأكد مما يلي:
- أن لديك نسخة مثبتة من ServBay.
- أن حزمة PostgreSQL مفعلة وتعمل ضمن ServBay. يمكنك التأكد من الحالة وإدارة الحزم من خلال واجهة تطبيق ServBay.
3. تثبيت (تفعيل) امتداد zhparser
لقد وفر ServBay ملفات ملحق zhparser في المسار الذي يستطيع PostgreSQL الوصول له. لتفعيل الامتداد في قاعدة بياناتك المستهدفة، اتبع الخطوات التالية:
الاتصال بقاعدة البيانات PostgreSQL الخاصة بك: افتح الطرفية Terminal، ثم اتصل بقاعدة البيانات عبر أداة السطر psql (استبدل
servbay-demoباسم المستخدم الحقيقي وقاعدة البيانات باسم قاعدتك):bashpsql -U servbay-demo -d your_database_name1إذا أردت الاتصال بقاعدة البيانات الافتراضية (غالبًا ما تحمل اسم المستخدم)، يمكنك حذف خيار
-d.تفعيل امتداد
zhparser: في نافذة psql التفاعلية، نفّذ الأمر التالي:sqlCREATE EXTENSION zhparser;1إذا تم التنفيذ بنجاح، فلن يظهر أي خطأ. إذا ظهر لك أن الامتداد موجود مسبقًا، فهذا يعني أنه قد تم تفعيله فعلاً.
التحقق من تثبيت zhparser: يمكنك استعراض قائمة الامتدادات النشطة عبر الأمر التالي:
sql\dx1يجب أن تجد
zhparserمع بيانات الإصدار في النتائج.
4. إعداد تكوين zhparser
بعد تفعيل الامتداد، عليك تهيئة خاصية البحث النصي ليعرف PostgreSQL طريقة استخدام zhparser لتقسيم الكلمات الصينية. يتم ذلك بإنشاء ما يُسمى بتكوين البحث النصي (Text Search Configuration).
إنشاء تكوين البحث النصي: هذا التكوين يحدد كيف تُحول الوثائق إلى صيغة
tsvectorللفهرسة، وكيف تُحول عبارات البحث إلىtsqueryللبحث. سننشئ تكوينًا باسمchineseونحددzhparserكأداة التحليل (PARSER).sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);1إضافة خرائط القاموس (mapping): يجب أن تحدد ضمن التكوين نوع القاموس المستخدم لمعالجة تصنيفات الكلمات التي يحددها
zhparser(مثل: اسم n، فعل v، صفة a، إلخ). في هذا المثال، سنوجه الأصناف الأكثر شيوعًا —الأسماء (n)، الأفعال (v)، الصفات (a)، العبارات المستقلة (i)، الكلمات الوجدانية (e)، كلمات العدد (l)— ليتم التعامل معها باستخدام قاموسsimple، الذي يحافظ على الكلمة كما أفرزهاzhparserدون تحويل.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- يمكنك تعديل أو إضافة تصنيفات جديدة حسب الحاجة.1
2ملاحظة: تصنيفات الكلمات لدى zhparser قد تختلف عن التصنيفات المعيارية في علم اللغة الحاسوبية، والمعروضة أعلاه هي الأكثر استخداماً في الامتداد.
5. استخدام zhparser في البحث النصي الكامل
بعد الإعداد، يمكنك الشروع في تنفيذ عمليات البحث النصي الكامل باللغة الصينية. إليك كيف…
5.1 إنشاء جدول وبيانات تجريبية
أولاً، لننشئ جدولاً يحتوي نصوصًا صينية وندخل بعض البيانات عليه:
إنشاء الجدول:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );1
2
3
4إدخال بيانات تجريبية:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理'), ('中文分词是文本处理的重要步骤'), ('zhparser 是一个很好的中文分词工具'), ('ServBay 让本地开发更便捷');1
2
3
4
5
5.2 إنشاء فهرس البحث النصي الكامل
لتحسين سرعة البحث، خاصة على قواعد بيانات ضخمة، يُوصى فهرسة العمود المستخدم للبحث باستخدام فهرس GIN (Generalized Inverted Index)، والذي يُعد فعالاً للغاية مع نوع tsvector.
إنشاء فهرس GIN: سنطبق الفهرس على عمود
contentمعتمدين على تحويل النص لـtsvectorباستخدام تكويننا الصيني:sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));1
5.3 تنفيذ استعلامات البحث النصي الكامل
الآن، يمكننا استخدام to_tsquery لتحويل الكلمات المفتاحية لصيغة استعلام، ثم مطابقتها مع عمود tsvector عبر العامل @@.
تنفيذ استعلام بحث: مثلًا، للبحث عن الوثائق التي تحتوي كل من "中文" و"分词":
sqlSELECT id, content, to_tsvector('chinese', content) AS content_tsvector -- (اختياري) لعرض نتيجة تجزئة الكلمات FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');1
2
3
4
5
6ستعيد هذه النتيجة الوثيقتين ذات المعرّفين 2 و3 لأنهما تحتويان على كلتا الكلمتين.
أمثلة لاستعلامات أخرى:
- للبحث عن الوثائق التي تحتوي "ServBay":sql(ستعيد الوثيقة ذات المعرف 4)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');1 - للبحث عن "自然语言处理":sql(ستُعيد الوثيقة رقم 1؛ لاحظ أن عملية التجزئة تعتمد على نمط التجزئة والقاموس فإذا كانت الكلمة موجودة في القاموس المخصص ستكون النتائج أدق.)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');1
- للبحث عن الوثائق التي تحتوي "ServBay":
6. استخدام scws في ServBay لإنشاء قاموس مخصص
تدعم ServBay مكتبة تقسيم الكلمات الصينية scws، ويمكن تهيئة zhparser لقراءة ملفات القاموس التي توفرها هذه المكتبة، مما يسمح لك بتعزيز دقة التجزئة، سيما للعبارات المتخصصة أو الكلمات الجديدة.
6.1 إنشاء ملف القاموس المخصص
أنشئ أو حرر ملف القاموس المخصص: توصي ServBay بوضع قواميس scws المخصصة في المسار التالي:
/Applications/ServBay/etc/scws/. أنشئ ملفًا باسمcustom_dict.txtإن لم يكن موجودًا:bash# إنشاء أو تحرير الملف عبر الطرفية nano /Applications/ServBay/etc/scws/custom_dict.txt1
2أضف الكلمات إلى الملف: أضف كل كلمة أو عبارة خاصة تريد أن يعاملها
zhparserككلمة واحدة في سطر منفصل، مثلاً:plaintext自然语言处理 中文分词 ServBay 本لي تطوير البيئة1
2
3
4ثم احفظ واغلق الملف.
6.2 تهيئة zhparser لاستخدام القاموس المخصص
يجب إبلاغ zhparser بمسار ملف القاموس الذي أنشأته.
تعيين قيمة المتغير zhparser.dict_path: داخل جلسة PostgreSQL، نفّذ الأمر التالي:
sqlSET zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'; -- تأكد أن المسار صحيح وأن مستخدم PostgreSQL قادر على قراءة الملف.1
2ملاحظة: هذا الأمر يطبّق على الجلسة الحالية فقط. لجعله دائمًا لجميع الاتصالات، عدّل ملف إعدادات PostgreSQL
postgresql.confوأضف/عدّل السطر التالي:zhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'وأعد تشغيل خدمة PostgreSQL (من خلال واجهة ServBay). أما للتجربة المحلية السريعة فإن استخدامSETيكون كافيًا.
6.3 إعادة تحميل القاموس
بعد تعديل ملف القاموس، يجب إعادة تحميله ليبدأ zhparser باستخدام القاموس المحدث.
استدعاء وظيفة إعادة التحميل:
sqlSELECT zhprs_reload_dict();1بعد تنفيذ هذا الأمر، سيستخدم zhparser القاموس الجديد في عمليات التقسيم اللاحقة.
7. تعديل نمط تقسيم الكلمات
يدعم zhparser أنماطًا متعددة لتقسيم الكلمات تؤثر على دقة التجزئة. من أهم الإعدادات للتحكم في ذلك هو المتغير zhparser.seg_with_duality.
7.1 ضبط نمط التجزئة
- تعريف متغير zhparser.seg_with_duality:
- عند تفعيل الخيار (
true): يُفعّل نمط ‘التقسيم الثنائي’، ما يعطي نتائج أكثر تفصيلاً ويفيد في رفع معدل الاسترجاع في البحث (أي العثور على أكبر عدد من الوثائق ذات الصلة). مثلاً: "自然语言处理" ستُقسم إلى "自然"، "语言"، "处理"، "自然语言"، "语言处理".sqlSET zhparser.seg_with_duality = true;1 - لو تم تعطيله (
false): يطبق تقسيمًا أقل تفصيلاً ويركز على أطول المطابقات في القاموس، الأمر الذي يحسن دقة البحث. مثلاً: "自然语言处理" ستبقى كما هي إن كانت في القاموس.sqlSET zhparser.seg_with_duality = false;1
postgresql.confأيضاً. - عند تفعيل الخيار (
8. الأسئلة الشائعة (FAQ)
- س: تظهر لي رسالة أن الامتداد zhparser غير موجود عند تنفيذ CREATE EXTENSION؟ ج: تحقق من أن حزمة PostgreSQL في ServBay منصبة وتعمل بشكل سليم. ServBay يقوم تلقائيًا بوضع ملف امتداد zhparser في مجلد الامتدادات المناسب. إذا استمرّت المشكلة، تأكد من اكتمال تنصيب ServBay وPostgreSQL أو حاول إعادة تشغيل ServBay.
- س: القاموس المخصص لا يعمل؟ ج: تحقق من النقاط التالية:
- هل قمت بتحديد المتغير
zhparser.dict_pathلمسار ملف القاموس بشكل صحيح (/Applications/ServBay/etc/scws/custom_dict.txt)؟ راعِ حساسية الحروف في المسار. - هل نفذت وظيفة إعادة التحميل
SELECT zhprs_reload_dict();بعد تغيير المسار؟ - هل ملف القاموس منسق بشكل سليم (كل كلمة في سطر منفصل)؟
- عند بدء جلسة جديدة، تذكر إعادة تعيين قيمة المتغير أو اجعلها دائمة في
postgresql.confمع إعادة تشغيل الخدمة. - تحقق من أن مستخدم PostgreSQL يملك صلاحية قراءة الملف.
- هل قمت بتحديد المتغير
- س: نتائج البحث النصي الكامل غير متوقعة/أقل من المتوقع؟ ج: راجع تكوين البحث النصي (
chinese) وتأكد من ربط تصنيفات الكلمات الصحيحة بالقاموس المناسب. جرّب تغيير قيمةzhparser.seg_with_dualityولاحظ الأثر. للمساعدة في التشخيص، استخدم الأمر:SELECT to_tsvector('chinese', 'النص الصيني الخاص بك');وتأكد أن كلماتك المفتاحية واستخدم العوامل الصحيحة مثل&,|,!في استعلاماتك. - س: الأداء منخفض في استعلامات البحث النصي الكامل؟ ج: تأكد من إنشائك لفهرس GIN على العمود الذي تنفذ عليه البحث باستخدام
to_tsvector(...). لقواعد البيانات الضخمة جداً، قد تحتاج لمزيد من ضبط إعدادات PostgreSQL أو استكشاف تقنيات فهرسة أكثر تقدماً.
9. الخلاصة
بفضل ServBay، أصبح تنفيذ البحث النصي الكامل باللغة الصينية في PostgreSQL باستخدام zhparser أكثر سهولة وسرعة. فتفعيله وتخصيصه يتطلب بضع خطوات بسيطة، مع إمكانية استخدام القواميس المخصصة عبر scws لتقديم نتائج أكثر دقة وملاءمة لتطبيقك. إتقان إعدادته وخصائصه سيساعدك على بناء بيئة تطوير محلية قوية وقادرة على التعامل مع النصوص الصينية بكفاءة عالية — وهو أساس صلب لأي تطبيق صيني متقدم.
