২১

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

php + mysql এ করার প্রস্তাব করলাম।
বাংলা একাডেমি ডিকশনারীকে আদর্শ ধরা যায়।
আপতত সিস্টেম টা php + mysql দিয়েই চলুক। ইনপুট দেওয়া হয়ে গেলে ডাটাবেজ কে যেকোন প্লাটফর্মে নেওয়া যাবে।

সারিম'এর ওয়েবসাইট

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

২২

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

মেরাজ০৭ লিখেছেন:

ভাই ডিকশনারিতো অনেক আছে। একটা ট্রান্সলেশন সাইট বানানো দরকার খুবই sad

এইটা অনেক জটিল কাজ। এই কাজ করার মত ক্ষমতা মনেহয় একমাত্র গুগলেরই আছে।

সারিম লিখেছেন:

php + mysql এ করার প্রস্তাব করলাম।
বাংলা একাডেমি ডিকশনারীকে আদর্শ ধরা যায়।
আপতত সিস্টেম টা php + mysql দিয়েই চলুক। ইনপুট দেওয়া হয়ে গেলে ডাটাবেজ কে যেকোন প্লাটফর্মে নেওয়া যাবে।

এটা আপনাগো ব্যাপার, স্বপ্নচারী ভাইতো কিছু কয় না  sad
যা করার দ্রুত করেন এন্ট্রি দেওয়া শুরু করি।

২৩

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

অভিধান কপিরাইটের মানে হচ্ছে সরাসরি একটি প্রিন্টেড ডিকশনারীকে পুনরায় হুবহু প্রিন্ট, ফটোকপি ইত্যাদি করে বিক্রি করা যাবে না। আমরা এখানে নিজ হাতে ইনপুট দেব। শব্দ এবং তার অর্থের সরাসরি কপিরাইট কারও নাই। (এটা জব্বারের কিবোর্ড না)
http://wiki.answers.com/Q/What_does_a_d … ht_include

আমার প্রস্তাবটি নিম্নরূপ -

গুগল এ্যপইঞ্জিনে আমি একটা ডাটাবেস দাঁড় করাই। ইনপুট শেষ হলে পুরো ডাটাবেসকে বেশ কয়েকটা ফরম্যাটে ডাউনলোড করা যাবে। এই ডাটা সম্পূর্ণরূপে ওপেনসোর্স থাকবে। পাইথন-এ্যপইঞ্জিনে করা এই সোর্সকোডও উন্মুক্ত থাকবে (আমি গিটহাবে পাবলিশ করবো)। যারা যারা কোডিং-এ বা ডাটাবেস-ডিজাইনে কন্ট্রিবিউট করতে চান - তারা সরাসরি কোড বদলে প্যাচ পাঠাতে পারেন বা আলোচনা করতে পারেন।

আমি জানি, পিএইচপি-তে করলে অনেক লোকবল পাওয়া যেত। কিন্তু এ্যপইঞ্জিন পুরোপুরি ফ্রি গুগল মারা যাওয়ার আগ পর্যন্ত, তাই এতে অযথা টাকা খরচ করার কোন প্রয়োজন নাই। মূলত এটা স্রেফ ডাটা সংগ্রহের জন্য। ডাটা একবার সংগ্রহ হয়ে গেলে যেকোন ভাষায়, যেকোন প্লাটফরমে সফটওয়্যার তৈরী করা যাবে।

বাংলা একাডেমি এবং সংসদ অভিধানকে আমরা ভিত্তি হিসেবে নিতে পারি।

২৪

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

ধন্যবাদ আসিফ শাহো ভাই সুন্দর একটি প্রস্তাবনার জন্য। আমি আছি আপনাদের সাথে যদিও কপি পেষ্ট ছাড়া তেমন কিছু জানি না।

২৫ সর্বশেষ সম্পাদনা করেছেন Feba_0321 (২২-১০-২০১০ ১৬:২৫)

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

ভাল উদ্দ্যেগ এর সফলতা কামনা করছি thumbs_up।এবং পাশে আছি hug

২৬

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

অ্যাপস্পট কি কি ফরমেটে ডাটাবেজ সাপোর্ট করে ? ডাটাবেজ একটা জায়গায় রাখলেও আমি চাচ্ছিলাম ক্লায়েন্ট প্রগ্রামটা সব জায়গায় রাখার ব্যবস্থা করতে।  যদি মাইএসকিউএল এর মত কিছু হয় যেখানে 3306 পোর্ট সবাই অ্যাক্সেস করতে পারল। এরকম হলে ভালো হত। আমার জ্ঞানের দৌড় বলছে যে এই ডাটাবেজ সেরকম বড়ো হবে না। ফোরামের সার্ভারেই রাখা যেতে পারে।

যাতে সদস্যদের ব্লগ , সাইট, ফোরাম ইত্যাদিতে ছোট ছোট উইজেড আকৃতির ইনপুট বক্স বসিয়ে দেওয়া যায় । কয়েক লাইন html কোড দিয়েই। যাতে সব জায়গা থেকেই যে কারো চোখে পড়লেই কয়েকটা শব্দ ইনপুট দিয়ে দিলো।তবে ইউসার অথোনিকেশন জরুরী। এমন করা যেতে পারে গেস্ট ইউসারদের দেওয়া ইনপুট সরাসরি সেভ হবে না। রেজিস্টার্ড ইউসার কেউ এখন অ্যালাউ করবে।

ডাটাবেজে আশিফ সাহো ভাইয়ের কথা মতই শব্দগুলা থাকবে সাথে প্রতিশব্দ ও বিপরিতার্থক শব্দও থাকতে পারে।

কলাম১ঃ শব্দ
কলাম২ঃ অর্থ
কলাম৩ঃ কোন পার্টস ওফ স্পিচ যেমন নাউন বা ভার্ব এরকম
কলাম৪ঃ প্রতিশব্দ
কলাম৫ঃ বিপরিত শব্দ

এছাড়া রেসপন্স বেশি হলে "উদাহরন" , "উচ্চারন" , উৎপত্তি ইত্যাদি ইত্যাদি ফিল্ডও যুক্ত করা যেতে পারে।

সারিম'এর ওয়েবসাইট

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

২৭

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

হুম, বেজ হিসেবে, বাংলা একাডেমী স্ট্যান্ডার্ড ধরা হোক।
আর ইনপুট একটা হলেই হলে। সবচেয়ে বড়কথা সহজে ইনপুট করা গেলেই হল। যাতে সবাই করতে পারে।
আর যারা ইনপুট করবে তাদের একটা করে ইউজারনেম পাসওয়ার্ড দিলে ভাল হয়। গন্ডগোল বাধার সম্ভাবনা কম থাকবে।

@আশিফ শাহো
চ্যাটবট তো। দাড়ান প্র্যাকটিকালই বুঝিয়ে দেই।
আপনার জিটক একাউন্টে en2bn@bot.im এই আইডিটা এড করুন।
তারপর এর সাথে চ্যাট করা শুরু করুন।
এটাও একটা ডিকশনারী। তবে রিসোর্স খুব কম। এজন্য সহজ শব্দ জিজ্ঞেস কইরেন। wink

২৮

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

১.
একই চাকা বারবার আবিষ্কারের মত ব্যাপার হল কি না সেটা একটু খেয়াল করতে হবে। অর্থাৎ একই কাজ অন্য কেউ করছে কি না সেটা একটু খোঁজ নেয়া দরকার।

মজিলা ফাউন্ডেশনের একটা চমৎকার স্পেলচেকার আছে। অভিধান অবশ্যই তা থেকে ভিন্ন ... কিন্তু ওদেরই কোনো অভিধান প্রজেক্ট আছে কি না কিংবা অংকুরের কোনো প্রজেক্ট আছে কি না সেটা খোঁজ নেয়া দরকার।

২.
শুধু ইনপুট দিলেই তো হবে না। সেটা ঠিকমত হল কি না, বানানে উ-কার ঊ-কার (হ্রস্ব-উ-কার, দীর্ঘ্য-ঊ-কার), ু-ূ, ি-ী, বিভিন্ন রকম ন-ণ, স-ষ-শ, র-ড়-ঢ় ইত্যাদি ঠিকমত হল কি না এগুলো চেক করার জন্য রিসোর্স দরকার। মূল অভিধান দেখে টাইপ করলেও টাইপো হতে পারে।

২৯

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

শামীম লিখেছেন:

শুধু ইনপুট দিলেই তো হবে না। সেটা ঠিকমত হল কি না, বানানে উ-কার ঊ-কার (হ্রস্ব-উ-কার, দীর্ঘ্য-ঊ-কার), ু-ূ, ি-ী, বিভিন্ন রকম ন-ণ, স-ষ-শ, র-ড়-ঢ় ইত্যাদি ঠিকমত হল কি না এগুলো চেক করার জন্য রিসোর্স দরকার। মূল অভিধান দেখে টাইপ করলেও টাইপো হতে পারে।

এটা করা খুব একটা সমস্যা হবে না। কারণ রিভিউ তো হবেই।

৩০

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

১. একই চাকা বারবার আবিষ্কারের আসলেই প্রয়োজন নাই। তবে এখন পর্যন্ত আমি কোন ওপেনসোর্স ডাটাবেস দেখি নাই অভিধানের জন্য। যা আছে সবই ক্লোজডসোর্স সফটওয়্যার, যা অন্যকেউ অন্যকোন সফটওয়্যারে ব্যবহার করতে পারে না। কাউকে অভিধান-ভিত্তিক কোন সফটওয়্যার বানাতে হলে আবার নতুন করে ডাটাবেস তৈরী করতে হয়। এই প্রজেক্ট সেই অহেতুক খাটুনি কমাবে। তবে অবশ্যই আমাদের আরও খোঁজ-খবর নেয়া উচিত কেউ এরকম ডাটাবেস সত্যিই বানিয়েছে কিনা ইতোমধ্যে।

২. এটা খুবই গুরুত্বপূর্ণ পয়েন্ট। এগুলো ঠিকভাবে দেয়া হচ্ছে কিনা সেগুলো চেক করারও অপশন থাকবে। কিন্তু বাংলায় ভাল পারদর্শী লোকজন প্রজেক্টে যোগদান না করলে এই কোয়ালিটি কন্ট্রোলটি প্রশ্নবিদ্ধ-ই থাকবে। তবে এই অপশন তো সবসময়ই থাকবে, ফলে যেকোন সময় যে কেউ কোয়ালিটি ঠিক রাখার জন্য তার ইনপুট দিতে পারবেন। এরপর সমন্বয়ক, এডমিনরা সেই ইনপুট যাচাই করে আপডেটও করতে পারবেন।

সহজ ভাষায় এটা একটি সম্পূর্ণ গতর-খাটা প্রজেক্ট। সকলে মিলে এগিয়ে আসতে হবে। উইকিপিডিয়া যদি পারে, আমরা কেন পারবো না?

সারিম, ক্লায়েন্টকে কখনই সরাসরি ডাটাবেস এক্সেস দেবে না, কখনও না। গেস্ট ইনপুট দেয়া যাবে না। একবার স্প্যামিং শুরু হয়ে গেলে আর আটকানো যাবে না। গুগল একাউন্ট ছাড়া লোকজন আজকের দুনিয়াতে খুব কমই আছে। কাউকে রেজিস্টার করতে হবে না। গুগল একাউন্ট দিয়ে ইনপুট করা যাবে।

আইফ্রেম থাকতে উইজেট নিয়ে কোন চিন্তা করতে হবে না। যেকোন সাইটেই এটা যোগ করা যাবে।

এখানে একটা ডাটা-মডেল দাঁড় করালাম। অনুগ্রহ করে আপনাদের মন্তব্য দিন -
http://github.com/nsmgr8/Bangla-Diction … /models.py

৩১ সর্বশেষ সম্পাদনা করেছেন আশিফ শাহো (২২-১০-২০১০ ২০:৫০)

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

কি যে খুশি লাগতেছে বলি কেমনে  yahoo


স্বপ্নচারী লিখেছেন:

অভিধান কপিরাইটের মানে হচ্ছে সরাসরি একটি প্রিন্টেড ডিকশনারীকে পুনরায় হুবহু প্রিন্ট, ফটোকপি ইত্যাদি করে বিক্রি করা যাবে না। আমরা এখানে নিজ হাতে ইনপুট দেব। শব্দ এবং তার অর্থের সরাসরি কপিরাইট কারও নাই। (এটা জব্বারের কিবোর্ড না)
বাংলা একাডেমি এবং সংসদ অভিধানকে আমরা ভিত্তি হিসেবে নিতে পারি।

থোড়াই পড়োয়া করি জব্বারকে। বাংলা একাডেমিকে স্ট্যন্ডার্ড হিসেবে ধরলে মন্দ হয় না, যাই হোক এটা একটা ধরলেই হবে কিম্বা কয়েকটা নিয়া বানালেও হবে।

সারিম লিখেছেন:

যাতে সদস্যদের ব্লগ , সাইট, ফোরাম ইত্যাদিতে ছোট ছোট উইজেড আকৃতির ইনপুট বক্স বসিয়ে দেওয়া যায় । কয়েক লাইন html কোড দিয়েই। যাতে সব জায়গা থেকেই যে কারো চোখে পড়লেই কয়েকটা শব্দ ইনপুট দিয়ে দিলো।তবে ইউসার অথোনিকেশন জরুরী। এমন করা যেতে পারে গেস্ট ইউসারদের দেওয়া ইনপুট সরাসরি সেভ হবে না। রেজিস্টার্ড ইউসার কেউ এখন অ্যালাউ করবে।

উইজেট বসানোর সিস্টেম করা যেতে পারে তবে এটা মনেহয় পরেও করা যাবে। যারা কাজ করবে তাদের সিলেকশন করলে মনে হয় ভাল হবে নয়ত ঝামেলা হতে পারে(ভূলও হইতে পারে)।

সারিম লিখেছেন:

ডাটাবেজে আশিফ সাহো ভাইয়ের কথা মতই শব্দগুলা থাকবে সাথে প্রতিশব্দ ও বিপরিতার্থক শব্দও থাকতে পারে।
কলাম১ঃ শব্দ
কলাম২ঃ অর্থ
কলাম৩ঃ কোন পার্টস ওফ স্পিচ যেমন নাউন বা ভার্ব এরকম
কলাম৪ঃ প্রতিশব্দ
কলাম৫ঃ বিপরিত শব্দ
এছাড়া রেসপন্স বেশি হলে "উদাহরন" , "উচ্চারন" , উৎপত্তি ইত্যাদি ইত্যাদি ফিল্ডও যুক্ত করা যেতে পারে।

প্রস্তাবটা আমি সমর্থন করছি তবে প্রথম পর্যায়ে মনেহয় ১,২,৩ ফিল্ডটি রাখলেই ভাল হবে, কারন অনেক কাজ বাকি আছে এন্ট্রি দিতে অনেক সময় লাগবে, পরে  ৫টি আইটেমই রাখতে পারব আমরা। এত করে একটা ডেমো ভার্সন দ্রুত বের করা সম্ভব হবে।

বাবর লিখেছেন:

চ্যাটবট তো। দাড়ান প্র্যাকটিকালই বুঝিয়ে দেই।
আপনার জিটক একাউন্টে en2bn@bot.im এই আইডিটা এড করুন।

হুম জটিল জিনিস আসলে জিটক ইউজ করিনা তো তাই জানতাম না। ধন্যবাদ আপনাকে বুঝিয়ে বলার জন্য।

শামীম লিখেছেন:

শুধু ইনপুট দিলেই তো হবে না। সেটা ঠিকমত হল কি না, বানানে উ-কার ঊ-কার (হ্রস্ব-উ-কার, দীর্ঘ্য-ঊ-কার), ু-ূ, ি-ী, বিভিন্ন রকম ন-ণ, স-ষ-শ, র-ড়-ঢ় ইত্যাদি ঠিকমত হল কি না এগুলো চেক করার জন্য রিসোর্স দরকার। মূল অভিধান দেখে টাইপ করলেও টাইপো হতে পারে।

আমারতো চেক করব অবশ্যই তাছাড়া ট্রায়াল বের করার পর অনেক ভূল বের হবে। তারপরও যারা এন্ট্রি দিব তাদের সকলকে সাবধানে কাজ করতে হবে, এজন্য এন্ট্রি দেবার জন্য অভিজ্ঞ লোক বাছাই করা উচিৎ, বিশেষ করে যারা ফনেটিক ব্যাবহারকারী তাদের এন্ট্রি দেওয়ার অনুমতি দিলে মনেহয় ভূল বেশি হবে।

স্বপ্নচারী লিখেছেন:

এটা খুবই গুরুত্বপূর্ণ পয়েন্ট। এগুলো ঠিকভাবে দেয়া হচ্ছে কিনা সেগুলো চেক করারও অপশন থাকবে। কিন্তু বাংলায় ভাল পারদর্শী লোকজন প্রজেক্টে যোগদান না করলে এই কোয়ালিটি কন্ট্রোলটি প্রশ্নবিদ্ধ-ই থাকবে। তবে এই অপশন তো সবসময়ই থাকবে, ফলে যেকোন সময় যে কেউ কোয়ালিটি ঠিক রাখার জন্য তার ইনপুট দিতে পারবেন। এরপর সমন্বয়ক, এডমিনরা সেই ইনপুট যাচাই করে আপডেটও করতে পারবেন।

যেকোন প্রকার পরিশ্রমের জন্য আমি এক পায়ে খাড়া, খালি বলবেন কি করতে হবে  sad 

স্বপ্নচারী লিখেছেন:

সহজ ভাষায় এটা একটি সম্পূর্ণ গতর-খাটা প্রজেক্ট। সকলে মিলে এগিয়ে আসতে হবে। উইকিপিডিয়া যদি পারে, আমরা কেন পারবো না?

পারব না মানে? করেই ছাড়ব ইনশাল্লাহ!!!

স্বপ্নচারী লিখেছেন:

সারিম, ক্লায়েন্টকে কখনই সরাসরি ডাটাবেস এক্সেস দেবে না, কখনও না। গেস্ট ইনপুট দেয়া যাবে না। একবার স্প্যামিং শুরু হয়ে গেলে আর আটকানো যাবে না। গুগল একাউন্ট ছাড়া লোকজন আজকের দুনিয়াতে খুব কমই আছে। কাউকে রেজিস্টার করতে হবে না। গুগল একাউন্ট দিয়ে ইনপুট করা যাবে।
আইফ্রেম থাকতে উইজেট নিয়ে কোন চিন্তা করতে হবে না। যেকোন সাইটেই এটা যোগ করা যাবে।

ডাটা এন্ট্রি করার জন্য লোক নির্দিষ্ট করা হলে মনেহয় ভাল হবে, তাতে ভূল ভ্রান্তি কম হবে।
আইফ্রেম তো ওয়ার্ডপ্রেসের জন্য, ব্লগারের জন্য কোন ব্যাবস্থা থাকলে ভাল হত না?


যেকোন খাটুনিতে রাজি আছি, ডিকশনারীতে আমার নামটা একটু রাইখেন ভাই  tongue_smile
আমার মোটা মাথায় আসা যেকোন ভূলের জন্য ক্ষমাপ্রার্থী।

৩২

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

আশিফ, আপনি নিজেই তো ভূল বানান ভুল লিখেছেন।  tongue

Flickr     500px    Facebook     SRS    Twitter

শিমুল১৩'এর ওয়েবসাইট

লেখাটি CC by-nc-nd 3. এর অধীনে প্রকাশিত

৩৩

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

+1

আর php+mySQL এ +1

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

৩৪

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

চমৎকার উদ্যোগ।  thumbs_up

♣ "ভাগ্যকে দোষ দিয়ে আমরা পাপীরা নিজেদেরকে হালকা করতে চাই। অথচ একই পাপ আরেকজন করলে ওকে অপবাদ দিতে, সর্বোচ্চ শাস্তি দিতে বাধে না আমাদের। ভাগ্যে লেখা ছিলো- বলে ক্ষমা করে দেই না লোকটাকে" ♣

৩৫

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

শিমুল১৩ লিখেছেন:

আশিফ, আপনি নিজেই তো ভূল বানান ভুল লিখেছেন।  tongue

ভাই ক্ষেপলেন কেন আপনারে তো কিছু কই নাই  smile

৩৬

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

স্বপ্নচারী লিখেছেন:

এখানে একটা ডাটা-মডেল দাঁড় করালাম। অনুগ্রহ করে আপনাদের মন্তব্য দিন -
http://github.com/nsmgr8/Bangla-Diction … /models.py

ভাই টেবিল টা কেমন এটু একে দিবেন smile

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

৩৭ সর্বশেষ সম্পাদনা করেছেন invarbrass (২৩-১০-২০১০ ২১:৩০)

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

আসিফ ভাইকে ধন্যবাদ একটি গুরুত্বপূর্ণ ব্যাপারে উদ্যোগ নেবার জন্য। স্বপ্নচারী ভাইকে ধন্যবাদ একটি কংক্রিট ডেমোর জন্য। স্বপ্নচারী ভাইয়ের মডেলের উপর ভিত্তি করে একটু ঘষামাজা করে আরেকটু extensible/flexible মডেল দাঁড় করালাম।

মডেলটির E-R ডায়াগ্রাম (UML ডায়াগ্রামটা বড় দেখার জন্য ছবিতে ক্লিকান):
http://img249.imageshack.us/img249/4238/engbengdictschema101023.png

উপরের মডেলটির SQL DDL (MySQL 5 কম্প্যাটিবল):

# ---------------------------------------------------------------------- #
# Project file:          beng_dict.dez                                   #
# Project name:          beng_eng_dict                                   #
# Target DBMS:           MySQL 5                                         #
# Author:                invarBrass                                      #
# Created on:            2010-10-23 20:23                                #
# ---------------------------------------------------------------------- #


# ---------------------------------------------------------------------- #
# Tables                                                                 #
# ---------------------------------------------------------------------- #

# ---------------------------------------------------------------------- #
# Add table "dictionary"                                                 #
# ---------------------------------------------------------------------- #

CREATE TABLE `dictionary` (
    `dict_id` INTEGER NOT NULL AUTO_INCREMENT,
    `dict_name` VARCHAR(40) NOT NULL UNIQUE,
    CONSTRAINT `PK_dictionary` PRIMARY KEY (`dict_id`)
);

CREATE INDEX `IX_DICT_NAME` ON `dictionary` (`dict_name`);

# ---------------------------------------------------------------------- #
# Add table "words_main"                                                 #
# ---------------------------------------------------------------------- #

CREATE TABLE `words_main` (
    `word_id` INTEGER NOT NULL AUTO_INCREMENT,
    `dict_id` INTEGER NOT NULL,
    `original_word` VARCHAR(40) NOT NULL,
    `phoneme` VARCHAR(40) DEFAULT 'NULL',
    `review_status` ENUM(PENDING, ACCEPTED, REJECTED) DEFAULT 'PENDING',
    `added_on` DATE NOT NULL DEFAULT NOW(),
    `comments` VARCHAR(40) DEFAULT 'NULL',
    CONSTRAINT `PK_words_main` PRIMARY KEY (`word_id`)
);

CREATE INDEX `IX_words_orig_word` ON `words_main` (`original_word` ASC);

CREATE INDEX `IX_words_status_time` ON `words_main` (`review_status`,`added_on`);

ALTER TABLE `words_main` ADD CONSTRAINT `CC_words_main_original_word` 
    CHECK (UNIQUE);

# ---------------------------------------------------------------------- #
# Add table "word_synonyms"                                              #
# ---------------------------------------------------------------------- #

CREATE TABLE `word_synonyms` (
    `word_id` INTEGER NOT NULL,
    `contributor_id` INTEGER,
    `synonym` VARCHAR(40) NOT NULL,
    `review_status` ENUM(PENDING, ACCEPTED, REJECTED) NOT NULL DEFAULT 'PENDING',
    `last_updated` TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX `IX_word_synonyms_word` ON `word_synonyms` (`word_id`);

CREATE INDEX `IX_word_synonyms_status_time` ON `word_synonyms` (`review_status`,`last_updated`);

# ---------------------------------------------------------------------- #
# Add table "word_antonyms"                                              #
# ---------------------------------------------------------------------- #

CREATE TABLE `word_antonyms` (
    `word_id` INTEGER NOT NULL,
    `contributor_id` INTEGER,
    `antonym` VARCHAR(40) NOT NULL,
    `review_statss` ENUM(PENDING, ACCEPTED, REJECTED) NOT NULL DEFAULT 'PENDING',
    `last_updated` TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX `IX_word_antonyms_word` ON `word_antonyms` (`word_id`);

CREATE INDEX `IX_word_antonyms_status_time` ON `word_antonyms` (`review_statss`,`last_updated`);

# ---------------------------------------------------------------------- #
# Add table "word_translations"                                          #
# ---------------------------------------------------------------------- #

CREATE TABLE `word_translations` (
    `word_id` INTEGER NOT NULL,
    `pos_id` INTEGER NOT NULL,
    `contributor_id` INTEGER DEFAULT NULL,
    `translation_entry` VARCHAR(80) NOT NULL,
    `review_status` ENUM(PENDING, ACCEPTED, REJECTED) DEFAULT 'PENDING',
    `last_updated` TIMESTAMP DEFAULT NOW(),
    `comments` VARCHAR(40) DEFAULT 'NULL'
);

CREATE INDEX `IX_trans_word` ON `word_translations` (`word_id`);

CREATE INDEX `IX_trans_time_status` ON `word_translations` (`last_updated`,`review_status`);

# ---------------------------------------------------------------------- #
# Add table "parts_of_speech"                                            #
# ---------------------------------------------------------------------- #

CREATE TABLE `parts_of_speech` (
    `pos_id` INTEGER NOT NULL,
    `pos_name` VARCHAR(40) NOT NULL,
    CONSTRAINT `PK_parts_of_speech` PRIMARY KEY (`pos_id`)
);

CREATE INDEX `IX_parts_of_speech` ON `parts_of_speech` (`pos_name`);

# ---------------------------------------------------------------------- #
# Add table "word_usages"                                                #
# ---------------------------------------------------------------------- #

CREATE TABLE `word_usages` (
    `word_id` INTEGER NOT NULL,
    `contributor_id` INTEGER,
    `example_phrase` VARCHAR(80) NOT NULL,
    `translated_phrase` VARCHAR(240) NOT NULL,
    `review_status` ENUM(PENDING, ACCEPTED, REJECTED) DEFAULT 'PENDING',
    `last_updated` TIMESTAMP NOT NULL DEFAULT NOW(),
    `comments` VARCHAR(40) DEFAULT 'NULL'
);

CREATE INDEX `IX_usages_word` ON `word_usages` (`word_id`);

CREATE INDEX `IDX_usages_time_status` ON `word_usages` (`last_updated`,`review_status`);

# ---------------------------------------------------------------------- #
# Add table "contributors"                                               #
# ---------------------------------------------------------------------- #

CREATE TABLE `contributors` (
    `contributor_id` INTEGER NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(20) NOT NULL UNIQUE,
    `password` VARCHAR(20) NOT NULL,
    `real_name` VARCHAR(80) DEFAULT 'NULL',
    `email` VARCHAR(40) NOT NULL UNIQUE,
    `website` VARCHAR(80) DEFAULT 'NULL',
    `date_registered` TIMESTAMP NOT NULL DEFAULT NOW(),
    `comments` VARCHAR(80) DEFAULT 'NULL',
    CONSTRAINT `PK_contributors` PRIMARY KEY (`contributor_id`)
);

CREATE INDEX `IDX_contributors` ON `contributors` (`username`,`password`);

# ---------------------------------------------------------------------- #
# Foreign key constraints                                                #
# ---------------------------------------------------------------------- #

ALTER TABLE `words_main` ADD CONSTRAINT `dictionary_words_main` 
    FOREIGN KEY (`dict_id`) REFERENCES `dictionary` (`dict_id`) ON DELETE CASCADE;

ALTER TABLE `word_synonyms` ADD CONSTRAINT `words_main_word_synonyms` 
    FOREIGN KEY (`word_id`) REFERENCES `words_main` (`word_id`) ON DELETE CASCADE;

ALTER TABLE `word_synonyms` ADD CONSTRAINT `contributors_word_synonyms` 
    FOREIGN KEY (`contributor_id`) REFERENCES `contributors` (`contributor_id`);

ALTER TABLE `word_antonyms` ADD CONSTRAINT `words_main_word_antonyms` 
    FOREIGN KEY (`word_id`) REFERENCES `words_main` (`word_id`) ON DELETE CASCADE;

ALTER TABLE `word_antonyms` ADD CONSTRAINT `contributors_word_antonyms` 
    FOREIGN KEY (`contributor_id`) REFERENCES `contributors` (`contributor_id`);

ALTER TABLE `word_translations` ADD CONSTRAINT `words_main_word_translations` 
    FOREIGN KEY (`word_id`) REFERENCES `words_main` (`word_id`) ON DELETE CASCADE;

ALTER TABLE `word_translations` ADD CONSTRAINT `parts_of_speech_word_translations` 
    FOREIGN KEY (`pos_id`) REFERENCES `parts_of_speech` (`pos_id`) ON DELETE CASCADE;

ALTER TABLE `word_translations` ADD CONSTRAINT `contributors_word_translations` 
    FOREIGN KEY (`contributor_id`) REFERENCES `contributors` (`contributor_id`);

ALTER TABLE `word_usages` ADD CONSTRAINT `words_main_word_usages` 
    FOREIGN KEY (`word_id`) REFERENCES `words_main` (`word_id`) ON DELETE CASCADE;

ALTER TABLE `word_usages` ADD CONSTRAINT `contributors_word_usages` 
    FOREIGN KEY (`contributor_id`) REFERENCES `contributors` (`contributor_id`);

স্কীমা ডাউনলোড:
http://www.4shared.com/file/4YvdOxj0/en … ict_1.html

হাতের কাছে ডিক্সনারী ছিলো না, গত ৫ বছরে ডিক্সনারীও ধরি নাই। তবে ডিক্সনারীর এন্ট্রিগুলোর লেআউট যতদূর মনে পড়ে সেভাবে সিস্টেমটা মডেলিং করেছি:

নতুন মডেলটি language agnostic (ভাষা নিরপেক্ষ) রাখা হয়েছে। dictionary টেবিলে প্রাথমিকভাবে English-To-Bangla এবং Bangla-To-English দিয়ে কাজ শুরু করতে পারি। ভবিষ্যৎে আরবী, ফ্রেন্চ, স্প্যানিশ যেকোনো ভাষা যোগ করা যাবে ইচ্ছামত।

প্রতিটি শব্দের অনেকগুলো অর্থ থাকে - একই শব্দের অর্থ ভিন্ন কন্টেক্সটে ভিন্ন রকম হয়। তাই ডেটাবেইজ মডেলটাকে মাস্টার-ডিটেল করেছি। words_main হলো মাস্টার টেবল, এই টেবিলের original_word ফিল্ডে থাকবে ডিক্সনারীর মূল কী-ওয়ার্ডটি (ইংলিশ, বাংলা যাই হোক না কেন)

words_main মাস্টার টেবলের অধীনে থাকছে নীচের স্লেভ টেবলগুলো:
word_translations - এটাতে থাকবে শব্দটির ট্রান্সলেশন।
word_usages  - এটাতে থাকবে শব্দটি সংক্রান্ত বিভিন্ন example phrases, expressions etc.
word_synonyms, word_antonyms

টেবিলগুলো ঐভাবে মডেল করার পেছনে উদ্দেশ্য বোঝার জন্য এখানে একটু সময় দিতে পারেন। (তবে thefreedictionary.com-এর মত মডেল করতে গেলে অনেক বেশি জটিল হবে - তবে এখান থেকে কিছু আইডিয়া পাবেন)

ইম্পলিমেন্টেশনের ব্যাপারে কিছু সাজেশন আছে:

ওয়েবসাইট পাইথন/পিএইচপি যেভাবেই হোক, একটা RESTful ওয়েব সার্ভিস ইম্প্লিমেন্ট করতেই হবে। XML-RPC বা JSON-RPC যেকোনো RPC মেকানিজম থাকতে পারে। আমি ব্যক্তিগতভাবে JSON পছন্দ করি, তবে পিএইচপিতে মনে হয় JSON-RPC সাপোর্ট সুবিধার না - XML-RPC ইন্টারফেস যোগ করলেই মনে হয় ভালো হবে।

RPC থাকলে সারিম ভাই যে উইজেটের কথা বলছেন তা ইম্পলিমেন্ট করা সহজ হবে। এছাড়া ক্রসপ্ল্যাটফর্ম ডেস্কটপ এ্যাপও তৈরী করা যাবে - ব্রাউজার ছাড়াই ডেটা এন্ট্রি/শব্দ লুকআপের জন্য। জেসন সাপোর্ট থাকলে মূল ওয়েবসাইটটাও সহজে এ্যাজাক্সীফাই করা যাবে। এমনকি, ভবিষ্যৎে হয়তো জাভাস্কৃপ্ট উইজার্ডরা এরকম একটি সিস্টেম তৈরী করে দিতে পারবেন - বিভিন্ন ব্লগে নিশ্চয়ই দেখেছেন কোনো শব্দের উপর মাউস পয়েন্টার হোভার করলে একটি পপ-আপ উইন্ডোতে এ্যাড দেখায়। ঐসব স্কৃপ্টগুলো ঘষামাজা করে ডিক্সনারী লুকআপ করার কাজেও ব্যবহার করা যাবে  tongue
প্রাথমিকভাবে RESTful ইন্টারফেসটা এইসব কাজ করবে:
* ইউজার অথেন্টিকেশন - ইউজার লগিন।
* ডেটা এন্ট্রি - নতুন শব্দ, অনুবাদ, উদাহরণ ইত্যাদি যোগ করা
* ডেটা এডিটিং/রিভিউ - এ্যাডমিন ইউজাররা বিভিন্ন শব্দার্থ এডিট/ডিলিট/রিজেক্ট করতে পারবেন
* ওয়ার্ড লুকআপ সার্ভিস - ইনপুট: সোর্স ল্যাংগুয়েজ এবং টার্গেট ল্যাংগুয়েজ (যেমন ইংরেজী => বাংলা) + কীওয়ার্ড
                                 আউটপুট: বিভিন্ন কম্বিনেশনের আউটপুট হতে পারে, যেমন - শুধু অনুবাদ, অথবা অনুবাদ + উদাহরণ, অথবা অনুবাদ + উদাহরণ + synonyms + antonyms

উপরের মডেলে contributors টেবিলে ইউজারের প্রিভিলেজ সিস্টেম নাই। তবে এরকম একটা প্রিভিলেজ সিস্টেম থাকলে ভালো হয়:
* সাধারণ কন্ট্রিবিউটর - শুধু এন্ট্রি যোগ করতে পারবে
* মডারেটর - এন্ট্রি রিজেক্ট/এডিট করতে পারবে, তবে ডিলিট করতে পারবে না
* সুপার-মডারেটর - মডারেটরের মত, তবে এরা এন্ট্রি ডিলিটও করতে পারবে

এছাড়া ভার্সন কন্ট্রোল ব্যবস্থা থাকলে ভালো হয়। একজন কষ্ট করে শব্দ যোগ করলো, আরেকজন এসে ঐটা এডিট করে ভুলভাল বানান মেরে দিলো - স্বাভাবিকভাবেই মনোমালিন্য হতে পারে!  hairpull

উপরের মডেলে বিভিন্ন টেবিলে এই ফিল্ডটা যোগ করেছি:

`review_status` ENUM(PENDING, ACCEPTED, REJECTED) DEFAULT 'PENDING'

এর মাধ্যমে প্রতিটি এন্ট্রির ওয়ার্ক-ফ্লো দেখা যাবে। একজন কন্ট্রিবিউটর যখন প্রথম কোনো এন্ট্রি করবেন, সেটার স্ট্যাটাস হবে PENDING। এরপর একজন মডারেটর সেটা রিভিউ করে ACCEPTED বা REJECTED করতে পারবেন। কোনো এন্ট্রি ACCEPTED করলে এন্ট্রিটা ভিজিটররা ওয়েবসাইটে দেখতে পারবে। আর REJECTED করলে সেটা শুধুমাত্র মডারেটররা দেখতে পারবে - পরে হয়তো এন্টৃটা সম্পাদনা করে ACCEPT করা হতে পারে।

লুসিড লীংক্সের লোকালাইযেশন প্রযেক্টে যারা কাজ করেছেন, তারা এখানে নিজস্ব এক্সপেরিয়েন্স/মতামত শেয়ার করতে পারেন।

Calm... like a bomb.

৩৮

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

ইনভার ভাই এখানে এন্ট্রিতে প্রধান্য দিচ্ছেন বাংলা এর ইংরেজি না ইংরেজি এর বাংলা?

মানে আমরা এন্ট্রি কিভাবে করবো? নিচের মত?

ইংরেজি শব্দ:
বাংলা শব্দ:
প্রতিশব্দ:
...........
.......

না

বাংলা শব্দ:
ইংরেজি শব্দ:
প্রতিশব্দ:
.......
.......

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

৩৯

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

@অনুপ
ইনভার ভাই তো শুধু অপশন রেখেছেন। একদিকের এন্ট্রি শেষ হলে অন্যদিকেও শেষ হবে।
তবে প্রথমে মনে হয় ইংরেজী থেকে বাংলায় হবে। এটাই বেশী দরকার।

৪০

Re: সম্মিলিত কাজের জন্য একটি প্রস্তাবনা

ইনভারব্রাস, আমি আসলে সিকুয়েলে যেতে চাচ্ছি না। এখানে বেশ কিছু জিনিস ওভার-নরমালাইজড হয়ে গেছে। প্রচুর জয়েন করা লাগবে একটা কুয়েরি করতে। প্রথম থেকেই তাই নোসিকুয়েল মডেল বানিয়েছি আমি। partsofspeech, dictionary, synonyms, antonyms টেবিলগুলোর আসলে কোন প্রয়োজনই নাই। এগুলো অহেতুক জয়েনার বাড়াবে। ডাটা নরমালাইজ করা হয় যখন স্থানের সমস্যা থাকে। আজকাল মেমরি নিয়ে কোন সমস্যা নাই। তাই ছোটখাট কয়েকটা ফিল্ডের জন্য আলাদা টেবিল বানিয়ে জয়েন করে সিপিইউ খরচ করার কোন মানে নাই। word_translations আলাদা রাখার কোন সুবিধাও আমি দেখছি না।

এখানে ডেমো সাইটটা সবাই দেখতে পারেন - http://bengdict.appspot.com/
একটু আধটু নাড়াচাড়া শুরু করুন। তবে এখনই আসল ডাটা এন্ট্রি শুরু করবেন না। পরীক্ষামূলকভাবে নাড়াচাড়া করুন। উদ্বোধনের আগে সকল ডাটা মুছে ফেলা হবে। তাছাড়া এটা ফাইনালও না। সবার মন্তব্য জানা যাক আগে। গ্রাফিক্স ডিজাইন নিয়ে এখনই মাথা ঘামানোর সময় হয়নি। সেটা পরে আসবে।