tei-mcp v0.3: رمزگذاری TEI بدون بازنویسی متن مبدأ

وقتی نخستین بار دربارهٔ tei-mcp نوشتم، هدف این بود که دستیارهای هوش مصنوعی از توهم در نشانهگذاری TEI باز بمانند. پایهگذاری بر شِما بخشی از مشکل را حل کرد: با دسترسی مستقیم و ابزارمحور به مشخصات P5، مدل دیگر ناچار نیست حدس بزند یک عنصر چه معنایی دارد یا کدام صفتها را میپذیرد. خروجی از اعتبارسنجی میگذرد.
اما توهم در رمزگذاری TEI دو چهره دارد و شِما تنها یکی از آنها را میگیرد. اعتبارسنجی در برابر مشخصات به شما میگوید که نشانهگذاری خوشساخت است. دربارهٔ متنی که نشانهگذاری آن را در بر گرفته چیزی نمیگوید. و همانجا — در خودِ متن — است که توهمهای زیانبارتر لانه میکنند. ترکیب بازهقفل (span-locked composition)، ویژگی شاخص نسخهٔ v0.3، دقیقاً برای پیشگیری از همینها طراحی شده است.
فهرست مطالب
توهمی که شِما نمیتواند بگیرد
از مدلی بخواهید نامهای فرانسوی از سدهٔ شانزدهم را رمزگذاری کند و اغلب
سند TEIای تحویل میگیرید که بیعیب مینماید. سرآیند پر شده، برچسبهای
<persName> درست نشستهاند، <dateline> خوشساخت است. آن را از
validate_document بگذرانید؛ قبول میشود.
حالا بدنه را با متن مبدأ مقایسه کنید.
mesme شده است même. یک ویرگول جابهجا شده. luy بیسروصدا به
lui امروزی شده. جملهای که در دستنویس دشوارخوان بود، به چیزی
پاکیزهتر «تصحیح» شده. هیچیک از این تغییرها خواسته نشده بود.
هیچیک علامت نخورده. سند از نظر شِما معتبر است و در سکوت غلط.
برای گردش کار آرشیوی — که در آن متن رمزگذاریشده به سند دائمیای بدل میشود که خوانندگان بعدی، نمایههای جستوجو و ارجاعها بر آن تکیه میکنند — این همان خطایی است که بیش از همه اهمیت دارد. یک برچسب بدساخت آزاردهنده است. املایی امروزیشده که پنج سال کسی متوجهش نشود، تحریف است.
ترکیب بازهقفل
نسخهٔ تازه (v0.3) سازوکاری برای پیشگیری از توهم دارد که یکراست همین خطا را نشانه رفته است. هدف طراحی این است که توهم در متن بدنه از حیث ساخت ناممکن شود، نه صرفاً نامحتمل.
ایده ساده است: مدل هرگز متن بدنه را تایپ نمیکند.
در عوض، گردش کار چنین است:
- مدل
get_source("letter_001")را فرا میخواند و متن سادهٔ مبدأ را بهصورت رشتهای تغییرناپذیر دریافت میکند. - برای هر برچسبی که میخواهد به کار ببرد،
tag_span("letter_001", start, end, element_path, attrs)را فرا میخواند — یعنی یک عنصر TEI را در بازهای از نویسهها روی متن مبدأ ثبت میکند. - وقتی کارش تمام شد،
compose("letter_001")را فرا میخواند. سرور برچسبهای ثبتشده را با متن سادهٔ اصلی درهم میبافد، TEI نهایی را میسازد و سپس بایتبهبایت وارسی میکند که محتوای متنی تختِ سند ساختهشده با متن مبدأ برابر است.
اگر بایتها یکی باشند، سند برمیگردد. اگر نباشند — اگر برچسبهای مدل
به هر دلیلی بدنهای را ایجاب کنند که حتی یک نویسه با مبدأ تفاوت دارد —
compose() به جای تحویل سند تحریفشده، خطا میدهد.
در این گردش کار هیچ مسیری وجود ندارد که مدل از آن سند TEIای
بسازد که متن بدنهاش با مبدأ فرق کند. این ناوردا مکانیکی است،
نه رفتاری. لازم نیست به مدل اعتماد کنید که توهم نزند؛ کافی است
به یک مقایسهٔ == میان دو رشتهٔ بایت اعتماد کنید.
این چه هست و چه نیست
ترکیب بازهقفل مکمل پایهگذاری بر شِماست، نه جانشین آن.
ابزارهای پایهگذاری بر شِما (validate_document،
lookup_element، valid_children و باقی شانزده ابزار اولیه)
به مدل کمک میکنند TEI معتبر بسازد. ترکیب بازهقفل تضمین میکند
که متن بدنه درون آن TEI به مبدأ وفادار است. یک گردش کار
رمزگذاریِ قابل استقرار باید هر دو محور را برآورده کند، و حالا هر دو
با یک سرور واحد پوشش داده میشوند.
نوشدارویی برای همه چیز هم نیست. compose() هنوز بررسی نمیکند
که برچسبهای ثبتشده بر پایهٔ یک سفارشیسازی ODD بارگذاریشده مجازند یا نه —
این کار بعدی است. برچسبهای ثبتشده در حافظهٔ فرایند میمانند و پس از
راهاندازی مجدد از بین میروند. و فایلهای مبدأ باید از هر جا که سرور اجرا میشود
خواندنی باشند. همهٔ اینها چارهپذیرند؛ هیچیک ناوردای اصلی را
سست نمیکند.
چرا فراتر از TEI هم اهمیت دارد
این الگو تعمیمپذیر است. هر بار که از مدلی خواسته میشود قطعهای متن را حاشیهنویسی، تبدیل یا بستهبندی کند — و هر بار که سلامت متن زیرین مهمتر از توانایی مدل در «بهتر کردن» آن باشد — همین شکل از راه حل کاربرد دارد. از مدل نخواهید متن را دوباره تایپ کند. از آن بخواهید دستورالعملهایی روی متن تولید کند، و بگذارید یک ترکیبکنندهٔ قطعی آنها را زیر ناوردای برابری اعمال کند.
برای نسخههای دیجیتال بهطور خاص، این تغییر میدهد که مسئولانه چه چیزی را میتوان به مدل سپرد. رمزگذاری ناگهان به کاری بدل میشود که میتوان واگذارش کرد بیآنکه ناچار باشید هر خروجی را دستی با مبدأ مقایسه کنید. ماشین راه ملالآور را میرود؛ مصحح نشانهگذاری را بازبینی میکند، نه املا را.
دریافت بهروزرسانی
اگر tei-mcp را از قبل نصب کردهاید:
uvx tei-mcp@latest
یا از نو:
pip install tei-mcp
برای استفاده از ترکیب بازهقفل، سرور را به پوشهای از فایلهای متن سادهٔ مبدأ نشانه بروید:
export TEI_MCP_SPAN_SOURCE_ROOT=/path/to/sources
uvx tei-mcp
نام هر فایل بدون پسوند، شناسهٔ سند آن میشود (letter_001.txt →
letter_001).
کد منبع، مستندات کامل و یادداشتهای طراحی ناوردا: github.com/Pantagrueliste/tei-mcp
