اردو سورٹنگ کیسےکی جائے؟

نبیل

تکنیکی معاون
السلام علیکم،
محسن ذکر کر چکے ہیں کہ تمام ترسیمہ جات کو اردو حروف تہجی کے اعتبار سے ترتیب دینے کی ضرورت پیش آئے گی۔ اس میں مسئلہ یہ پیش آئے گا کہ کمپیوٹر لینگویجز میں اردو الفاظ کے لیے عام استعمال سے قدرے مختلف سورٹنگ کی جاتی ہے جس کی وجہ سے پ سے شروع ہونے والے الفاظ ی اور ے کے بعد ظاہر ہوتے ہیں۔ اس کا حل معلوم کرنے کی ضرورت ہے۔ کرلپ کی سائٹ پر اردو کولیشن یوٹیلیٹی دستیاب ہے، کیا اس کے استعمال سے کوئی فائدہ ہو سکتا ہے؟
 

شاکرالقادری

لائبریرین
نبیل ۔۔۔ یہ ہم نے جو ری نیمنگ میں مشقت کی ہے اسی سارٹنگ کے لیے ہی تو تھی

مثلا
nbil
xakr
mHsn
earf
jwad
amjd
نبیل
شاکر
محسن
عارف
جواد
امجد

جب ہم انہیں سارٹ آوٹ کریں گے تو یہ بالکل اردو حروف تہجی کے مطابق سارٹ آئوٹ ہو جائیں گے
اگر کوئی ایسا پروگرام ہو جو ان انگریزی حروف کو متبادل اردو حروف میں بدل دے تو آپ کو یہی نام اردو رسم الخط میں لکھے ہوئے بھی مل جائیں گے لیکن شاید اس کی ضرورت ہی نہیں ہو گی کیونکہ وولٹ یا گونٹ لیب میں نام اردو سکرپٹ میں تو نہیں لکھے جائیں گے
ری نیمنگ کا بنیادی فلسفہ ہی یہی تھا کہ اردو کے حروف تہجی کے مطابق ری نیمنگ کی جائے اور فونیٹک کی بورڈ کو معیار مانا جائے تاکہ سارٹنگ درست ہو سکے
 

arifkarim

معطل
فانٹ لیب اور فانٹ کریٹر دونوں می سورٹنگ کی سہولت ہے، لیکن وہ تو انگریزی الفابیٹس کے حساب سے کرتے ہیں۔ ہمیں پائتھون یا کسی اور لینگوئج میں رینیم شدہ گلفس کو الفبائی انداذ میں سارٹ کرنا ہے۔ اس سلسلہ میں محسن بھائی نے کسی پروگرام کا ذکر کیا تھا جو پاک نوری نستعلیق کی تیاری میں‌ استعمال ہوا تھا۔
 

نبیل

تکنیکی معاون
شاکرالقادری صاحب، یہ محسن بہتر بتا سکیں گے کہ صرف ترسیمہ جات کے رومن نوٹیشن میں لکھے گئے نام ہی سورٹ کیے جا سکتے ہیں یا پھر ان کے اردو متبادل کے لحاظ سے انہیں سورٹ کرنے کی ضرورت پیش آئے گی۔
 

نبیل

تکنیکی معاون
آج محسن سے اردو سورٹنگ کے بارے میں کافی مفید گفتگو ہوئی۔ محسن کا کہنا تھا کہ کرلپ کی اردو کولیشن لائبریری کو امپورٹ کرنے کی مشقت کرنے کی بجائے کیوں نہ خود سے ایک فنکشن لکھ لیا جائے جو ترسیمہ جات کے ناموں کو اردو حروف تہجی کے مطابق ترتیب دے دے۔ میں نے ان کی تجویز پر غور کیا ہے اور اس کا الگورتھم واقعی کافی سیدھا ہے۔
یہ دراصل مجھے سارا دن اس پرابلم کا انتہائی دقت آمیز حل دریافت کرنے کے بعد معلوم ہوا ہے کہ یہ کام آسانی سے بھی ہو سکتا ہے۔ :) میں پائتھون میں یونیکوڈ اردو سٹرنگز کا weight نکالنے کا فنکشن لکھ رہا تھا، حالانکہ اس کی ضرورت ہی نہیں ہے۔ :)
 

نبیل

تکنیکی معاون
زیک، مجھے نارملائزیشن کے بارے میں علم نہیں ہے۔ میں نے جو الگورتھم سوچا ہے وہ کافی سادہ ہے۔ اس میں اردو صوتی کی بورڈ کے مطابق حروف کو ترتیب وار نمبر دے دیا جائے گا جو کہ ذیل کی طرح نظر آئے گا:

کوڈ:
weights['a']=1
weights['b']=2
weights['p']=3
weights['t']=4
weights['C']=5
weights['j']=6
...

کسی بھی اردو لفظ کی قدر معلوم کرنے کے لیے ذیل کا فنکشن استعمال کیا جا سکے گا:

کوڈ:
def weight(strWord):
	count=len(strWord)
	exp=1
	w=0
	
	for i in range(0, count):
		w=w+exp*weight[strWord[i]]
		exp*=10
	return w

اس طرح ایک کسٹم lexicographic سورٹنگ کرنا ممکن ہو جائے گا۔
 

محسن حجازی

محفلین
زکریا بھائی نارملائزیشن کیا کہہ رہے ہیں؟
اگر یونی کوڈ والی کہہ رہے ہیں تو وہ یہاں پر لاگو نہیں ہوگی ہم سیدھا سادا انگریزی کو ترتیب دے رہے ہیں لیکن weights مختلف ہیں جیسے کہ نبیل بھائی نے کہا۔
 

زیک

مسافر
جی یونیکوڈ والی ہی نارملائزیشن کی بات کر رہا ہوں۔ کیا decomposition کی ضرورت نہیں ہو گی؟ مثال کے طور پر ئ کو ایک حرف سمجھیں گے یا ء + ی؟ اور اگر ایک حرف تو پھر اس کا ویٹ کیا ہو گا؟

نبیل: آپ کے کوڈ میں کسی سٹرنگ کو ویٹ دینے کی ترتیب الٹی نہیں؟
 

نبیل

تکنیکی معاون
زیک، اس سوال کا تو محسن ہی جواب دیں گے۔ جہاں تک ویٹ اسائن کرنے کا تعلق ہے تو اس طرح بھی کام صحیح چل سکتا ہے۔ اصل میں دو comparator فنکشن ڈیفائن کرنے کی ضرورت ہوگی جوکہ اس کمپیریزن کے نتیجے میں زیادہ یا کم ویٹ والی سٹرنگ بتائیں گے۔ اسی کمپیریٹر فنکشن کو پائتھون کے sort فنکشن میں بطور پیرامیٹر استعمال کر لیا جائے گا۔
 

محسن حجازی

محفلین
جی یونیکوڈ والی ہی نارملائزیشن کی بات کر رہا ہوں۔ کیا decomposition کی ضرورت نہیں ہو گی؟ مثال کے طور پر ئ کو ایک حرف سمجھیں گے یا ء + ی؟ اور اگر ایک حرف تو پھر اس کا ویٹ کیا ہو گا؟

نبیل: آپ کے کوڈ میں کسی سٹرنگ کو ویٹ دینے کی ترتیب الٹی نہیں؟

یہ ناملائزیشن پر تو خوب بحث ہوئی تھی یونی کوڈ والوں سے۔
نہیں اس کی قطعی ضرورت نہیں،
اصل میں یوں ہے کہ جو ہمیں ترتیب دینا ہے وہ سب کا سب ASCII میں ہے۔ اب اگرکسی بھی Programming LANGUAGE میں سارٹ الگورتھم چلایا جائے تو انگریزی کا lexical order حاصل ہوگا۔ لیکن وہ ہمیں درکار نہیں۔ سو اس واسطے ہم کریں گے یہ کہ ہر ASCII حرف کو ایک وزن دیں گے (وژن لکھنے لگا تھا، اس کی زرداری اینڈ کمپنی کو ضرورت ہے :grin: ) اور جو الگورتھم چلے گا وہ اس وزن کو consider کرے گا نہ کہ اصل حروف کو۔ اب چونکہ وزن ہم خود دیں گے ہر حرف کا، نظری طور پر، میری ناقص رائے میں، سارٹ آرڈر کنٹرول کیا جا سکتا ہے۔

کیا فرماتے ہیں باقی کے علما دین و مفتیان شرع متین بیچ اس مسئلے کے؟ :grin:
 

محسن حجازی

محفلین
نبیل بھائی پروگرام کل تک پہنچ جائے گا آج میں دفتر میں بھی نہیں بڑھا سکا اسے آگے۔ کچھ اوپر کی لیپا پوتی باقی ہے۔ آج اسی لیے جلدی گھر جا رہا ہوں۔ یہ اور بات کہ ہمارے جلدی جانے پر بجلی بھی جلدی چلی جائے اور حساب برابر ہو جائے۔ :grin:
 

نبیل

تکنیکی معاون
محسن، پائتھون کے sort فنکشن میں اپنی مرضی کا compare فنکشن سپسیفائی کیا جا سکتا ہے، اور اس طرح ہم بآسانی کسٹم lexicographic سورٹنگ کر سکیں گے۔ لیکن اس سے پہلے ہمیں دیکھنا ہوگا کہ انگریزی حروف کو درست ترتیب میں وزن دیا جائے۔ یہ بھی دیکھنا پڑے گا کہ آ اور ئ کو کس ترتیب میں رکھا جائے۔ اور کیا ترسیمہ جات کی لمبائی میں اعراب شمار ہوتے ہیں؟ اور کیا اعراب کو وزن دینے کی ضرورت پیش آئے گی؟
 

محسن حجازی

محفلین
یہ سوچنا پڑے گا راستے میں یہی کام کروں گا دس کلومیٹر کی ڈرائیو ہے اسی کام کے لیے۔
کل اپنی رائے دوں گا آپ لوگ بھی سوچئے۔
 

زیک

مسافر
کوڈ:
weights['a']=1
weights['b']=2
weights['p']=3
weights['t']=4
weights['C']=5
weights['j']=6
...

کسی بھی اردو لفظ کی قدر معلوم کرنے کے لیے ذیل کا فنکشن استعمال کیا جا سکے گا:

کوڈ:
def weight(strWord):
	count=len(strWord)
	exp=1
	w=0
	
	for i in range(0, count):
		w=w+exp*weight[strWord[i]]
		exp*=10
	return w

اس طرح ایک کسٹم lexicographic سورٹنگ کرنا ممکن ہو جائے گا۔

exp کو ہر بار 10 کی بجائے کسی ایسے نمبر سے ضرب دینی ہو گی جو حروف کی تعداد سے زیادہ یا برابر ہو۔
 

نبیل

تکنیکی معاون
زیک، یہ الگورتھم اس طرح کام کرتا ہے کہ سٹرنگ میں موجود ہر حرف کے ویٹ کو اس حرف کی پوزیشن سے مطابقت رکھنے والی 10 کی پاور سے ضرب دیتا ہے۔ مثال کے طور پر اب کے لیے یہ اس طرح ویٹ نکالے گا:

1+2*10=21

اور ابپ کے لیے ویٹ اس طرح نکلے گا:

1+2*10+3*100=321

کیا اس طرح ٹھیک نہیں رہے گا؟
 

زیک

مسافر
مگر اگر حروف کی تعداد 10 سے زیادہ ہے تو پھر کیا ہو گا؟ کیا حرف کا ویٹ پھر بھی 0 سے 9 ہی تک محدود رکھنا پڑے گا؟
 

نبیل

تکنیکی معاون
نہیں، یہ الگورتھم کام نہیں دے گا۔ کسٹم سٹرنگ سورٹنگ آسان کام نہیں ہے۔
 

نبیل

تکنیکی معاون
میں نے عام سٹرنگز کو پائتھون میں سورٹ کرنے کی کوشش کی ہے اور وہ بھی غلط سورٹ‌ ہو رہی ہیں۔ اس سلسلے میں کچھ پڑھنا پڑے گا۔
 
Top