आन्तरिक विकि कड़ी को अंग्रेजी भाषी विकि कड़ी में बदलने हेतु रेगुलर ऍक्सप्रैशन

4 views
Skip to first unread message

ePandit | ई-पण्डित

unread,
Sep 22, 2010, 10:13:56 PM9/22/10
to पेंचकस
मित्रों, विकिपीडिया पर अंग्रेजी लेखों का हिन्दी में अनुवाद करते समय कई बार हम कुछ सामग्री अंग्रेजी विकि से कॉपी-पेस्ट करते हैं फिर उसका धीरे-धीरे अनुवाद करते हैं। कुछ लेखों में कई बार ऐसे शब्द होते हैं जिन्हें कुछ कारणों से अंग्रेजी विकि वाले लेखों पर ही लिंकित करना बेहतर होता है (या तो उन पर हिन्दी विकि में फिलहाल लेख नहीं होता या वे अंग्रेजी विकि के दायरे में ही अधिक फिट बैठते हैं)।

उदाहरण के लिये आजकल मैं संस्कृत मूल के अंग्रेजी शब्दों की सूची नामक लेख बना रहा हूँ। अब इस लेख में मुझे ये करना है कि सभी आन्तरिक विकि कड़ियों को अंग्रेजी विकि कड़ी में बदलना है। उसके बाद जो कुछेक कड़ियाँ हिन्दी विकि में ही रखनी होंगी उन्हें मैनुअली बदल दूँगा।

तो करना ये है:-

[[test]] --> [[:en:test|test]]

यहाँ पर "test" किसी भी लम्बाई की स्ट्रिंग हो सकती है। मुझे मुख्य यह नहीं समझ आ रहा कि किसी भी लम्बाई के लिये क्या तरीका हो?

इस तरह के कुछ और लेख हैं, इसलिये यदि इस काम के लिये रेगुलर ऍक्सप्रैशन मिल जाय तो अंगुलियाँ घिसने से कुछ राहत मिलेगी।
--
Shrish Benjwal Sharma (श्रीश बेंजवाल शर्मा)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If u can't beat them, join them.

ePandit: http://epandit.shrish.in/

ePandit | ई-पण्डित

unread,
Sep 22, 2010, 10:37:59 PM9/22/10
to पेंचकस
किसी खास स्ट्रिंग के लिये मैं यह कार्य इस प्रकार कर पा रहा हूँ।

Find:                   (\[\[)(Afghanistan)(\]\])

Replace:              $1:en:$2|$2$3

मुझे यह नहीं सूझ रहा कि उस खास स्ट्रिंग (इस उदाहरम में Afghanistan) की बजाय किसी भी लम्बाई की कोई भी स्ट्रिंग कैसे ली जाय?

२३ सितम्बर २०१० ७:४३ पूर्वाह्न को, ePandit | ई-पण्डित <sharma...@gmail.com> ने लिखा:

Anunad Singh

unread,
Sep 26, 2010, 9:45:26 AM9/26/10
to penc...@googlegroups.com
निम्नलिखित रेगुलर एक्सप्रेशन काम करेगा।

खोजो :   \[\[([^\]]*)\]\]

बदलो :  [[en:$1|$1]]



-- अनुनाद सिंह

=======================================


२३ सितम्बर २०१० ८:०७ पूर्वाह्न को, ePandit | ई-पण्डित <sharma...@gmail.com> ने लिखा:
किसी खास स्ट्रिंग के लिये मैं यह कार्य इस प्रकार कर पा रहा हूँ।

Find:                   (\[\[)(Afghanistan)(\]\])

Replace:              $1:en:$2|$2$3

मुझे यह नहीं सूझ रहा कि उस खास स्ट्रिंग (इस उदाहरम में Afghanistan) की बजाय किसी भी लम्बाई की कोई भी स्ट्रिंग कैसे ली जाय?

२३ सितम्बर २०१० ७:४३ पूर्वाह्न को, ePandit | ई-पण्डित <sharma...@gmail.com> ने लिखा:
मित्रों, विकिपीडिया पर अंग्रेजी लेखों का हिन्दी में अनुवाद करते समय कई बार हम कुछ सामग्री अंग्रेजी विकि से कॉपी-पेस्ट करते हैं फिर उसका धीरे-धीरे अनुवाद करते हैं। कुछ लेखों में कई बार ऐसे शब्द होते हैं जिन्हें कुछ कारणों से अंग्रेजी विकि वाले लेखों पर ही लिंकित करना बेहतर होता है (या तो उन पर हिन्दी विकि में फिलहाल लेख नहीं होता या वे अंग्रेजी विकि के दायरे में ही अधिक फिट बैठते हैं)।

उदाहरण के लिये आजकल मैं संस्कृत मूल के अंग्रेजी शब्दों की सूची नामक लेख बना रहा हूँ। अब इस लेख में मुझे ये करना है कि सभी आन्तरिक विकि कड़ियों को अंग्रेजी विकि कड़ी में बदलना है। उसके बाद जो कुछेक कड़ियाँ हिन्दी विकि में ही रखनी होंगी उन्हें मैनुअली बदल दूँगा।

तो करना ये है:-

\[\[en:test|test\]\] --> \[\[en::en:test|test|:en:test|test\]\]

ePandit | ई-पण्डित

unread,
Sep 26, 2010, 11:48:41 AM9/26/10
to penc...@googlegroups.com
काफी कोशिश के बाद मैं सटीक RegExp बनाने में सफल हुआ।

Find:      (;\s{1})(\[\[)(\w+\s{0,1}\w+)(\]\])
Replace:   $1$2:en:$3|$3$4

फाइण्ड में:-
पहली कोष्ठक मैच करती है कि सिर्फ वही शब्द बदलें जो कि लाइन के शुरु में थे (लाइन के शुरु वाले शब्द सेमीकॉलन तथा एक स्पेस (; ) के  साथ शुरु हो रहे थे) मुझे सिर्फ लाइन के शुरु में दिये शब्द (जिनका सूची बारे लेख है) ही रिप्लेस करने थे, बीच वाली कड़ियाँ तो हिन्दी में ही अनुवाद होनी थी।

दूसरी कोष्ठक विकि कड़ी की ओपनिंग स्क्वैयर ब्रैकेट्स मैच करती है।

तीसरी कोष्टक में \w+ एक या अधिक करैक्टर (शब्द), \s{0,1} जीरो या एक स्पेस (यदि दो शब्द हों यानि बीच में एक स्पेस हुआ) तथा \w+ फिर से एक या अधिक करैक्टर (शब्द) मैच करती है।

चौथी कोष्ठक क्लोजिंग स्क्वैयर ब्रैकेट मैच करती है।
रिप्लेस में:-
$1
पहली ब्रैकेट का मामला यानि सेमीकॉलन व एक स्पेस डालता है, $2 दूसरी कोष्ठक यानि ओपनिंग ब्रैकेट्स लगाता है फिर :en: फिर $3 तीसरी कोष्ठक से वाँछित शब्द फिर पाइप साइन, उसके बाद $3 दोबारा वही शब्द तथा अन्त में $4 चौथी कोष्ठक यानि क्लोजिंग ब्रैकेट्स लगाता है।

तो इस प्रकार
; [[juggernot]] -->; [[:en:juggernot|juggernot]] में बदल जाता है।

बीच का स्पेस \s{0,1} सुनिश्चित करता है कि दो शब्द वाले (बीच में स्पेस) वाले भी बदलें।
जैसे: ; [[Hare Krishna]] --> ; [[:en:Hare Krishna|Hare Krishna]]

इसके बाद ऐसे शब्द रह गये थे जिनमें बीच में पाइप साइन पहले से था (यानि जिनका लिंक टैक्स्ट लिंक टार्गेट से अलग था) जैसे: [[Beedi|Bidi]]

तो ऐसे शब्दों के लिये बाद में निम्न RegExp लगाया।

Find:      (;\s{1})(\[\[)(\w+\s{0,1}\w+\|\w+\s{0,1}\w+)(\]\])
Replace:   $1$2:en:$3$4

फाइण्ड में:-
पहली कोष्ठक और दूसरी कोष्ठक ऊपर की तरह ही मैच करती है।

तीसरी कोष्टक में \w+ ऊपर की तरह पहला (शब्द), \s{0,1} स्पेस (यदि हुआ तो) तथा \w+ दूसरा शब्द (यदि हुआ) मैच करता है। यहाँ तक पाइप साइन से पहले वाला हिस्सा मिलाया। फिर \| पाइप साइन मैच करता है, पाइप साइन के बाद दूसरे शब्द (या शब्दों) के लिये फिर पाइप साइन से पहले जैसा ही सिण्टैक्स।

चौथी कोष्ठक ऊपर की तरह क्लोजिंग स्क्वैयर ब्रैकेट मैच करती है।
रिप्लेस में:-
$1
पहली ब्रैकेट का मामला यानि सेमीकॉलन व एक स्पेस डालता है, $2 दूसरी कोष्ठक यानि ओपनिंग ब्रैकेट्स लगाता है फिर :en: फिर $3 तीसरी कोष्ठक से वाँछित शब्द (शब्दों) तथा $4 चौथी कोष्ठक यानि क्लोजिंग ब्रैकेट्स लगाता है।

तो इस प्रकार

; [[Beedi|Bidi]] --> ; [[:en:Beedi|Bidi]] बन जाता है।

कुल मिलाकर एक सिण्टैक्स बनाने में देर तो लगी पर फिर सब काम दो क्लिक में हो गया।

लेकिन अफसोस की बात ये है कि FoxReplace यूनिकोड हिन्दी के साथ काम नहीं करता।

२६ सितम्बर २०१० ७:१५ अपराह्न को, Anunad Singh <anu...@gmail.com> ने लिखा:

--
आपको यह संदेश इसलिए प्राप्त हुआ क्योंकि आपने Google समूह "पेंचकस" समूह की सदस्यता ली है.
इस समूह में पोस्ट करने के लिए, penc...@googlegroups.com को ईमेल भेजें.
इस समूह से सदस्यता समाप्त करने के लिए, penchkas+u...@googlegroups.com को ईमेल करें.
और विकल्पों के लिए, http://groups.google.com/group/penchkas?hl=hi पर इस समूह पर जाएं.

Anunad Singh

unread,
Sep 26, 2010, 12:27:03 PM9/26/10
to penc...@googlegroups.com
लेकिन अफसोस की बात ये है कि FoxReplace यूनिकोड हिन्दी के साथ काम नहीं करता।


ऐसा लिखने का अर्थ क्या है? यूनिकोड हिन्दी के साथ फॉक्सरिप्लेस काम तो करता है। शायद आप  इस बात की तरफ संकेत कर रहे हैं कि [a-z]  जैसी चीज देवनागरी में नहीं हो पाती  । किन्तु यह सब  अप्रत्यक्ष रूप से तो किया ही जा सकता है।

ePandit | ई-पण्डित

unread,
Sep 26, 2010, 12:53:35 PM9/26/10
to penc...@googlegroups.com


२६ सितम्बर २०१० ९:५७ अपराह्न को, Anunad Singh <anu...@gmail.com> ने लिखा:


लेकिन अफसोस की बात ये है कि FoxReplace यूनिकोड हिन्दी के साथ काम नहीं करता।


ऐसा लिखने का अर्थ क्या है? यूनिकोड हिन्दी के साथ फॉक्सरिप्लेस काम तो करता है। शायद आप  इस बात की तरफ संकेत कर रहे हैं कि [a-z]  जैसी चीज देवनागरी में नहीं हो पाती  । किन्तु यह सब  अप्रत्यक्ष रूप से तो किया ही जा सकता है।

नहीं जी अप्रत्यक्ष भी कई ऑपरेटर काम नहीं करते। सामान्य लिटरल रिप्लेसमेंट तो चल जायेगा, राम का श्याम हो जायेगा लेकिन किसी ऑपेरटर (\b, \w, +, * आदि) के साथ नहीं।

जैसे:
Find:         \bRam\b
Replace:  Shyam
या श्याम
तो काम करता है लेकिन
Find:         \bराम\b
Replace:  श्याम
काम नहीं करता।

इसी प्रकार इस सूत्र जैसा ही हल्का उदाहरण लें।

Find:         (\[\[)(\w+)(\]\])
Replace:   $1:hi:$2$3

से [[Ram]] का तो [[:hi:Ram]] बन जाता है परन्तु [[राम]] का [[:hi:राम]] नहीं बनता।


-- अनुनाद सिंह

--
आपको यह संदेश इसलिए प्राप्त हुआ क्योंकि आपने Google समूह "पेंचकस" समूह की सदस्यता ली है.
इस समूह में पोस्ट करने के लिए, penc...@googlegroups.com को ईमेल भेजें.
इस समूह से सदस्यता समाप्त करने के लिए, penchkas+u...@googlegroups.com को ईमेल करें.
और विकल्पों के लिए, http://groups.google.com/group/penchkas?hl=hi पर इस समूह पर जाएं.
Reply all
Reply to author
Forward
0 new messages