<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TEI |</title><link>https://clementgodbarge.com/hi/tag/tei/</link><atom:link href="https://clementgodbarge.com/hi/tag/tei/index.xml" rel="self" type="application/rss+xml"/><description>TEI</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>TEI</title><link>https://clementgodbarge.com/hi/tag/tei/</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 v0.3: स्रोत को दोबारा लिखे बिना TEI एनकोडिंग</title><link>https://clementgodbarge.com/hi/post/tei-mcp-span-locked/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/tei-mcp-span-locked/</guid><description>&lt;p&gt;जब मैंने
, तो मक़सद था एआई
असिस्टेंटों को TEI मार्कअप गढ़ने से रोकना। स्कीमा-आधार ने समस्या का एक हिस्सा
सुलझा दिया: P5 विनिर्देश तक सीधी, उपकरण-आधारित पहुँच मिल जाने पर मॉडल को अब यह
अनुमान नहीं लगाना पड़ता कि किसी एलिमेंट का मतलब क्या है या वह कौन-से एट्रिब्यूट
स्वीकार करता है। आउटपुट वैध निकलता है।&lt;/p&gt;
&lt;p&gt;लेकिन TEI एनकोडिंग में मतिभ्रम के दो चेहरे हैं, और स्कीमा उनमें से सिर्फ़ एक को
पकड़ती है। विनिर्देश पर परखने से इतना पता चलता है कि &lt;em&gt;मार्कअप&lt;/em&gt; सही बना है। उस
&lt;em&gt;पाठ&lt;/em&gt; के बारे में यह कुछ नहीं कहती, जिसे वह मार्कअप लपेटे हुए है। और यहीं – पाठ में
ही – ज़्यादा घातक मतिभ्रम बसते हैं। v0.3 की प्रमुख सुविधा, स्पैन-लॉक्ड कंपोज़िशन,
ख़ास तौर पर इन्हीं को रोकने के लिए बनाई गई है।&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;सामग्री तालिका&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#वह-मतभरम-जस-सकम-नह-पकड-सकत"&gt;वह मतिभ्रम जिसे स्कीमा नहीं पकड़ सकती&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#सपन-लकड-कपजशन"&gt;स्पैन-लॉक्ड कंपोज़िशन&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#यह-कय-ह-और-कय-नह"&gt;यह क्या है, और क्या नहीं&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tei-स-आग-यह-कय-मयन-रखत-ह"&gt;TEI से आगे यह क्यों मायने रखता है&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#अपडट-कस-पए"&gt;अपडेट कैसे पाएँ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="वह-मतभरम-जस-सकम-नह-पकड-सकत"&gt;वह मतिभ्रम जिसे स्कीमा नहीं पकड़ सकती&lt;/h2&gt;
&lt;p&gt;किसी मॉडल से सोलहवीं सदी का एक फ़्रांसीसी पत्र एनकोड करने को कहिए, और अक्सर आपको
एक ऐसा TEI दस्तावेज़ मिलेगा जो देखने में बेदाग़ लगेगा। हेडर भरा हुआ है, &lt;code&gt;&amp;lt;persName&amp;gt;&lt;/code&gt;
टैग सही जगह पर हैं, &lt;code&gt;&amp;lt;dateline&amp;gt;&lt;/code&gt; ठीक बना है। उसे &lt;code&gt;validate_document&lt;/code&gt; से गुज़ारिए,
और वह पास हो जाता है।&lt;/p&gt;
&lt;p&gt;फिर उसके मूल पाठ का स्रोत से मिलान कीजिए।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mesme&lt;/code&gt; बनकर &lt;code&gt;même&lt;/code&gt; हो गया है। एक अल्पविराम अपनी जगह से खिसक गया है। &lt;code&gt;luy&lt;/code&gt; चुपचाप
आधुनिक होकर &lt;code&gt;lui&lt;/code&gt; बन गया है। पांडुलिपि में जो वाक्यांश पढ़ने में कठिन था, उसे
“सुधारकर” कुछ ज़्यादा साफ़-सुथरा बना दिया गया है। इनमें से कोई बदलाव माँगा नहीं
गया था। कोई चिह्नित नहीं है। दस्तावेज़ स्कीमा के हिसाब से वैध है, और चुपचाप ग़लत।&lt;/p&gt;
&lt;p&gt;अभिलेखीय वर्कफ़्लो में – जहाँ एनकोड किया गया पाठ वह स्थायी अभिलेख बन जाता है
जिस पर आगे के पाठक, खोज-अनुक्रमणिकाएँ और उद्धरण टिके होते हैं – यही वह विफलता है जो
सबसे ज़्यादा मायने रखती है। एक बिगड़ा हुआ टैग खीज पैदा करता है। एक आधुनिक की गई
वर्तनी, जिस पर पाँच साल तक किसी की नज़र न पड़े, पाठ का भ्रष्ट हो जाना है।&lt;/p&gt;
&lt;h2 id="सपन-लकड-कपजशन"&gt;स्पैन-लॉक्ड कंपोज़िशन&lt;/h2&gt;
&lt;p&gt;नया रिलीज़ (v0.3) मतिभ्रम रोकने की एक ऐसी व्यवस्था लेकर आया है, जिसका निशाना ठीक
यही विफलता है। डिज़ाइन का लक्ष्य: मूल पाठ के मतिभ्रम को केवल असंभाव्य नहीं, बल्कि
बनावट से ही असंभव बना देना।&lt;/p&gt;
&lt;p&gt;विचार सीधा-सा है: &lt;strong&gt;मॉडल मूल पाठ कभी टाइप नहीं करता&lt;/strong&gt;।&lt;/p&gt;
&lt;p&gt;इसके बजाय वर्कफ़्लो यों चलता है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;मॉडल &lt;code&gt;get_source(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; बुलाता है और उसे स्रोत का सादा पाठ एक
अपरिवर्तनीय स्ट्रिंग के रूप में मिलता है।&lt;/li&gt;
&lt;li&gt;जो भी टैग वह लगाना चाहता है, उसके लिए वह
&lt;code&gt;tag_span(&amp;quot;letter_001&amp;quot;, start, end, element_path, attrs)&lt;/code&gt; बुलाता है – यानी स्रोत
की एक वर्ण-सीमा पर एक TEI एलिमेंट दर्ज करता है।&lt;/li&gt;
&lt;li&gt;काम पूरा होने पर वह &lt;code&gt;compose(&amp;quot;letter_001&amp;quot;)&lt;/code&gt; बुलाता है। सर्वर दर्ज किए गए टैगों को
मूल सादे पाठ में पिरोता है, अंतिम TEI तैयार करता है, और फिर &lt;em&gt;बाइट-दर-बाइट&lt;/em&gt;
जाँचता है कि तैयार दस्तावेज़ का सपाट पाठ स्रोत के बराबर है या नहीं।&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;बाइट मिल गए, तो दस्तावेज़ लौट आता है। नहीं मिले – अगर मॉडल के टैगों से किसी तरह
ऐसा मूल पाठ निकलता है जो स्रोत से एक भी वर्ण में भिन्न हो – तो &lt;code&gt;compose()&lt;/code&gt; भ्रष्ट
दस्तावेज़ लौटाने के बजाय त्रुटि उठा देता है।&lt;/p&gt;
&lt;p&gt;इस वर्कफ़्लो में कोई ऐसा रास्ता नहीं जिससे मॉडल एक ऐसा TEI दस्तावेज़ बना सके जिसका
मूल पाठ स्रोत से भिन्न हो। यह अपरिवर्तनीय शर्त यांत्रिक है, व्यवहार पर टिकी नहीं।
आपको यह भरोसा नहीं करना कि मॉडल मतिभ्रम नहीं करेगा; आपको बस दो बाइट-स्ट्रिंगों के
बीच एक &lt;code&gt;==&lt;/code&gt; जाँच पर भरोसा करना है।&lt;/p&gt;
&lt;h2 id="यह-कय-ह-और-कय-नह"&gt;यह क्या है, और क्या नहीं&lt;/h2&gt;
&lt;p&gt;स्पैन-लॉक्ड कंपोज़िशन स्कीमा-आधार की &lt;strong&gt;पूरक&lt;/strong&gt; है, उसका विकल्प नहीं। स्कीमा-आधार के
उपकरण (&lt;code&gt;validate_document&lt;/code&gt;, &lt;code&gt;lookup_element&lt;/code&gt;, &lt;code&gt;valid_children&lt;/code&gt; और मूल सोलह में से
बाक़ी) मॉडल को &lt;em&gt;वैध&lt;/em&gt; TEI बनाने में मदद करते हैं। स्पैन-लॉक्ड कंपोज़िशन इसकी गारंटी
देती है कि उस TEI के भीतर का मूल पाठ स्रोत के प्रति &lt;em&gt;वफ़ादार&lt;/em&gt; है। काम में लाने लायक़
एनकोडिंग वर्कफ़्लो को दोनों कसौटियों पर खरा उतरना होता है, और अब दोनों एक ही सर्वर
से सधती हैं।&lt;/p&gt;
&lt;p&gt;यह हर मर्ज़ की दवा भी नहीं है। &lt;code&gt;compose()&lt;/code&gt; अभी यह नहीं जाँचता कि दर्ज किए गए टैग
किसी लोड किए गए ODD अनुकूलन के अनुसार स्वीकार्य हैं या नहीं – यह अगला क़दम है।
दर्ज किए गए टैग प्रोसेस की मेमोरी में रहते हैं और रीस्टार्ट के बाद नहीं बचते। और
स्रोत फ़ाइलें वहाँ से पढ़ने योग्य होनी चाहिए जहाँ सर्वर चल रहा है। ये सब सुलझाए
जा सकते हैं; इनमें से कोई भी मूल अपरिवर्तनीय शर्त को कमज़ोर नहीं करता।&lt;/p&gt;
&lt;h2 id="tei-स-आग-यह-कय-मयन-रखत-ह"&gt;TEI से आगे यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;यह पैटर्न सामान्यीकृत होता है। जब भी किसी मॉडल से किसी पाठ पर टिप्पणी करने, उसे
रूपांतरित करने या लपेटने को कहा जाए – और जब भी मूल पाठ की अखंडता मॉडल की
“सुधारने” की क्षमता से ज़्यादा मायने रखे – तो इसी आकार का समाधान लागू होता है।
मॉडल से पाठ दोबारा टाइप करने को मत कहिए। उससे पाठ पर निर्देश बनवाइए, और एक
नियतात्मक कंपोज़र को समानता की अपरिवर्तनीय शर्त के तहत उन्हें लागू करने दीजिए।&lt;/p&gt;
&lt;p&gt;ख़ास तौर पर डिजिटल संस्करणों के लिए इससे यह बदल जाता है कि आप ज़िम्मेदारी के साथ
किसी मॉडल से क्या करवा सकते हैं। एनकोडिंग अचानक ऐसा काम बन जाती है जिसे आप हर
आउटपुट का स्रोत से हाथ से मिलान किए बिना सौंप सकते हैं। मशीन उबाऊ रास्ता चलती है;
संपादक मार्कअप की समीक्षा करता है, वर्तनी की नहीं।&lt;/p&gt;
&lt;h2 id="अपडट-कस-पए"&gt;अपडेट कैसे पाएँ&lt;/h2&gt;
&lt;p&gt;अगर tei-mcp पहले से इंस्टॉल है:&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@latest
&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;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;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;TEI_MCP_SPAN_SOURCE_ROOT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/sources
&lt;/span&gt;&lt;/span&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;p&gt;हर फ़ाइल का मूल नाम उसका दस्तावेज़ ID बन जाता है (&lt;code&gt;letter_001.txt&lt;/code&gt; →
&lt;code&gt;letter_001&lt;/code&gt;)।&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>tei-mcp: एआई एजेंटों के लिए TEI P5</title><link>https://clementgodbarge.com/hi/post/tei-mcp/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>https://clementgodbarge.com/hi/post/tei-mcp/</guid><description>&lt;p&gt;अगर आपने कभी किसी एआई कोडिंग असिस्टेंट से TEI XML लिखवाया है, तो ग़ौर किया होगा कि वह
गड़बड़ कर बैठता है। एलिमेंट वहाँ आ जाते हैं जहाँ उन्हें नहीं होना चाहिए। एट्रिब्यूट
गढ़ लिए जाते हैं। नेस्टिंग के नियम अनदेखे रह जाते हैं। मॉडल को मोटा-मोटी अंदाज़ा है
कि TEI कैसी दिखती है, पर विनिर्देश का कोई भरोसेमंद ज्ञान नहीं।&lt;/p&gt;
&lt;p&gt;tei-mcp इसका हल है: यह एआई एजेंटों को TEI P5 दिशानिर्देशों तक सीधी, उपकरण-आधारित
पहुँच देता है।&lt;/p&gt;
&lt;details class="print:hidden xl:hidden" &gt;
&lt;summary&gt;सामग्री तालिका&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#mcp-कय-ह"&gt;MCP क्या है?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#tei-mcp-कय-करत-ह"&gt;tei-mcp क्या करता है&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#शरआत-कस-कर"&gt;शुरुआत कैसे करें&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="mcp-कय-ह"&gt;MCP क्या है?&lt;/h2&gt;
&lt;p&gt;
(MCP) एक खुला मानक है, जो
एआई ऐप्लिकेशनों को बाहरी डेटा-स्रोतों और उपकरणों से जोड़ने देता है। इसे एआई का USB
पोर्ट समझिए: एक ही प्रोटोकॉल, जिससे कोई भी संगत क्लाइंट – Claude, Cursor, Windsurf
और अन्य – विशेष सेवाओं में प्लग हो सकता है।&lt;/p&gt;
&lt;p&gt;एक MCP सर्वर ऐसे &lt;em&gt;उपकरण&lt;/em&gt; उपलब्ध कराता है, जिन्हें एआई बातचीत के दौरान बुला सकता है।
रटे हुए प्रशिक्षण-डेटा के भरोसे रहने के बजाय मॉडल किसी जीवंत, प्रामाणिक स्रोत से
पूछ सकता है।&lt;/p&gt;
&lt;h2 id="tei-mcp-कय-करत-ह"&gt;tei-mcp क्या करता है&lt;/h2&gt;
&lt;p&gt;tei-mcp 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;&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;&lt;strong&gt;क्या मेरा दस्तावेज़ वैध है?&lt;/strong&gt; किसी TEI XML फ़ाइल को विनिर्देश पर परखिए: कंटेंट
मॉडल, एट्रिब्यूट के मान, बंद मान-सूचियाँ, संदर्भों की अखंडता और अप्रचलन की
चेतावनियाँ।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;और मेरी परियोजना की स्कीमा?&lt;/strong&gt; ODD अनुकूलन फ़ाइल लोड कीजिए, ताकि ऊपर का सब कुछ
आपकी परियोजना के TEI उपसमुच्चय तक सीमित रहे।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;TEI एनकोडिंग में दिशानिर्देशों को बार-बार देखना पड़ता है। अनुभवी एनकोडर सबसे आम
पैटर्न आत्मसात कर लेते हैं, लेकिन कम परिचित एलिमेंटों या जटिल कंटेंट मॉडलों के लिए
उन्हें भी विनिर्देश खोलना पड़ता है। एआई असिस्टेंटों के पास ऐसा कोई आत्मसात ज्ञान
नहीं होता, इसलिए उनकी समस्या और गंभीर है: वे देखने में ठीक-ठाक पर ग़लत मार्कअप
गढ़ लेते हैं।&lt;/p&gt;
&lt;p&gt;tei-mcp के साथ एआई को अनुमान लगाने की ज़रूरत नहीं। पहला कोण-कोष्ठक लिखने से पहले
वह विनिर्देश में जवाब देख सकता है। नतीजा: ऐसा मार्कअप जो TEI P5 के – या आपकी
परियोजना के ODD अनुकूलन के – अनुरूप हो।&lt;/p&gt;
&lt;h2 id="शरआत-कस-कर"&gt;शुरुआत कैसे करें&lt;/h2&gt;
&lt;p&gt;PyPI से इंस्टॉल कीजिए:&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;pip install tei-mcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;फिर इसे अपने MCP क्लाइंट की कॉन्फ़िगरेशन में जोड़िए:&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;सर्वर पहली बार चलने पर TEI विनिर्देश डाउनलोड करता है और किसी भी MCP-संगत क्लाइंट
के साथ काम करता है।&lt;/p&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>