semfont: تایپوگرافی که معنی متن رو میفهمه
خلاصهٔ کاملتر
semfont یه کتابخونهی کوچیک جاوااسکریپته که تایپوگرافی متن رو خودکار تنظیم میکنه. نویسنده میگه ایده اینه که بعضی کلمهها رنگی، پررنگ، هایلایت یا ایتالیک بشن تا چشم زودتر نکتهی اصلی رو پیدا کنه. کل کار روی چهار نمرهای میچرخه که به هر کلمه داده میشه: هر نمره اول از یه دیکشنری برداشته میشه و بعد با چندتا قانون روی کلمههای اطراف تنظیم میشه.
نمرهی اول valence ـه، یعنی اینکه کلمه بار مثبت داره یا منفی، از ۱- تا ۱. اگه تا سه کلمه عقبتر یه نفیکننده مثل not باشه، علامت نمره برعکس و کمی ضعیفتر میشه، چون «not great» یه گلایهی ملایمه، نه دقیقاً برعکس تعریف کردن. نمرهی دوم salience ـه، یعنی کلمه چقدر ارزش نگاه کردن داره. هم به نادر بودن کلمه بستگی داره هم به تکرارش تو همون متن: کلمهی کمکاربردی که مدام تکرار میشه، همون چیزیه که متن دربارهشه.
نمرهی سوم surprise ـه که نقطهی چرخش جمله رو پیدا میکنه. بعضی کلمهها مثل suddenly خودشون این نمره رو دارن و بقیه از روی فاصلهشون با یه کلمهی تضاد نمره میگیرن، تا شش کلمه بعدش و هرچی دورتر کمتر. نمرهی چهارم certainty ـه، یعنی نویسنده چقدر مطمئن حرف میزنه. نکتهش اینه که یه کلمهی تردید مثل probably فقط خودش علامت نمیخوره، بلکه ۵۵ درصد نمرهشو به بقیهی کلمههای همون جمله هم میده تا کل خط کمی متمایل بشه نه یه کلمه وسط جمله.
به گفتهی نویسنده این قانونها که فقط چند کلمه اینور و اونور رو میبینن یه نقطهکور داشتن. تو جملهی «I would not go so far as to call the new editor great» کلمهی great سبز میموند، چون not نُه کلمه عقبتر بود. حالا یه پاس دوم اضافه شده که هر جملهواره رو کامل میخونه: نفی تا آخر جملهواره کشیده میشه و فعلهایی مثل fixed یا recovered هرچی بعدشون بیاد رو به عنوان چیزی که درست شده علامت میزنن. همین پاس «less broken» رو بهبود و «too simple» رو گلایه میخونه.
استفادهش سادهست. تو ریاکت کامپوننت SemanticText رو دور متن میذاری:
import { SemanticText } from 'semfont';
<SemanticText as="p">
The migration ran clean on staging. In production it deleted the index,
and the rollback failed too.
</SemanticText>میتونی تم رو عوض کنی، فقط بعضی کانالها رو روشن کنی، یا واژههای خودت رو با lexicon یادش بدی. اگه اصلاً ریاکت نداری، analyze رو مستقیم صدا میزنی و همون چهار عدد رو برای هر کلمه میگیری بدون هیچ CSSی. نویسنده قبول داره که دستهبندی کامل و بینقص با این سرعت شدنی نیست، ولی میگه برای راحتتر خوندن لازم نیست بینقص باشه.
نکات کلیدی:
- هر کلمه چهار نمره میگیره: valence، salience، surprise و certainty.
- نفیکننده تا سه کلمه عقبتر علامت valence رو برعکس میکنه و با ضریب ۰٫۷۴ ضعیفش میکنه.
- یه کلمهی تردید ۵۵ درصد نمرهی قاطعیتشو به بقیهی کلمههای همون جمله میده.
- پاس دوم تقریباً هزینهی پاس اوله، برای همین همیشه روشنه و سوییچ خاموش کردن نداره.
- نسخهی پینشده تو دموی خود صفحه semfont@0.2.0 روی npm ـه و کد روی گیتهاب در دسترسه.




