تنفيذ البحث النصي الصيني الكامل في PostgreSQL باستخدام pg_jieba مع ServBay
نظرة عامة
بالنسبة للغات مثل الإنجليزية، يعمل البحث النصي الكامل المدمج في PostgreSQL بكفاءة من خلال التحليل المعجمي القائم على الفراغات وعلامات الترقيم. ومع ذلك، فإن النصوص الصينية لا تفصل بين الكلمات بشكل طبيعي، مما يجعل من الضروري استخدام أدوات تقطيع الكلمات (Segmentation) الخاصة لتقسيم تسلسل الأحرف الصينية المتتالية إلى كلمات ذات معنى مستقل.
يُعد pg_jieba
إضافة خارجية لـ PostgreSQL تدمج مكتبة Jieba الشهيرة لتقطيع الكلمات الصينية. من خلال pg_jieba
، يمكنك إجراء تقسيم للكلمات بشكل فعال ودقيق داخل قاعدة بيانات PostgreSQL وبناء قدرات بحث نصي متقدمة للغة الصينية.
يأتي ServBay كبيئة تطوير ويب متكاملة مع إضافة pg_jieba
مضمنة مسبقاً، مما يزيل عناء التثبيت والإعداد اليدوي ويمكّنك من تطوير واختبار البحث النصي الصيني محلياً بسرعة.
ستتعلم في هذا الدليل كيفية تفعيل وتكوين واستخدام إضافة pg_jieba
داخل بيئة ServBay.
المتطلبات الأساسية
قبل استخدام pg_jieba
، تأكد من استيفاء المتطلبات التالية:
- تم تثبيت ServBay على نظام macOS لديك، وقاعدة بيانات PostgreSQL تعمل بنجاح.
- لديك معرفة أساسية باستخدام PostgreSQL، تشمل كيفية الاتصال بقاعدة البيانات وتنفيذ أوامر SQL.
تثبيت وتفعيل pg_jieba
تأتي إضافة pg_jieba
مضمنة مع PostgreSQL داخل ServBay، فلا تحتاج إلى تحميل أو بناء الإضافة يدوياً. ما عليك سوى تنفيذ أمر SQL بسيط في قاعدة البيانات لتفعيلها.
خطوات تفعيل pg_jieba:
الاتصال بقاعدة بيانات PostgreSQL الخاصة بك: افتح تطبيق الطرفية واستخدم أداة سطر أوامر
psql
للاتصال بقاعدة البيانات. استبدلyour_username
باسم مستخدمك وyour_database
باسم قاعدتك. المستخدم وقاعدة البيانات الافتراضية في ServBay غالباً هماservbay
أوpostgres
.bashpsql -U your_username -d your_database
1على سبيل المثال، باستخدام الإعدادات الافتراضية:
bashpsql -U servbay -d servbay
1إنشاء وتفعيل إضافة
pg_jieba
: في واجهة سطر الأوامر الخاصة بـ psql، نفّذ الأمر التالي:sqlCREATE EXTENSION pg_jieba;
1إن ظهرت رسالة خطأ عند إعادة تنفيذ الأمر بسبب وجود الإضافة مسبقاً، فهذا أمر طبيعي ويمكن تجاهله.
التأكد من أن الإضافة تم تفعيلها: اعرض قائمة الإضافات المثبتة بالأمر التالي:
sql\dx
1إذا رأيت
pg_jieba
في القائمة، فهذا يعني أن الإضافة فعّالة وجاهزة.
إعداد pg_jieba للبحث النصي الصيني الكامل
بعد تفعيل pg_jieba، سنقوم بضبط إعدادات البحث النصي في PostgreSQL لتستخدم pg_jieba كمجزئ كلمات.
إعداد تكوين البحث النصي (Text Search Configuration)
تحدد إعدادات البحث النصي كيفية معالجة الوثائق للبحث النصي الكامل، بما في ذلك اختيار المحلل المعجمي (parser) وكيفية التعامل مع أنواع الكلمات المختلفة.
إنشاء تكوين بحث نصي جديد: أنشئ تكويناً باسم
chinese
وحدد استخدامpg_jieba
كمحلل معجمي.sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = pg_jieba);
1هذا التكوين يأمر PostgreSQL باستخدام pg_jieba عند معالجة النصوص.
إضافة التعيين لأنواع الكلمات (Mapping): ينتج محلل pg_jieba أنواعاً مختلفة من الكلمات حسب التصنيف النحوي (part of speech). حتى يتم فهرسة هذه الكلمات والبحث فيها، يجب ربطها بقاموس معين. سنربط الكلمات الشائعة (الأسماء n، الأفعال v، الصفات a، إلخ) بقاموس PostgreSQL المدمج
simple
الذي لا يطبق معالجة إضافية.sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple;
1تشير الرموز
n,v,a,i,e,l
إلى أنواع الكلمات التالية، ويمكنك تعديلها حسب الحاجة:n
: اسمv
: فعلa
: صفةi
: تعبير اصطلاحيe
: تعجبl
: عباراتnr
: اسم شخصns
: اسم مكانnt
: منظمة أو هيئةnz
: أسماء خاصة أخرىm
: رقمq
: أداة قياسt
: كلمة زمنيةs
: كلمة مكانf
: كلمة اتجاهp
: حرف جرc
: حرف عطفu
: أداة نحويةxc
: أدوات إضافيةw
: علامة ترقيمeng
: إنجليزيx
: حروف عديمة المعنى المستقلة
غالباً ما ترغب بفهرسة والبحث في الكلمات ذات المعنى مثل الأسماء، الأفعال، والصفات.
أمثلة على استخدام pg_jieba في البحث النصي الكامل
بعد الإعداد، يمكنك البدء باستخدام pg_jieba في البحث النصي الكامل للغة الصينية. إليك مثال عملي:
إنشاء جدول وبيانات تجريبية
أولاً، أنشئ جدولاً لتخزين الوثائق وقم بإضافة بعض العينات النصية.
إنشاء الجدول:
sqlCREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT );
1
2
3
4إدخال البيانات:
sqlINSERT INTO documents (content) VALUES ('我爱自然语言处理技术'), ('中文分词是文本处理的重要步骤'), ('pg_jieba是一个很好的中文分词工具,它基于结巴分词库'), ('ServBay 让本地开发变得简单高效');
1
2
3
4
5
إنشاء فهرس للبحث النصي الكامل
لتحسين أداء البحث خاصةً مع البيانات الكبيرة، ينصح بإنشاء فهرس GIN على الأعمدة المستخدمة في البحث النصي. يعتبر فهرس GIN (Generalized Inverted Index) مثالياً لهذا الغرض في PostgreSQL.
إنشاء فهرس GIN: استخدم دالة
to_tsvector
مع التكوينchinese
الذي أنشأناه، لإنشاء فهرس GIN على عمود content.sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
تنفيذ استعلام البحث النصي الكامل
الآن يمكنك إجراء بحث نصي باستخدام دالة to_tsquery
مع المعامل @@
. تحول to_tsquery('chinese', 'your query')
عبارة البحث إلى نوع tsquery للتطابق مع tsvector من الفهرس.
تنفيذ استعلام بحث: للعثور على الوثائق التي تحتوي على كلمتي "中文" و"分词":
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '中文 & 分词');
1
2
3
4
5الرمز
&
يمثل عامل AND المنطقي في tsquery. يمكنك أيضاً استخدام|
(OR) و!
(NOT).مثال للبحث عن وثائق تحتوي على "ServBay" أو "开发":
sqlSELECT id, content FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay | 开发');
1
2
3
4
5
القواميس المخصصة
يستخدم pg_jieba قاموس Jieba الافتراضي لتقسيم الكلمات. في بعض الحالات المتخصصة، قد تحتاج لإضافة مصطلحاتك (كالمصطلحات التقنية، أو أسماء المنتجات) لتحسين الدقة.
يمكنك إنشاء ملف قاموس مخصص وتوجيه pg_jieba لاستخدامه.
إضافة كلمات مخصصة
أنشئ ملف القاموس المخصص: أنشئ ملف نصي في دليل ضبط ServBay مثلاً:
plaintext/Applications/ServBay/etc/pg_jieba/custom_dict.txt
1هذا المسار مقترح ويمكنك تغييره حسب هيكل تثبيت ServBay.
أضف الكلمات المخصصة في الملف: باستخدام محرر نصوص، أضف كل كلمة في سطر منفصل. يمكنك اختيارياً إضافة تواتر (frequency) ونوع الكلمة (tag) بعد الكلمة، مفصولة بمسافة:
الكلمة [التواتر [النوع]]
. كلما زاد التواتر زادت أولوية الكلمة في التقطيع.plaintext自然语言处理 3 n ServBay 5 eng 结巴分词库 3 n
1
2
3هنا
3 n
تعني أن "自然语言处理" لها تواتر 3 ونوع اسم (n)، و5 eng
يعني أن "ServBay" تواترها 5 والنوع إنجليزي (eng).تكوين pg_jieba لاستخدام القاموس المخصص: في جلسة PostgreSQL الخاصة بك، اضبط الخاصية
pg_jieba.dict_path
لتشير إلى مجلد القاموس. ملاحظة: عادةً تشيرpg_jieba.dict_path
إلى المجلد وليس الملف مباشرة. إذا وُضع القاموس المخصص في نفس مجلد القواميس أو المجلد الافتراضي، قد لا تحتاج لتعديل هذا الإعداد. راجع توثيق ServBay أو قم بالتجربة لتعيين الإعداد الصحيح.إذا سمح إعداد ServBay بالإشارة المباشرة إلى ملف القاموس المخصص أو وضعته في مجلد يتم فحصه تلقائياً:
sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/'; -- يفترض وجود القاموس الرئيسي والملف المخصص هنا
1أو، إذا كان من الممكن تحديد الملف مباشرة (هذا سلوك غير قياسي وعليك التأكد):
sqlSET pg_jieba.dict_path = '/Applications/ServBay/etc/pg_jieba/custom_dict.txt'; -- استخدم بحذر ووفق إعدادات ServBay
1ملاحظة هامة: أمر
SET
يؤثر فقط على الجلسة الحالية. لجعل التغيير دائماً، عدّل ملف ضبط PostgreSQLpostgresql.conf
وقم بتعيين مسار القاموس هناك.
إعادة تحميل القاموس
عند تعديل القاموس أو إعداد المسار، يجب إبلاغ pg_jieba لإعادة تحميل القاموس حتى تسري التغييرات.
إعادة تحميل القاموس: نفذ الدالة التالية:
sqlSELECT jieba_reload_dict();
1بعد التنفيذ، سيستخدم pg_jieba القاموس المحدث في التقسيم التالي.
الأسئلة الشائعة (FAQ)
س: ماذا أفعل إذا ظهرت رسالة الخطأ "extension "pg_jieba" is not available" عند تنفيذ
CREATE EXTENSION pg_jieba;
؟ ج: غالباً هذا يعني أن ملفات pg_jieba غير مثبتة في دليل إضافات PostgreSQL أو أن PostgreSQL لم يعثر عليها. في ServBay يجب أن تكون الإضافة موجودة مسبقاً. تأكد أنك متصل بقاعدة PostgreSQL الخاصة بـ ServBay وأن التثبيت سليم. إذا استمر الخطأ، حاول إعادة تشغيل ServBay أو راجع سجلات النظام.س: لماذا لا يعمل القاموس المخصص؟ ج: تحقق من النقاط التالية:
- صحة مسار ملف القاموس، وأن مستخدم PostgreSQL لديه صلاحية القراءة.
- صحة تنسيق ملف القاموس؛ كل كلمة في سطر، والتواتر والنوع اختياريان ويفصل بينهما فراغ.
- ضبط الخاصية
pg_jieba.dict_path
بالشكل الصحيح. تذكر أن أمرSET
يؤثر فقط على الجلسة الحالية، ولتثبيته بشكل دائم عدّل إعدادات PostgreSQL. - تنفيذ الدالة
SELECT jieba_reload_dict();
بعد التعديل على القاموس. - إن عدلت ملف postgresql.conf، تأكد من إعادة تشغيل خدمة PostgreSQL.
س: كيف أحسن دقة نتائج البحث النصي الكامل؟ ج: تعتمد الدقة على جودة تقسيم الكلمات وبناء عبارة البحث.
- تحقق من تقطيع الكلمات عبر دالة
ts_debug('chinese', 'نصك هنا')
لمعرفة كيف تم تحليل الجملة وما إذا كان القاموس المخصص يعمل. - اضبط إعدادات التكوين لتشمل أنواع الكلمات المهمة فقط، ويمكنك حذف الحروف أو علامات الترقيم.
- تحقق من عبارة البحث والمنطق (&&، ||، !) المستخدم في
to_tsquery
للتأكد من أنها تعبر عن مقصودك.
- تحقق من تقطيع الكلمات عبر دالة
الخلاصة
يُعد pg_jieba أداة قوية لتنفيذ البحث النصي الكامل للغة الصينية داخل PostgreSQL. وبفضل دمجه المسبق مع ServBay، يمكن للمطورين تفعيل وتكوين تقطيع الكلمات الصينية بسهولة في بيئة التطوير المحلية. باتباع الخطوات في هذا الدليل، ستتمكن من تثبيت pg_jieba، إنشاء وتكوين إعدادات البحث النصي، تنفيذ استعلامات البحث الأساسية، واستخدام القواميس المخصصة لتحسين نتائج التقطيع. ستساهم هذه التقنيات في تعزيز قابلية البحث عن المحتوى الصيني في تطبيقاتك ومشاريعك.