پرهام غدیری‌پور
پرهام غدیری‌پور
خواندن ۱۲ دقیقه·۴ سال پیش

تاثیر دستور خط فارسی در کارایی جستجوی پایگاه داده

در پایگاه داده چند شکل ثبت‌کردنِ کلمات فارسی نتیجهٔ جستجو را به‌شکل رخداد اتفاقی درمی‌آورد و ناکارآمد می‌کند. راه‌حل آن «یکدست‌بودن دستور خط» است.

در اینجا می‌خواهم به همهٔ کسانی که در پروژه‌های تولید و راه‌اندازی سیستم‌های جستجویِ پایگاه داده دست دارند، نشان بدهم اگر جنس داده از نوشتار فارسی باشد، آشفتگی نوشتهٔ داده (دستور خط فارسی) سیستم جستجو را ناکارآمد می‌کند و زحمات سازندگان را به هدر می‌دهد.

در این مطلب ابتدا مفهومی را بیان می‌کنم که عمل جستجوی نوشتاری به آن وابسته است و یک ویژگی از خط فارسی را می‌گویم که رعایت‌نکردن آن مشکل‌زا است. آنگاه با آوردن نمونه نشان می‌دهم چه مشکلی پیش می‌آید. در پایان نیز برای رفع مشکل چند پیشنهاد می‌دهم.

مفهوم، زبان، نوشتار (خط)

یک «چیز» را در نظر بگیرید؛ مثلا میوه‌ای که شاید از پیش از خلقت بشر بوده است. اجداد ما در زمانی که هنوز زبان را اختراع نکرده بودند، آن را می‌شناختند و می‌خوردند. سپس وقتی هوشمند شدند و خواستند با حرف‌زدن مفاهیم را بیان کنند، زبان را اختراع کردند و به آن چیز در فارسی صدای سیب دادند. بعد که هوشمندتر شدند، خط را اختراع کردند و آن را به‌شکل «سیب» نوشتند.
اکنون توجه کنید سیب در زبان‌های گوناگون نام‌های گوناگون دارد که ممکن است هیچ شباهتی با هم نداشته باشند؛ پس وجود مفاهیم از وجود زبان مستقل است. چنانکه سیب بود؛ وقتی هنوز هیچ زبانی اختراع نشده بود. همچنین کلمهٔ سیب را که فارسی است، می‌توان به خط فارسی یا انگلیسی یا ژاپنی نوشت که هیچ شباهتی ندارند؛ پس وجود زبان نیز از وجود خط مستقل است.

هدف از این روده‌درازی این بود که بگویم آدم‌ها وقتی در نرم‌افزار جستجو می‌کنند، دنبال مفاهیم ذهنی مانند «رفاه» یا عینی مانند «نان» می‌گردند؛ نه کلمات یا نوشته‌ها که سمبل آن‌ها هستند. «کلمات» صدا و باد هوا هستند و «نوشته» هم خط‌خطی است؛ ما آدم‌ها قرارداد کرد‌ه‌ایم که از آن صدا یا خط‌خطی چیزی بفهمیم.
خلاصه اینکه از «نوشته» به کلمه و از «کلمه» به «مفهوم» پی می‌بریم و این ارتبط باید برقرار باشد تا به مفهوم دست یابیم. سیستم جستجو با برقرار داشتنِ این ارتباطِ درست می‌تواند مفاهیمی را پیدا کند که کاربر می‌خواهد.

ویژگی خط فارسی

مطلوب این است که هر یک کلمه که بیانگر یک مفهوم است، در «خط» فقط یک شکل نوشتاری داشته باشد. ولی باید دانست خط فارسی برخلاف انگلیسی، طوری است که ممکن است یک کلمه را بتوان به شکل‌های گوناگون نوشت. یادآوری می‌کنم آنچه اینجا می‌گویم با املا فرق دارد. برای نمونه به این نام خانوادگی توجه کنید که می‌توان آن را به چندین حالت نوشت: «حسینقلیخانی»، «حسین قلیخانی»، «حسینقلی‌خانی»، «حسین‌قلی‌خانی»، «حسین قلی‌خانی»، «حسین‌قلی خانی»، «حسین قلی خانی». می‌بینید که این کلمه ۷ حالت ممکن دارد.
به همین دلیل است که «دستور خط فارسی» را تدوین کرده‌اند؛ برای اینکه هر یک کلمه یک شکلِ نوشتاری داشته باشد و این مشکل کمتر بشود. اگر در نوشته‌های فارسی وحدت رویه نداشته باشیم، آشفتگی پیش می‌آورد. بدین معنی که یک کلمه در هرجایی ممکن است یک جور متفاوت باشد. متن و داده (Data) هر دو از آشفتگی دستور خط تاثیر می‌پذیرند.

https://virgool.io/ppparsi/%DA%AF%DA%86%D9%BE%DA%98-%D9%86%DB%8C%D9%85%D9%81%D8%A7%D8%B5%D9%84%D9%87-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1-%D8%AE%D8%B7-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%B1%D8%B3%D9%85%D8%A7%D9%84%D8%AE%D8%B7-sjkaidu75sj5

تفاوت تاثیر آشفتگیِ خط بر متن و داده (Data)

آشفتگی دستور خط در «متن» با اینکه بسیار آزاردهنده و گاهی ابهام‌زا یا گمراه‌کننده است، به‌طور کلی مانع از درک معنا نمی‌شود. متن ترکیب منظم و به‌هم‌بافته‌ای از کلمات و مفاهیم است و انسان هوشمند که زبان و خط را اختراع کرده است با آن مغز پیچیده و کارآمدی که دارد، هنگام خواندن از راه‌های گوناگون می‌تواند معنای درست را دریابد؛ هرچند خط آشفته باشد. برای نمونه می‌فهمیم «استفاده ای» و «استفاده‌ای» یکی است. یا تشخیص می‌دهیم «سر سفره نشستم و آن گور با پنیر خوردم» باید به‌شکل «... انگور با پنیر خوردم» درست باشد. به‌اصطلاح از بافت متن می‌توان فهمید.

اما «داده» (Data) معمولا کلمه یا عبارت یا کد است که گردآوری شده تا انسان یا ماشین بتواند آن‌ها را پیدا کند. استفاده‌کردن از «متن» بدین شکل است که کسی می‌نویسد و دیگری می‌خواند؛ فقط یک بار با نوشتن کار دارد. استفاده از داده وابسته به جستجو است؛ دو بار با نوشتن کار دارد: یک بار هنگام ثبت در پایگاه داده، بار دوم هنگام جستجو.
اکنون این نکته را یادآوری می‌کنم که جستجو با تطبیق‌دادن چیزی که کاربر می‌نویسد با آنچه در پایگاه داده هست کار می‌کند. در اینجا آشفتگی نوشته‌هایی که در پایگاه داده ثبت شده است، یعنی نداشتن وحدت‌رویه در دستور خط، کار تطبیق درخواست کاربر با موجودی پایگاه داده را با اشکال روبه‌رو می‌کند.

چگونگی تاثیر آشفتگیِ نوشته بر نتیجهٔ جستجو

برای روشن‌کردن مشکل، به نمونهٔ آن نام خانوادگی برمی‌گردیم که به ۷ شکل می‌توان نوشت. اگر بخواهند آن را وارد پایگاه داده کنند، کدام شکلش را ثبت می‌کنند؟ فرض می‌کنیم نام آن آقای محترم را در ۱۰ جا ثبت کرده‌اند و باید پیدا بشود. این وضعیت حالت‌های گوناگون دارد:

اگر در همه‌جا فقط یکی از آن شکل‌ها را ثبت کرده باشند، اگر شکل نوشته‌ای که کاربر با جستجو درخواست می‌کند با آنچه ثبت کرده‌اند فرق کند، مثلا اگر بنویسد «حسینقلیخانی» ولی در پایگاه داده ثبت کرده باشند «حسین قلی خانی»، نرم‌افزار چگونه تشخیص می‌دهد این همان است که شکل دیگرش موجود است؟
از سوی دیگر اگر نرم‌افزار نمی‌تواند شکل‌های گوناگون یک نوشتهٔ واحد را دریابد و در بخش جستجو فقط باید همان را که ثبت کرده‌اند تایپ کرد، کاربر چگونه بداند کدام شکلش را در پایگاه داده ثبت کرده‌اند که همان را بنویسد و به جواب برسد؟

اکنون رفتار کاربر و سیستم را در همین حالت بررسی می‌کنیم؛ یعنی در حالتی که آن کلمه را در همه‌جای پایگاه داده یک جور ثبت کرده‌اند و جستجو کننده نمی‌داند چه‌شکلی بنویسد تا جواب بگیرد.
در این وضعیت کاربر ناخودآگاه یکی از آن ۷ حالت را که بلد است جستجو می‌کند. اگر اتفاقاً مطابقت داشته باشد، پیدا می‌شود. وگرنه که احتمالش هم زیاد است، چون آن کلمه ۷ شکل ممکن دارد، چیزی پیدا نمی‌کند و نتیجه می‌گیرد این نام اصلا در پایگاه داده نیست. اگر زرنگ باشد چند حالت دیگر را هم که به ذهنش می‌رسد جستجو می‌کند. باز ممکن است اتفاقاً آن حالتی را که ثبت کرده‌اند پیدا کند. ولی احتمال پیدا نشدنش زیاد است؛ چون ممکن است ۶ حالت از آن کلمه به ذهنش برسد که هیچ‌کدامشان آن یک حالت باقی مانده نباشد که ثبت کرده‌اند.

فرض دیگر این است که آن یک نام را با سهل‌انگاری در ۱۰ جا به ۷ حالت ثبت کرده باشند و کاربر یکی از آن‌ها را جستجو کند، مثلا بنویسد «حسینقلی خانی» که به‌فرض ۲ بار با این شکل ثبت کرده‌اند. در این حالت ۲ جا پیدا می‌شود؛ ولی تکلیف ۸ جای دیگر چیست؟ پیدا می‌شود یا گم است؟

توجه کنید که این وضعیت برای جستجو با چند کلمه (عبارت) پیچیده‌تر می‌شود؛ چون هر واژهٔ جداگانه خودش همین وضعیت را دارد.

نتیجه بی‌توجهی به وحدت رویهٔ نوشته‌ها

نوشتهٔ کلمات (خط) واسطهٔ ارتباط کاربر با مفاهیم ثبت‌شده در پایگاه داده است. آشفته‌بودن نوشته‌ها این رابطه را مختل می‌کند و ممکن است کاربر نتواند چیزی پیدا کند.

حل‌نکردن این مشکل کارایی سیستم بازیابی را به‌شدت کاهش می‌دهد؛ چون پیدا شدن آنچه در پایگاه داده موجود است، در این حالت رخدادی است اتفاقی که بر اساس احتمال مطابقت شکل نوشتهٔ کاربر با شکل نوشتهٔ‌ ثبت‌شده در داده تعیین می‌شود.
این وضعیت جستجو را ناکارآمد می‌کند، کاربر دست خالی می‌ماند، زحمات سازندگان و پول صاحب سرمایه به هدر می‌رود. به‌ویژه اگر مثلا سایتی باشد که مردم روزانه گرفتارش باشند و جایگزینی هم نداشته باشد، نتیجهٔ کار می‌شود این گفتهٔ سعدی: «یکی را خری در گل افتاده بود... سقط گفت و نفرین و دشنام داد... که نگذاشت کس را نه دختر نه زن...».

توجه به این نکته ضرورت دارد که این ایراد، چه داده (Data) از جنس نوشتهٔ فارسی باشد چه کد، یعنی ترکیب فارسی با چیزهای دیگر، برای پایگاه دادهٔ ویژهٔ پردازش نیز اشکال به وجود می‌آورد و نتایج پردازش را نامعتبر می‌کند. زیرا ماشین پردازندهٔ نرم‌افزاری از روی ظاهر کلمات کار می‌کند و شکل‌های مختلف نوشتهٔ یک کلمهٔ واحد را که نمایندهٔ یک مفهوم واحد است، چند تا در نظر می‌گیرد.

پنهان‌بودن ناکارآمدی سیستم جستجو

اگر مشکلی به چشم بیاید، مثلا ابزارمان آن کاری را که باید بکند نکند و همه ببینید درست کار نمی‌کند، کاربران شکایت می‌کنند و مسئول مربوطه می‌بیند و برای درست‌کردن اشکال دست‌به‌کار می‌شود؛ معمولا.
کارایی یا ناکارآمدی سیستم‌هایی که با بازیابی داده کار می‌کنند، به چشم نمی‌آید. زیرا:

اول اینکه داده انبوه و گاهی عظیم است؛ به‌دلیل حجم زیادی که دارد، انسان نمی‌تواند چندوچون آن را بررسی کند. اصلا به همین دلیل است که برای آن پایگاه داده و جستجو یا نرم‌افزارهای پردازندهٔ ماشینی می‌سازند. پس چون تنها وسیلهٔ دسترسی و بررسی داده همان نرم‌افزاری است که خدمات می‌دهد، اگر اشکالِ نادانسته داشته باشد، کسی متوجه آن نمی‌شود.

دوم اینکه همه باور دارند چنانچه اِشکال از شکل پرسش‌کردن کاربرد نباشد، اگر آنچه با نوشته درخواست می‌کند در پایگاه داده موجود باشد، حتما پیدا خواهد شد؛ اگر نباشد و نرم‌افزار بگوید نیست، حتما نبوده است. هیچ‌کس انتظار ندارد چیزی را به‌روش درست درخواست کند، ولی نرم‌افزار بگوید نیست.

یک ويژگی ذاتی پایگاه داده نیز به این پنهان‌ماندن کمک می‌کند. اینکه هر مفهوم یا چیز از چند راه گوناگون (فیلد) پیدا می‌شود. کاربر اولی را امتحان می‌کند؛ اگر نشد دومی، اگر نشد سومی... . این تا حدی از شدت ناکارآمدی می‌کاهد و مشکل کلی را از نظر دور نگه می‌دارد.

من کارشناس نرم‌افزار نیستم و نمی‌دانم آیا اصولا روش‌هایی برای اعتبارسنجی پیوسته یا دوره‌ایِ سیستم‌های بازیابی و پردازش پایگاه داده وجود دارد یا نه. ولی آنچه به‌تجربه از نزدیک دیده‌ام، بسیاری از مواقع فقط به‌دلیل بی‌توجهی به نادرست‌بودن ورود اطلاعات با رعایت‌نکردن وحدت رویه در نوشتن و آشفته‌بودن تایپ کلمات فارسی و کدها (دستور خط)، سیستم یا نرم‌افزار ناکارآمد می‌شود.

سه نمونه ناکارآمدی سیستم جستجو به‌دلیل آشفتگی نوشتهٔ داده

در اینجا سه نمونهٔ واقعی بیان می‌کنم که از نزدیک با آن‌ها کار کرده‌ام. توجه کنید این نمونه‌ها به‌دلیل کارکردی که دارند، ناگزیر مشکل خود را نشان می‌دهند. کتاب‌شناسی ملی باید همهٔ کتاب‌های منتشرشده را در خود داشته باشد؛ پس اگر کتابی پیدا نشود معلوم است ایراد دارد. سایت کد پستی هم باید تمامی نشانی‌های شهر تهران را در خود داشته باشد؛ پس «پیدا نمی‌شود» در آن معنی ندارد. دادهٔ نرم‌افزار کتابخانهٔ خودمان هم از روی کتاب‌های موجود پر شده است؛ پس نمی‌شود کتابی در مخزن کتابخانه باشد ولی آنجا پیدا نشود.

نمونهٔ اول نرم‌افزار کتاب‌شناسی ملی: «کتاب‌شناسی ملی» مرجع اطلاعاتِ نشریات چاپی و غیر چاپی کشور است که کتابخانهٔ ملی تدوین می‌کند و کتابخانه‌ها یا مراکزی که با کتاب و نشریات سروکار دارند از آن استفاده می‌کنند. در دادهٔ کتاب‌شناسی نوشته و عدد و کد داریم. در سیستم کتابداری انواع داده چه از نظر شکل چه از نظر محتوا، استانداردشده و بسیار دقیق تعریف شده‌اند و انتظار می‌رود خطای آن ناچیز باشد.
با این حال نرم‌افزار کتاب‌شناسی ملی بیش از انتظار آشفته و جستجوی آن کمتر از انتظار کارآمد است. پیش‌تر این مشکل را در مطلب «باورهای نادرست دربارهٔ کتاب‌شناسی ملی» بررسی کرده‌ام. در بخشی از این مطلب می‌بینید چگونه سهل‌انگاری و بی‌دقتی در کار تایپ اطلاعات، موجب شده انواع ایرادها به وجود آید. نتیجهٔ این کم‌توجهی و آشفتگی این است که کارایی جستجوی این پایگاه داده کاهش یافته است. بدتر اینکه چون اطلاعات آن را سیستم‌های دیگر کپی می‌کنند، مشکلاتش به کتابخانه‌هایی که از آن استفاده می‌کنند سرایت می‌کند. این پایگاه داده مشکل آشفتگی دستور خط را هم دارد.

https://vrgl.ir/kpsdz

نمونهٔ دوم سامانه کدپستی و صدور گواهی: به‌تازگی یکی از دوستان از من خواست کد پستی نشانی منزلش را برایش پیدا کنم. پس از جستجو در گوگل، این سایت را پیدا کردم که ظاهر خوب و سازوکار آسانی برای پیدا کردن نشانی جاها و دریافت کد پستی دارد. با این حال پس از یک ساعت و نیم جستجو نتوانستم نام خیابانی را که می‌خواستم در آن پیدا کنم. ادارهٔ پست «سامانهٔ یکپارچهٔ نشانی‌های ایران» را هم دارد که در آن می‌توانید نشانی خود را ببینید. ولی به‌کمک آن هم نتوانستم نشانی ثبت‌شدهٔ جایی را که می‌خواستم پیدا کنم.
چیزی که پیدا کردم و مربوط به موضوع این مطلب است، نام خیابانی بود هم‌نام همان خیابانی که دنبالش می‌گشتم؛ ولی نام و نام‌خانوادگی شخص را چسبیده نوشته بودند. مثلا «شهید محمودحسین‌زاده». یعنی شکلی از نوشته که هیچ‌کس به ذهنش نمی‌رسد آن شکلی جستجو کند. بالاخره هم نتوانستم در این سایت به نتیجه‌ای برسم.

نمونهٔ سوم نرم‌افزار کتابخانه‌ای که با آن همکاری می‌کنم: دادهٔ این نرم‌افزار به دو شکل پر شده است. یکی با کپی از کتاب‌شناسی ملی، دوم با تایپ‌کردن از روی کتاب‌ها که در طی چندین سال چند نفر انجام داده‌اند.
به‌دلیل ناآگاهی کسانی که اطلاعات کتاب‌ها را در نرم‌افزار وارد کرده‌اند، نوشتن کلمات فارسی در آن وحدت رویه ندارد. نتیجه این است که مثلا وقتی لیست الفباییِ عنوان کتاب را درخواست می‌کنیم، ممکن است به دلیل تفاوت شکل کلماتِ اول و دومِ نام برخی از کتاب‌ها، درست مرتب نشود. دیگر اینکه وقتی جستجو می‌کنیم، همان مشکل «حسینقلیخانی» را دارد که دیگر توضیح نمی‌دهم.
به نظر می‌رسد اهمیت تایپ و رعایت‌کردن وحدت رویهٔ دستور خط را به کتابداران آموزش نمی‌دهند. به من که آموزش ندادند؛ کتاب‌شناسی ملی هم بویی از آن نبرده است.

چند پیشنهاد برای حل مشکل

در پایان چند پیشنهاد را بیان می‌کنم که به‌نظرم به رفع این ایراد کمک می‌کند:

۱ـ هدف نهایی از ساختن پایگاه داده جستجو در آن برای دست‌یابی به محتوا است. همهٔ کسانی که در ساخت و راه‌اندازی آن دست دارند، چه مدیر پروژهٔ ساخت، چه طراح نرم‌افزار و رابط کاربری آن، چه گروه فنی برنامه‌نویسان، چه مسئول پرکردن داده (ورود اطلاعات)، همگی باید با مفهوم «دستور خط» و اهمیت وحدت رویهٔ نوشتار و اثر آن بر کارایی جستجو آشنا باشند. این موضوع باید در برنامه‌ریزی اهمیت داشته باشد.

۲ـ «دستور خط فرهنگستان زبان و ادب فارسی» استاندارد ملی ایران است؛ با این حال به دلایل گوناگون ممکن است نتوان آن را اجرا کرد. کارشناس و مشاور آگاه به دستور خط می‌تواند نوشته‌های پایگاه دادهٔ شما را مطابق ضرورت‌ها و ملاحظات خودتان، مانند سئو در وب، تغییر دهد و در هنگام ثبت داده بر نگه‌داشتن وحدت رویه نظارت کند.

۳ـ کسی که مسئول ورود اطلاعات به پایگاه داده است باید مطمئن شود که نوشتهٔ داده یکدست است.
اگر ورود اطلاعات با تایپ‌کردن باشد، باید ماشین‌نویسان را آموزش داد و به درست‌بودن کار آن‌ها نظارت کرد. می‌دانیم که تایپ‌کردن شغل دندان‌گیری نیست و ماشین‌نویسان اغلب بی‌توجه تایپ می‌کنند. بدین ترتیب به نظر می‌رسد نظارتِ پس از تایپ هم لازم باشد.
اگر هم داده از جای دیگر به‌شکل آماده وارد می‌شود، پیش از ثبت در پایگاه دادهٔ جدید باید بررسی شود که یکدست باشد. یا سازوکاری پیش‌بینی شود که بتوان آن را پس از وارد کردن به پایگاه داده و پیش از استفاده یا پردازش مرتب کرد.

۴ـ در طراحی رابط کاربری باید به این نکته توجه کرد که کاربران اغلب هیچ توجهی به شکل تایپ‌کردن خودشان ندارند؛ چنانکه از نظر املایی هم غلط می‌نویسند. باید به‌شکلی کاربر را هدایت و راهنمایی کرد تا بتواند با تایپ‌کردن آنچه را که می‌خواهد پیدا کند.

۵ـ برنامه‌نویسان و طراحانِ ساختار نرم‌افزار می‌توانند با آگاهی از ضرورت وحدت رویهٔ دستور خط، ابزارهایی برای سیستم بسازند که آشفتگی‌های نوشتاریِ هنگام ورود اطلاعات (ثبت داده) یا هنگام جستجو را اصلاح کند. برای اینکه داده در نهایت یکدست باشد و همهٔ داده‌ای که در در پایگاه داده وجود دارد با جستجو پیدا شود.

خوانندگان محترمی که متخصص طراحی و ساخت نرم‌افزار هستند، بی‌شک پیشنهادهای بهتری برای حل این مشکل دارند.

لینکدین و توئیتر نویسنده.

تاثیر دستور خط در کارایی جستجوی پایگاه داده
تاثیر دستور خط در کارایی جستجوی پایگاه داده
https://vrgl.ir/13OGX
https://vrgl.ir/n8wno
https://virgool.io/@wa.eppagh/list/rtgodhz94q69
جستجوپایگاه دادهux
ویراستار و وب‌نویس و کتابدار، علاقه‌مند به: دانش، فناوری، هنر، زبان و ادبیات فارسی، تاریخ و باستان‌شناسی، طبیعت و محیط زیست. صاحب نظران منت بگذارند و چیزی بفرمایند تا بیاموزم. linkedin.com/in/eppagh
شاید از این پست‌ها خوشتان بیاید