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_name1यदि आप डिफॉल्ट डेटाबेस (आम तौर पर यूज़रनेम के नाम वाला) से कनेक्ट कर रहे हैं, तो
-dका पैरामीटर छोड़ सकते हैं।zhparserएक्सटेंशन बनाएंpsqlके इंटरैक्टिव इंटरफ़ेस में, नीचे दिया गया SQL कमांड चलाएँ:sqlCREATE EXTENSION zhparser;1यदि कमांड सफल हो जाता है तो कोई त्रुटि नहीं आएगी; यदि बोला जाए कि एक्सटेंशन पहले से मौजूद है, तो समझें कि यह पहले ही सक्रिय हो चुका है।
zhparserइंस्टॉलेशन सत्यापित करें
डेटाबेस में सभी इंस्टॉल्ड एक्सटेंशन्स की सूची देखने के लिए:sql\dx1आउटपुट में आपको
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.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नोट:
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 की मुख्य सेटिंग्स और उपयोग का ज्ञान आपके लोकल विकास वातावरण में चीनी टेक्ट्स डेटा प्रोसेसिंग की ताक़त को कई गुना बढ़ा देगा, जिससे आप सुविधाजनक चीनी-आधारित एप्लिकेशन्स बना सकते हैं।
