<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python |</title><link>https://clementgodbarge.com/hi/tag/python/</link><atom:link href="https://clementgodbarge.com/hi/tag/python/index.xml" rel="self" type="application/rss+xml"/><description>Python</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>hi-in</language><lastBuildDate>Mon, 07 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://clementgodbarge.com/media/icon_hu_64a6c3bec25b3d7b.png</url><title>Python</title><link>https://clementgodbarge.com/hi/tag/python/</link></image><item><title>persNamer 1.2: एक VIAF नंबर, नौ प्रामाणिक नाम-सूचियाँ</title><link>https://clementgodbarge.com/hi/post/persnamer-1-2/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/persnamer-1-2/</guid><description>&lt;p&gt;शुरू में
एक छोटी-सी सुविधा भर था: VIAF नंबर दीजिए, TEI की एक &lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; प्रविष्टि पाइए, साथ में पाठ में लगाने के लिए &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt; टैग। बस इतना ही — और जो प्रविष्टि बनती थी वह भी दुबली-पतली: एक नाम, दो तिथियाँ, एक पहचानकर्ता। आज जारी हुआ संस्करण 1.2 अब भी वही एक काम करता है, पर इस बार जो प्रविष्टि निकलती है वह सँभालकर रखने लायक है।&lt;/p&gt;
&lt;h2 id="वयकत-परवषट-म-अब-कय-कय-ह"&gt;व्यक्ति-प्रविष्टि में अब क्या-क्या है&lt;/h2&gt;
&lt;p&gt;पहले नाम की बात। VIAF के क्लस्टर में हर सहयोगी पुस्तकालय अपना-अपना नाम-रूप लेकर आता है, और पुराना persNamer जो लेबल पहले हाथ लगे वही उठा लेता था। उससे वोल्तेयर (Voltaire) के बारे में पूछिए तो जवाब मिलता « فولتير، » — यानी नाम का अरबी रूप, और वह भी पीछे लटके अल्पविराम सहित — ऊपर से एक खाली &lt;code&gt;xml:id&lt;/code&gt; मुफ़्त में। अब औज़ार पूरे क्लस्टर में नाम-रूपों की गिनती करके वही रखता है जिस पर स्रोत रिकॉर्ड एकमत हों; बाक़ी रूप &lt;code&gt;&amp;lt;persName type=&amp;quot;variant&amp;quot;&amp;gt;&lt;/code&gt; बनकर पीछे-पीछे आते हैं, जो सबसे प्रचलित हो वह सबसे आगे। तिथियाँ मानकीकृत होकर (&lt;code&gt;1572-08-00&lt;/code&gt; से &lt;code&gt;1572-08&lt;/code&gt;) दो बार दर्ज होती हैं — एक बार पाठ के रूप में, एक बार &lt;code&gt;@when&lt;/code&gt; विशेषता में — और तिथियाँ समझने वाली कोई भी प्रोसेसिंग असल में इसी दूसरी को पढ़ती है। लिंग और विवरण भी आते हैं, जहाँ VIAF उन्हें देता है।&lt;/p&gt;
&lt;p&gt;और अब वह हिस्सा जिसका मुझे सबसे ज़्यादा इंतज़ार था। VIAF जिस-जिस पहचानकर्ता को इस व्यक्ति से जोड़ता है — चाहे &lt;code&gt;schema:sameAs&lt;/code&gt; के ज़रिए, चाहे अपने स्रोत-आईडी के ज़रिए — वह सब अब अलग-अलग &lt;code&gt;&amp;lt;idno&amp;gt;&lt;/code&gt; में दर्ज हो जाता है: BnF, GND, लाइब्रेरी ऑफ़ कांग्रेस, SUDOC, Wikidata, ISNI, BNE, LIBRIS, NDL। एक नंबर अंदर गया, नौ कैटलॉग बाहर आए। किसी व्यक्ति-सूची (personography) के लिए नामों की कोरी फ़ेहरिस्त और प्रामाणिक डेटा के जाल की एक गाँठ में जो फ़र्क़ है, वह यही है।&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-teligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persName&amp;gt;&lt;/span&gt;Charles de Téligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;birth&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1535&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;death&lt;/span&gt; &lt;span class="na"&gt;when=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1572-08-24&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;sex&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;M&lt;span class="nt"&gt;&amp;lt;/sex&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;BNF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;16133360&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Wikidata&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Q1868249&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ISNI&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;0000000071126808&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="टकड-स-वयकत-सच-तक"&gt;टुकड़ों से व्यक्ति-सूची तक&lt;/h2&gt;
&lt;p&gt;एक आदमी के लिए टर्मिनल पर XML छाप लेना ठीक है; पर एक संपादित ग्रंथ में तो सैकड़ों लोग होते हैं। इसलिए persNamer अब एक साथ कई VIAF नंबर लेता है, दो अनुरोधों के बीच VIAF को साँस लेने की मोहलत देता है, जो कुछ लाया है उसे कैश में रख लेता है ताकि दोबारा न माँगना पड़े, और &lt;code&gt;--merge&lt;/code&gt; मिलते ही नई प्रविष्टियाँ सीधे मौजूदा TEI फ़ाइल के &lt;code&gt;&amp;lt;listPerson&amp;gt;&lt;/code&gt; में बिठा देता है। जो लोग फ़ाइल में पहले से हैं, वे अपने VIAF नंबर से पहचान लिए जाते हैं और उनका &lt;code&gt;xml:id&lt;/code&gt; ज्यों का त्यों रहता है; नए आईडी फ़ाइल से मिलाए जाते हैं और कहीं टकराव हो तो पीछे प्रत्यय (&lt;code&gt;-2&lt;/code&gt;, &lt;code&gt;-3&lt;/code&gt;) लग जाता है; अंत में पूरी फ़ाइल के इंडेंट फिर से सँवार दिए जाते हैं — हाँ, उससे पहले एक &lt;code&gt;.bak&lt;/code&gt; प्रति अलग रख ली जाती है।&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;persnamer --merge edition.xml &lt;span class="m"&gt;314802260&lt;/span&gt; &lt;span class="m"&gt;36925746&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;एक बदलाव ज़रूर ध्यान में रखिए: कुलनाम से पहले आने वाला कण (particle) अब डिफ़ॉल्ट रूप से आईडी में नहीं रहता, इसलिए Charles de Téligny पहले के &lt;code&gt;pers-deteligny-c&lt;/code&gt; की जगह अब &lt;code&gt;pers-teligny-c&lt;/code&gt; हो गया है। आपकी परियोजना पुराने रूप की आदी हो चुकी हो तो &lt;code&gt;--keep-particle&lt;/code&gt; उसे वापस ले आता है; और नामों के भरोसे रहना ही न हो तो &lt;code&gt;--id-format viaf&lt;/code&gt; से &lt;code&gt;pers-viaf-314802260&lt;/code&gt; मिल जाता है।&lt;/p&gt;
&lt;h2 id="सफ-सफई"&gt;साफ़-सफ़ाई&lt;/h2&gt;
&lt;p&gt;स्क्रिप्ट अब बाक़ायदा एक पैकेज बन गई है, अपनी &lt;code&gt;persnamer&lt;/code&gt; कमांड के साथ: &lt;code&gt;uv tool install&lt;/code&gt; या &lt;code&gt;pipx&lt;/code&gt; से एक लाइन में इंस्टॉल कीजिए, या बिना इंस्टॉल किए बस एक बार आज़माना हो तो &lt;code&gt;uvx&lt;/code&gt; से चला लीजिए। छब्बीस टेस्ट VIAF की रिकॉर्ड की हुई प्रतिक्रियाओं पर चलते हैं, इसलिए टेस्ट-सूट को नेटवर्क की कोई ज़रूरत नहीं; CI उन्हीं को Python 3.9 से 3.13 तक दोहराता है, और आउटपुट TEI P5 के मुताबिक़ जाँचा जाता है। लाइसेंस पहले की तरह Apache 2.0 ही है।&lt;/p&gt;
&lt;p&gt;जो यह अब भी नहीं बता सकता, वह है कि कोई कहाँ पैदा हुआ और रोज़ी-रोटी के लिए क्या करता था: VIAF के क्लस्टर RDF में न जगहें हैं, न पेशे। पर जिन BnF और GND रिकॉर्डों से यह जुड़ा है, उनमें दोनों हैं — और उनके नंबर अब आपके हाथ में हैं।&lt;/p&gt;
&lt;p&gt;कोड और दस्तावेज़
पर।&lt;/p&gt;</description></item><item><title>tei-mcp</title><link>https://clementgodbarge.com/hi/code/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/tei-mcp/</guid><description>&lt;h2 id="tei-mcp-एआई-एजट-क-लए-tei-p5"&gt;tei-mcp: एआई एजेंटों के लिए TEI P5&lt;/h2&gt;
&lt;p&gt;tei-mcp एक ओपन-सोर्स
सर्वर है, जो एआई कोडिंग असिस्टेंटों को
विनिर्देश तक सीधी पहुँच देता है। प्रशिक्षण-डेटा की धुँधली याद के भरोसे रहने के बजाय – जिससे अक्सर देखने में ठीक-ठाक पर ग़लत मार्कअप निकलता है – एआई विनिर्देश से सीधे, उसी वक़्त पूछ सकता है।&lt;/p&gt;
&lt;h2 id="वशषतए"&gt;विशेषताएँ&lt;/h2&gt;
&lt;p&gt;सर्वर TEI P5 के ODD को पार्स करता है और 16 उपकरण उपलब्ध कराता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;किसी भी एलिमेंट, क्लास, मैक्रो या मॉड्यूल की &lt;strong&gt;खोज&lt;/strong&gt; नाम से – बड़े-छोटे अक्षर का भेद किए बिना, और टाइपिंग की ग़लती पर सुझाव के साथ&lt;/li&gt;
&lt;li&gt;पूरी TEI क्लास-श्रेणी में &lt;strong&gt;एट्रिब्यूट का निर्धारण&lt;/strong&gt; (स्थानीय + विरासत में मिले)&lt;/li&gt;
&lt;li&gt;क्लास और मैक्रो को खोलते हुए &lt;strong&gt;कंटेंट मॉडल का विस्तार&lt;/strong&gt; संरचित वृक्ष के रूप में&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;नेस्टिंग की जाँच&lt;/strong&gt; – सीधा अभिभावक-संतान संबंध या पथ के साथ पुनरावर्ती पहुँच&lt;/li&gt;
&lt;li&gt;TEI P5 के विरुद्ध &lt;strong&gt;दस्तावेज़ की वैधता-जाँच&lt;/strong&gt;: कंटेंट मॉडल, एट्रिब्यूट, बंद मान-सूचियाँ, संदर्भों की अखंडता और अप्रचलन की चेतावनियाँ&lt;/li&gt;
&lt;li&gt;क्रमिक संपादन के लिए &lt;strong&gt;एकल एलिमेंट की वैधता-जाँच&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;स्कीमा को किसी परियोजना-विशेष उपसमुच्चय तक सीमित करने के लिए &lt;strong&gt;ODD अनुकूलन लोड करना&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;रेगुलर एक्सप्रेशन से सभी प्रकार की इकाइयों में &lt;strong&gt;खोज&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="इसटलशन"&gt;इंस्टॉलेशन&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;या सीधे चलाइए:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;uvx tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="उपयग"&gt;उपयोग&lt;/h2&gt;
&lt;p&gt;किसी भी MCP-संगत क्लाइंट (Claude, Cursor, Windsurf आदि) में जोड़िए:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tei&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;uvx&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;tei-mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item><item><title>Multi-Saxon</title><link>https://clementgodbarge.com/hi/code/multi-saxon/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/multi-saxon/</guid><description>&lt;h2 id="multi-saxon-बड-tei-करपस-क-लए-समनतर-xslt-परससग"&gt;Multi-Saxon: बड़े TEI कॉर्पस के लिए समानांतर XSLT प्रोसेसिंग&lt;/h2&gt;
&lt;p&gt;XML प्रोसेसिंग के औज़ारों में एक बड़ी कमी रही है: LXML (Python की लोकप्रिय XML लाइब्रेरी) XSLT 2.0 और 3.0 के रूपांतरण नहीं सँभाल पाती। Multi-Saxon इसी कमी को पूरा करता है और ऐसे रूपांतरणों को समानांतर चलाने की सुविधा देता है। यह ख़ास तौर पर XML TEI दस्तावेज़ों के बड़े संग्रहों के लिए बनाया गया है, और समानांतर निष्पादन से प्रोसेसिंग का समय काफ़ी घटा देता है।&lt;/p&gt;
&lt;h2 id="मखय-वशषतए"&gt;मुख्य विशेषताएँ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;उन्नत XSLT समर्थन&lt;/strong&gt;: LXML की सीमा से आगे जाकर XSLT 2.0 और 3.0 के रूपांतरण&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;समानांतर प्रोसेसिंग&lt;/strong&gt;: बड़े दस्तावेज़-संग्रहों के रूपांतरण का समय समानांतरीकरण से नाटकीय रूप से कम&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEI के लिए अनुकूलित&lt;/strong&gt;: विशेष रूप से Text Encoding Initiative (TEI) के XML दस्तावेज़ों के लिए बनाया गया&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;बढ़ते आकार पर भी प्रदर्शन&lt;/strong&gt;: सैकड़ों से हज़ारों दस्तावेज़ों तक के कॉर्पस को कुशलता से सँभालता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्रॉस-प्लेटफ़ॉर्म&lt;/strong&gt;: अलग-अलग ऑपरेटिंग सिस्टम और परिवेशों में चलता है&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="multi-saxon-कस-समसय-क-हल-ह"&gt;Multi-Saxon किस समस्या का हल है&lt;/h2&gt;
&lt;p&gt;TEI के साथ काम करने वाले डिजिटल मानविकी के शोधकर्ता अक्सर दो बड़ी अड़चनों से जूझते हैं:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LXML (Python की आम XML प्रोसेसिंग लाइब्रेरी) केवल XSLT 1.0 का समर्थन करती है, जिससे XSLT 2.0/3.0 की उन्नत सुविधाओं का इस्तेमाल असंभव हो जाता है&lt;/li&gt;
&lt;li&gt;TEI दस्तावेज़ों का बड़ा कॉर्पस एक-एक करके प्रोसेस करने में इतना समय लग सकता है कि काम ही अव्यावहारिक हो जाए&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Multi-Saxon दोनों समस्याओं को हल करता है: यह Saxon की उन्नत XSLT क्षमताओं का लाभ उठाता है और प्रोसेसिंग को कई कोर पर बाँटकर प्रदर्शन में बड़ी बढ़त देता है।&lt;/p&gt;
&lt;h2 id="करयनवयन"&gt;कार्यान्वयन&lt;/h2&gt;
&lt;p&gt;Multi-Saxon Python को Java के Saxon प्रोसेसर से जोड़कर एक तेज़ रूपांतरण-पाइपलाइन बनाता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;मज़बूत XSLT 2.0/3.0 प्रोसेसिंग के लिए Java की Saxon लाइब्रेरी का उपयोग&lt;/li&gt;
&lt;li&gt;उपलब्ध CPU कोर पर रूपांतरण बाँटने के लिए मल्टीप्रोसेसिंग&lt;/li&gt;
&lt;li&gt;अधिकतम थ्रूपुट के लिए प्रोसेसर-पूल का कुशल प्रबंधन&lt;/li&gt;
&lt;li&gt;TEI दस्तावेज़ों की बैच-प्रोसेसिंग के लिए सीधा-सादा इंटरफ़ेस&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="उपयग-क-उदहरण"&gt;उपयोग का उदाहरण&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;multi_saxon&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize with your XSLT stylesheet&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MultiSaxon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;transform.xsl&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform a single document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output.xml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Transform an entire directory in parallel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;transformer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform_directory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;output_dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="डजटल-मनवक-क-लए-महतव"&gt;डिजिटल मानविकी के लिए महत्व&lt;/h2&gt;
&lt;p&gt;TEI दस्तावेज़ों के बड़े संग्रहों से जूझ रही डिजिटल मानविकी परियोजनाओं के लिए Multi-Saxon संभव बनाता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;पूरे कॉर्पस पर ऐसे जटिल रूपांतरण, जो LXML से असंभव होते&lt;/li&gt;
&lt;li&gt;प्रोसेसिंग समय में नाटकीय कमी (मल्टी-कोर सिस्टम पर अक्सर 5–10 गुना)&lt;/li&gt;
&lt;li&gt;XSLT 2.0/3.0 की उन्नत सुविधाओं से और परिष्कृत विश्लेषण&lt;/li&gt;
&lt;li&gt;पूरे दस्तावेज़-संग्रह को प्रोसेस करने का सरल वर्कफ़्लो&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item><item><title>persNamer</title><link>https://clementgodbarge.com/hi/code/persnamer/</link><pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/code/persnamer/</guid><description>&lt;h2 id="persnamer-tei-क-virtual-international-authority-file-स-जडन"&gt;persNamer: TEI को Virtual International Authority File से जोड़ना&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;persNamer एक विशेष Python उपकरण है, जो VIAF (Virtual International Authority File) के प्रामाणिक व्यक्ति-डेटा को TEI XML दस्तावेज़ों में जोड़ने का काम सरल बनाता है। VIAF पहचानकर्ता को तैयार TEI मार्कअप में बदलकर persNamer डिजिटल विद्वत्तापूर्ण संस्करणों के लिए संरचित व्यक्ति-प्रविष्टियाँ बनाने की हाथ की मेहनत काफ़ी घटा देता है।&lt;/p&gt;
&lt;h2 id="tei-म-परमणक-नम-सच-क-चनत"&gt;TEI में प्रामाणिक नाम-सूची की चुनौती&lt;/h2&gt;
&lt;p&gt;डिजिटल विद्वत्तापूर्ण संस्करणों में ऐतिहासिक व्यक्तियों की सटीक पहचान ज़रूरी होती है – मानकीकृत नाम और जन्म-मृत्यु की तिथियों समेत। पूरी परियोजना में प्रामाणिक नाम-सूची को एकरूप रखने के लिए चाहिए:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ऐतिहासिक पाठों में व्यक्तियों की पहचान&lt;/li&gt;
&lt;li&gt;उनके बारे में प्रामाणिक डेटा की खोज&lt;/li&gt;
&lt;li&gt;सही ढंग से गढ़ी गई TEI प्रविष्टियाँ&lt;/li&gt;
&lt;li&gt;पूरी परियोजना में एक जैसे संदर्भ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ये सारे चरण आम तौर पर हाथ से किए जाते हैं, समय खाते हैं और असंगति की गुंजाइश छोड़ते हैं।&lt;/p&gt;
&lt;h2 id="persnamer-कस-कम-करत-ह"&gt;persNamer कैसे काम करता है&lt;/h2&gt;
&lt;p&gt;persNamer इस वर्कफ़्लो को स्वचालित करता है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;VIAF डेटा लाना&lt;/strong&gt;: VIAF पहचानकर्ता मिलने पर उपकरण HTTP कंटेंट नेगोशिएशन के ज़रिये RDF डेटा प्राप्त करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;मुख्य जानकारी निकालना&lt;/strong&gt;: RDF को पार्स करके पसंदीदा नाम, जन्म-तिथि और मृत्यु-तिथि निकालता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TEI मार्कअप बनाना&lt;/strong&gt;: दो ज़रूरी XML खंड तैयार करता है:
&lt;ul&gt;
&lt;li&gt;एक &lt;strong&gt;प्रामाणिक नाम-सूची की प्रविष्टि&lt;/strong&gt; (&lt;code&gt;&amp;lt;person&amp;gt;&lt;/code&gt; एलिमेंट, जिसमें स्वतः बना &lt;code&gt;xml:id&lt;/code&gt;, &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;birth&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;death&amp;gt;&lt;/code&gt; और &lt;code&gt;&amp;lt;idno type=&amp;quot;VIAF&amp;quot;&amp;gt;&lt;/code&gt; होते हैं)&lt;/li&gt;
&lt;li&gt;एक अलग &lt;strong&gt;टिप्पणी-टैग&lt;/strong&gt; (&lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;, जिसका &lt;code&gt;ref&lt;/code&gt; एट्रिब्यूट नाम-सूची की प्रविष्टि की ओर संकेत करता है)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;इस दोहरे आउटपुट से संपादक एक केंद्रीय नाम-सूची रख सकते हैं और साथ ही अपने TEI पाठों में टिप्पणी-टैग आसानी से डाल सकते हैं।&lt;/p&gt;
&lt;h2 id="मखय-वशषतए"&gt;मुख्य विशेषताएँ&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;मानक ID निर्माण&lt;/strong&gt;: &lt;code&gt;pers-[familyname]-[givenname initial]&lt;/code&gt; के प्रारूप में एकरूप XML ID बनाता है (जैसे &lt;code&gt;pers-deteligny-c&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RDF पार्सिंग&lt;/strong&gt;: &lt;code&gt;rdflib&lt;/code&gt; के ज़रिये विभिन्न RDF प्रॉपर्टियों (जैसे &lt;code&gt;rdfs:label&lt;/code&gt;, &lt;code&gt;schema:name&lt;/code&gt;, &lt;code&gt;viaf:mainHead&lt;/code&gt;) से जानकारी निकालता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;कमांड-लाइन इंटरफ़ेस&lt;/strong&gt;: बस एक VIAF नंबर देकर चलाइए – और कुछ ज़रूरी नहीं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;विस्तृत आउटपुट&lt;/strong&gt;: अंतिम XML के साथ प्रोसेसिंग का पूरा ब्योरा भी देता है&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="उपयग-क-उदहरण"&gt;उपयोग का उदाहरण&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python persNamer.py &lt;span class="m"&gt;314802260&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;यह कमांड देती है:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;person&lt;/span&gt; &lt;span class="na"&gt;xml:id=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;persName&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;birth&amp;gt;&lt;/span&gt;1535&lt;span class="nt"&gt;&amp;lt;/birth&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;death&amp;gt;&lt;/span&gt;1572-08-24&lt;span class="nt"&gt;&amp;lt;/death&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;idno&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;VIAF&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;314802260&lt;span class="nt"&gt;&amp;lt;/idno&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/person&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;persName&lt;/span&gt; &lt;span class="na"&gt;ref=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#pers-deteligny-c&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Charles deTéligny&lt;span class="nt"&gt;&amp;lt;/persName&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="डजटल-मनवक-म-उपयग"&gt;डिजिटल मानविकी में उपयोग&lt;/h2&gt;
&lt;p&gt;persNamer ख़ास तौर पर इनके लिए उपयोगी है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;प्रामाणिक नाम-सूची की ज़रूरत वाले डिजिटल विद्वत्तापूर्ण संस्करण&lt;/li&gt;
&lt;li&gt;ऐतिहासिक व्यक्तियों से जुड़ी TEI एनकोडिंग परियोजनाएँ&lt;/li&gt;
&lt;li&gt;दस्तावेज़ों को प्रामाणिक अभिलेखों से जोड़ने वाली लिंक्ड डेटा पहलें&lt;/li&gt;
&lt;li&gt;बड़े TEI कॉर्पस में एकरूपता बनाए रखना&lt;/li&gt;
&lt;li&gt;डिजिटल मानविकी के पाठ्यक्रमों में प्रामाणिक नाम-सूची की अवधारणा पढ़ाना&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="करयनवयन"&gt;कार्यान्वयन&lt;/h2&gt;
&lt;p&gt;persNamer Python में लिखा गया है और इन पर निर्भर है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP अनुरोधों के लिए &lt;code&gt;requests&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;RDF पार्सिंग के लिए &lt;code&gt;rdflib&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;XML सँभालने के लिए &lt;code&gt;lxml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;स्रोत कोड और दस्तावेज़ीकरण
पर उपलब्ध हैं।&lt;/p&gt;</description></item></channel></rss>