انتشار ۱۰۶ رباعی خیام با فرمت YAML
وب فارسی از نظر دسترسی به دادههای دارای متادیتا خیلی ضعیف است. داده اگر هم وجود داشته باشد ساختار ندارد. این شد که کتاب کوچک خیام خودم را به فرمت YAML درآوردم.
متادیتا
متادیتا یعنی داده راجع به داده. یعنی وقتی ماشین دادهها را میخواند میتواند بفهمد آنها به چه دردی میخورند. مثلا یک صوتی با فرمت mp3 را در نظر بگیریم. طبق تعریف این فرمت امکان ذخیره دادههایی غیر از اصوات در این فایل هست. مثلا نام آلبوم، آهنگساز، ژانر و مانند اینها. حالا اگر یک آرشیو موسیقی داشته باشیم که متادیتا هم داشته باشد برنامههای مختلف میتوانند در جستجو به ما کمک کنند. ولی در نبود این متادیتا همه فایلها شبیه به هم هستند. باید هر یک را باز کرد و گوش کرد تا فهمید داخلش چیست. بگذریم از اینکه هوش مصنوعی امروز میتواند آنها را هم گوش بکند و نتیجه بگیرد داخلش چیست. در نبود متادیتا دادهها را در نازلترین شکل خود بکار میگیریم.
آنچه در مورد مورد متادیتا گفتم راجع به اشعار هم صدق میکند. مثلا اگر جستجوی در وب فارسی بزنید کلی وبسایت و وبلاگ پیدا میکنید که اشعار را به صورت پراکنده یا دستهبندی شده روی سایت قرار دادهاند. اما هیچ کجا رباعیات خیام را در یک فرمت ماشینپسند مانند YAML یا JSON به همراه یک لایسنس آزاد پیدا نکردم. مثلا صدها بیت شعر که در وب کپی شدهاند به درد من نمیخورند. من اشعاری میخواهم با ذکر منبع و دارای مجوز استفاده آزاد و در یک قالبی که براحتی بتوان در یک برنامه از آن استفاده کرد.
۱۰۶ رباعی
من مدتهاست کتاب کوچکی دارم که ۱۰۶ رباعی خیام را در خود جا داده است. کتاب «رباعیات عمر خیّام» نام دارد و حاصل کوشش «محسن مجید تجریشی» است. طی روزهای گذشته نشستم و کل رباعیها را در یک فایل YAML پیاده کردم. فایل حاوی رباعیها را در یک مخزن روی گیتهاب آپلود کردهام که میتوانید آنرا دانلود و استفاده کنید. مجوز هم داخل فایل ذکر شده است.
فایل حاوی چند فیلد برای روشن کردن هدف فایل و لایسنس و منابع است. سپس یک فیلد بنام ‘RUBAIYAT’ وجود دارد که به ترتیب شماره از ۱ تا ۱۰۶ رباعیها را در خود جا داده است. هر رباعی چهار مصرع دارد که با حروف A و B و C و D از یکدیگر متمایز شدهاند. در پایتون میتوان با پکیج pyyaml
فایل YAML را خواند:
>>> from yaml import CLoader as Loader, CDumper as Dumper
>>> from yaml import load, dump
>>> f = open('khayyam.yaml', 'r')
>>> data = load(f, Loader=Loader)
>>> data.keys()
['License', 'Reference', 'Author', 'Introduction', 'RUBAIYAT', 'Version', 'KHAYYAM', 'Resources']
>>> print data['RUBAIYAT'][93]['A']
ایکاش که جای آرمیدن بودی
>>> print data['RUBAIYAT'][93]['B']
یا این رهِ دور را رسیدن بودی
>>>
اگر از konsole یا mlterm استفاده کنید رباعیها به درستی در ترمینال نمایش داده میشوند. در ترمینال نوم (گنوم) هم میشود با دستور fribidi حرفها را به هم چسبیده نمایش داد.
قدمهای بعدی
حالا که داده خام به قالب مناسب در دست است میتوان از آن در ساختن برنامههای دیگری استفاده کرد. مثلا نمایش رندم یک رباعی. یا نمایش یک رباعی که حاوی کلمه خاصی است. یا نوشتن یک بوت تلگرام که این کارها را برای ما انجام بدهد.
پست جالبی بود. تشکر بابت زحمتی که کشیدید.