ServBay में चीनी पूर्ण-पाठ खोज: zhparser उपयोग गाइड
zhparser
एक शक्तिशाली थर्ड पार्टी PostgreSQL एक्सटेंशन है, जिसे चीनी भाषा के टेक्स्ट को प्रभावी रूप से प्रोसेस करने हेतु डिज़ाइन किया गया है। यह PostgreSQL डेटाबेस के लिए सटीक चीनी शब्द विभाजन और पूर्ण-पाठ खोज की क्षमता देता है, जिससे यह चीनी कंटेंट आधारित सर्च ऐप्स के लिए एक आदर्श विकल्प बन जाता है। ServBay, एक संपूर्ण स्थानीय वेब डेवलपमेंट एनवायरनमेंट के रूप में, zhparser
एक्सटेंशन को पूर्व-इंस्टॉल्ड और सपोर्ट करता है, और इसमें scws
(Simple Chinese Word Segmentation) लाइब्रेरी भी समाहित है ताकि zhparser
कस्टम शब्दकोश (डिक्शनरी) फंक्शनलिटी के लिए SCWS का लाभ उठा सके।
इस लेख में आप जानेंगे कि ServBay में zhparser
को कैसे इंस्टॉल (सक्रिय) और कॉन्फ़िगर किया जाए, इसका उपयोग चीनी फुल-टेक्स्ट सर्च के लिए कैसे किया जाता है, और ServBay के अंदर निर्मित scws
के साथ अपनी कस्टम डिक्शनरी कैसे सेटअप करें और अपनाएं।
1. अवलोकन
कंटेंट मैनेजमेंट सिस्टम, फ़ोरम, ई-कॉमर्स प्लेटफ़ॉर्म जैसी एप्लिकेशन्स जहां भारी मात्रा में चीनी टेक्स्ट होता है, वहाँ तेज़ और सटीक पूर्ण-पाठ खोज बेहद महत्वपूर्ण है। PostgreSQL मूल रूप से फुल-टेक्स्ट सर्च की पेशकश करता है, लेकिन इसकी डिफॉल्ट सेटिंग्स स्पेस-स्प्लिट भाषाओं के लिए उपयुक्त हैं और चीनी के लिए प्रभावी नहीं होती। zhparser
एक्सटेंशन चीनी शब्द विभाजन तकनीक को इंटीग्रेट कर यह समस्या हल करता है, जिससे PostgreSQL चीनी टेक्स्ट में उचित वर्ड बाउंड्री समझ सके और असरदार चीनी फुल-टेक्स्ट रिट्राइवल संभव हो सके।
ServBay में zhparser
पहले से एकीकृत है, जिससे आपको एक्सटेंशन को मैन्युअली कंपाइल-इंस्टॉल करने की जरूरत नहीं पड़ती और आप अपने स्थानीय डेवेलपमेंट एनवायरनमेंट में फौरन चीनी फुल-टेक्स्ट सर्च सेटअप कर सकते हैं।
2. आवश्यकताएँ
zhparser
प्रयोग करने से पहले सुनिश्चित करें कि:
- आपने ServBay सफलतापूर्वक इंस्टॉल कर लिया है।
- ServBay में PostgreSQL पैकेज सक्रिय और चालू है। आप ServBay एप्लिकेशन इंटरफ़ेस के जरिए पैकेज स्टेटस देख और प्रबंधित कर सकते हैं।
3. zhparser एक्सटेंशन इंस्टॉल (सक्रिय) करना
ServBay पहले ही zhparser
के मॉड्यूल फ़ाइलों को PostgreSQL के एक्सटेंशन डिरेक्टरी में उपलब्ध करा देता है। आपको बस लक्षित डेटाबेस में SQL कमांड चलाकर इसे सक्रिय करना है।
अपने PostgreSQL डेटाबेस से कनेक्ट करें
टर्मिनल खोलिए औरpsql
कमांड लाइन टूल की मदद से ServBay द्वारा चल रहे PostgreSQL डेटाबेस से कनेक्ट करें।servbay-demo
को अपने असली डेटाबेस यूज़रनेम से औरyour_database_name
को अपने डेटाबेस के नाम से बदलें, जिसमेंzhparser
सक्रिय करना है।bashpsql -U servbay-demo -d your_database_name
1यदि आप डिफॉल्ट डेटाबेस (आम तौर पर यूज़रनेम के नाम वाला) से कनेक्ट कर रहे हैं, तो
-d
का पैरामीटर छोड़ सकते हैं।zhparser
एक्सटेंशन बनाएंpsql
के इंटरैक्टिव इंटरफ़ेस में, नीचे दिया गया SQL कमांड चलाएँ:sqlCREATE EXTENSION zhparser;
1यदि कमांड सफल हो जाता है तो कोई त्रुटि नहीं आएगी; यदि बोला जाए कि एक्सटेंशन पहले से मौजूद है, तो समझें कि यह पहले ही सक्रिय हो चुका है।
zhparser
इंस्टॉलेशन सत्यापित करें
डेटाबेस में सभी इंस्टॉल्ड एक्सटेंशन्स की सूची देखने के लिए:sql\dx
1आउटपुट में आपको
zhparser
और उसका वर्शन दिखाई देगा।
4. zhparser कॉन्फ़िगर करना
zhparser
इनेबल करने के बाद, PostgreSQL के टेक्स्ट सर्च फीचर को कॉन्फ़िगर करना होगा ताकि वह चीनी शब्द विभाजन के लिए zhparser
का इस्तेमाल करे। इसके लिए आपको टेक्स्ट सर्च कॉन्फ़िगरेशन बनानी होती है।
टेक्स्ट सर्च कॉन्फ़िगरेशन बनाना
यह सेटिंग बताती है कि डाक्यूमेंट्स कोtsvector
(इंडेक्सिंग के लिए) और क्वेरी स्ट्रिंग कोtsquery
(सर्च के लिए) कैसे ट्रांसफॉर्म किया जाए। हम एकchinese
नाम की कॉन्फ़िगरेशन बनाएंगे, जिसमेंzhparser
को PARSER के रूप में चुनेंगे।sqlCREATE TEXT SEARCH CONFIGURATION chinese (PARSER = zhparser);
1डिक्शनरी मैपिंग जोड़ना
इसमें आपको यह सेट करना होता है कि PARSER (zhparser
) जो विभिन्न प्रकार के टोकन निकाले, उनके लिए किस डिक्शनरी का उपयोग हो।zhparser
अलग-अलग पार्ट-ऑफ़-स्पीच टैग्स (जैसे 'n' संज्ञा, 'v' क्रिया, 'a' विशेषण आदि) देता है। यहाँ, हम 'n', 'v', 'a', 'i', 'e', 'l' टैग कोsimple
डिक्शनरी से मैप करेंगे।simple
डिक्शनरी मूल शब्दों को यथावत रखती है।sqlALTER TEXT SEARCH CONFIGURATION chinese ADD MAPPING FOR n,v,a,i,e,l WITH simple; -- आवश्यकता अनुसार टैग्स/डिक्शनरी मैपिंग बढ़ाई या बदली जा सकती है।
1
2नोट:
zhparser
के पार्ट-ऑफ़-स्पीच टैग्स कभी-कभी मानक NLP टैग्स से भिन्न हो सकते हैं, ऊपर दिए टैग्स आमतौर पर प्रयुक्त होते हैं।
5. zhparser के साथ फुल-टेक्स्ट सर्च
कॉन्फ़िगरेशन हो जाने के बाद आप 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 फुल-टेक्स्ट सर्च इंडेक्स बनाना
खासकर बड़े डेटा में सर्चिंग को तेज़ करने के लिए tsvector
कॉलम पर GIN (Generalized Inverted Index) इंडेक्स बनाना सलाहनीय है।
GIN इंडेक्स बनाएँ:
content
कॉलम पर GIN इंडेक्स के लिए,to_tsvector('chinese', content)
का उपयोग करें ताकि इंडेक्स चीनी स्प्लिटिंग के हिसाब से बने।sqlCREATE INDEX idx_gin_content ON documents USING gin (to_tsvector('chinese', content));
1
5.3 फुल-टेक्स्ट सर्च क्वेरी चलाना
अब आप की-वर्ड्स को to_tsquery
से संबंधित क्वेरी फॉर्मेट में बदल कर @@
ऑपरेटर द्वारा इंडेक्स के साथ मैच कर सकते हैं।
सर्च क्वेरी चलाएँ:
उदाहरण: "中文" और "分词" दोनों शब्दों को मिलाकर तलाशें: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यह क्वेरी id 2 और 3 वाले दस्तावेज़ लौटाएगी, क्योंकि उनमें "中文" व "分词" दोनों हैं।
आप अलग-अलग सर्च भी कर सकते हैं:
- "ServBay" शब्द वाले दस्तावेज़ खोजें:sql(id 4 वाला दस्तावेज़ मिलेगा)
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', 'ServBay');
1 - "自然语言处理" वाले दस्तावेज़ खोजें:sql(id 1 वाला दस्तावेज़ मिलेगा। ध्यान दें कि
SELECT * FROM documents WHERE to_tsvector('chinese', content) @@ to_tsquery('chinese', '自然语言处理');
1zhparser
इस वाक्यांश को संपूर्ण शब्द या खंडों में बाँट सकता है, जो आपके शब्दकोश/कॉन्फ़िग के अनुसार विभिन्न हो सकता है। कस्टम डिक्शनरी में यह शब्द होने पर बेहतर रिजल्ट मिलेगा।)
- "ServBay" शब्द वाले दस्तावेज़ खोजें:
6. ServBay के SCWS से कस्टम शब्दकोश बनाएँ
ServBay में SCWS लाइब्रेरी समाहित है, जिससे zhparser
SCWS के डिक्शनरी फाइल – जिसमें कस्टम बिट्स हो सकते हैं – उपयोग कर सकता है, खासकर डोमेन-स्पेसिफिक या नए शब्दों की सटीक पहचान के लिए।
6.1 कस्टम डिक्शनरी फाइल बनाना
कस्टम डिक्शनरी फाइल बनाएँ या संपादित करें:
सलाह दी जाती है कि SCWS की कस्टम डिक्शनरी फ़ाइल/Applications/ServBay/etc/scws/ में रखें।custom_dict.txt
नाम की फाइल बनाएं (यदि नहीं है तो)।bash# टर्मिनल में फाइल बनाएं या एडिट करें nano /Applications/ServBay/etc/scws/custom_dict.txt
1
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नोट:
SET
से किए गए बदलाव केवल उसी सत्र तक रहेंगे। हमेशा के लिए सेट करने हेतु आपको PostgreSQL केpostgresql.conf
फाइल मेंzhparser.dict_path = '/Applications/ServBay/etc/scws/custom_dict.txt'
जोड़ना होगा और सर्विस को रीस्टार्ट करना होगा (ServBay इंटरफ़ेस के जरिए)। लोकल डेवलपमेंट/जांच मेंSET
पर्याप्त है।
6.3 शब्दकोश री-लोड करें
डिक्शनरी फाइल बदलने के बाद, नए अतिरिक्त शब्दों को लागू करने हेतु zhparser
को रीलोड करना होगा।
री-लोड फ़ंक्शन कॉल करें:
sqlSELECT zhprs_reload_dict();
1इसके बाद, आगे की स्प्लिटिंग/सर्चिंग में आपके नए डिक्शनरी शब्द भी आएँगे।
7. शब्द विभाजन मोड समायोजित करें
zhparser
में विभिन्न स्प्लिटिंग मोड्स होते हैं, जो स्प्लिटिंग के दायरे को प्रभावित करते हैं। जरूरी सेटिंग्स में से एक है zhparser.seg_with_duality
।
7.1 विभाजन मोड सेट करें
zhparser.seg_with_duality
पैरामीटर सेट करें:true
: द्वैध-विभाजन मोड सक्रिय; इससे अधिक सूक्ष्म शब्द विभाजन होगा, जिससे रिकॉल रेट अधिक होता है (ज्यादा सम्भाव्य परिणाम)। जैसे, "自然语言处理" को “自然”, “语言”, “处理”, “自然语言”, “语言处理” आदि में बांटा जाएगा।sqlSET zhparser.seg_with_duality = true;
1false
: मोटा विभाजन, शब्दकोश के उन्नतम मान से बंटेगा, जिससे सटीकता बढ़ती है। "自然语言处理" पूरे शब्द रूप में बंटेगा (अगर शब्दकोश में है)।sqlSET zhparser.seg_with_duality = false;
1
postgresql.conf
में बदल सकते हैं।
8. सामान्य प्रश्न (FAQ)
- प्र.:
CREATE EXTENSION zhparser;
कमांड से एक्सटेंशन नहीं मिला?
उत्तर: सुनिश्चित करें कि ServBay में PostgreSQL पैकेज सही से इंस्टॉल व रन हो रहा हो। ServBay आम तौर परzhparser
की लाइब्रेरी फाइल्स उपयुक्त डिरेक्टरी में डाल देता है। अगर दिक्कत रहे, इंस्टॉल/कन्फ़िग जांचें या ServBay को रीस्टार्ट करें। - प्र.: कस्टम डिक्शनरी लागू नहीं हो रही?
उत्तर: ये बिंदु जाँचें:zhparser.dict_path
सही से/Applications/ServBay/etc/scws/custom_dict.txt
पर सेट है या नहीं (पाथ सेंसिटिव है)।SET zhparser.dict_path ...;
के बादSELECT zhprs_reload_dict();
चलाया या नहीं?- डिक्शनरी फाइल की फॉर्मेट (प्रत्येक पंक्ति में एक शब्द) सही है या नहीं?
- नए सत्र में टेस्ट करते हैं तो फिर से
SET zhparser.dict_path = ...;
किया या सेटिंग global की? - PostgreSQL यूज़र को उस फाइल को पढ़ने की अनुमति है या नहीं?
- प्र.: फुल-टेक्स्ट सर्च परिणाम उम्मीद के मुताबिक नहीं?
उत्तर: अपने टेक्स्ट सर्च कॉन्फिग (chinese) की mapping सही है या नहीं देखें।zhparser.seg_with_duality
बदलकर चेक करें।SELECT to_tsvector('chinese', 'आपका चीनी टेक्स्ट');
से यह देखें कि किस तरह से शब्द विभाजित हो रहे हैं। क्वेरी (to_tsquery
) में सही कीवर्ड और लॉजिकल ऑपरेटर (&
,|
,!
) का इस्तेमाल हो रहा है या नहीं। - प्र.: फुल-टेक्स्ट सर्च स्लो है?
उत्तर: सुनिश्चित करें आपनेto_tsvector(...)
कॉलम पर GIN इंडेक्स बनाया है। भारी डेटासेट्स के लिए, PostgreSQL ऑप्टिमीजेशन या विशेष इंडेक्सिंग रणनीतियाँ अपनानी चाहिये।
9. सारांश
ServBay के सहयोग से PostgreSQL में zhparser
के द्वारा चीनी फुल-टेक्स्ट सर्च लगाना बेहद आसान है। आप कुछ आसान स्टेप्स में एक्सटेंशन को सक्रिय करें, टेक्स्ट सर्च सेट करें, और ServBay के SCWS एकीकरण से कस्टम डिक्शनरी अपनाएँ। zhparser
की मुख्य सेटिंग्स और उपयोग का ज्ञान आपके लोकल विकास वातावरण में चीनी टेक्ट्स डेटा प्रोसेसिंग की ताक़त को कई गुना बढ़ा देगा, जिससे आप सुविधाजनक चीनी-आधारित एप्लिकेशन्स बना सकते हैं।